AI

“人工智能”这个词早已被滥用了。这年头,无论什么东西好像都要跟 AI 沾点边才行

嗯…咱也不例外[doge]

首先确保你已经 安装 rcute-ai

语音唤醒 + 语音识别

Cozmars 的唤醒词是 “R-Cute” 或 “阿Q”。当回调函数 when_called 设置好后,麦克风会被打开并在后台不断监听,当检测到唤醒词时,when_called 就会被调用。在回调函数里,你可以使用函数 listen() 进行语音识别,得到机器人听到的语句。

下面的程序设置了 when_called 回调函数,当你说 “阿Q” 时让机器人回答 “我在”,并根据你的命令前进或后退。

from rcute_cozmars import Robot
with Robot('xxxx') as robot:

    def cb():
        robot.say('我在')
        speech = robot.listen(lang='zh') # 如果要识别英文, 设置 lang='en'
        print(speech)
        if speech == '前进':
            robot.forward(1)
        elif speech == '后退':
            robot.backward(1)

    robot.when_called = cb

    print('按回车键结束程序')
    input()

如果要关闭麦克风和后台监听,只要把 when_called 设置回 None

人脸识别

Cozmars 的 show_camera_view() 方法会启动一个后台线程打开摄像头并显示实时画面。这个方法可以和 on_camera_image 回调函数配合使用,在每一帧画面显示之前对图像进行预处理。

另外,lastest_camera_view 属性用来获取最新一帧的摄像头图像,close_camera_view() 方法用来关闭摄像头画面。

下面的程序利用 rcute_ai 模块进行人脸识别。运行程序,让不同的人在摄像头前输入各自的名字,这样程序就能识别不同的人脸。

from rcute_cozmars import Robot
import rcute_ai as ai

# 使用 rcute_ai 的人脸识别类 FaceDetector
face = ai.FaceDetector()

# 定义预处理回调函数,对图像进行人脸识别和标注
def annotate_face(img):
    fr.detect(img, annotate=True)   # 识别图像中人脸的位置和名字,并在图像中标注

with Robot('xxxx') as robot:
    robot.show_camera_view()              # 显示摄像头图像
    robot.on_camera_image = annotate_face # 设置图像预处理的回调函数

    while True:
        i = input('输入画面中人物的名字(输入 q 结束程序):')
        if i == 'q':
            break
        fr.memorize(name, robot.latest_camera_view)

其实,show_camera_view() 方法在私底下所做和上一节 获取摄像头图像 里面用 robot.camera.get_buffer() 读取摄像头数据流的办法差不多,但命令行的交互模式下直接调用 show_camera_view() 则方便得多。

除了识别人脸,rcute_ai 模块还可以识别文字、物品、二维码、人体姿态、手势等。更多图像/语音识别的例子,请参考 rcute-ai