看和听¶
其实,屏幕下方的“樱桃小嘴”才是 Cozmars 的眼睛,这是一颗 500W 像素的摄像头;而 Cozmars 的耳朵(麦克风)奇怪地长在它的背上,嗯,就是按钮旁边那个小圆点。
通过摄像头和麦克风,我们就能以 Cozmars 的视角“观海听 Tao ”,图像识别、语音识别等更有趣的玩法也成为可能
Robot 的 camera 和 microphone 分别用来操作摄像头和麦克风,他们都是流设备,使用方法也类似。
需要先调用 get_buffer() 获得数据流,然后利用 with 语法来帮助我们自动打开和关闭数据流。
获取摄像头图像¶
下面的程序通过获取摄像头的实时画面,让我们用 Cozmars 的视角观察世界:
from rcute_cozmars import Robot
import cv2
with Robot() as robot:
with robot.camera.get_buffer() as cam_buf:
print('按下任意键退出')
for frame in cam_buf:
cv2.imshow('cozmars camera', frame)
if cv2.waitKey(1) > 0:
break
cv2.destroyAllWindows()
当摄像头没有在传输视频时,也可以用 capture() 方法拍张照
>>> robot.camera.capture('./photo.jpeg')
随便提一下,camera 可以通过 frame_rate 和 resolution 属性来改变帧率和分辨率
获取麦克风音频¶
用 with 和 for … in … 语法来演示一下如何获取麦克风数据,下面的程序从麦克风数据流中读取 5 秒的数据,并借助 wave 模块保存录音文件。
from rcute_cozmars import Robot
import wave
with Robot() as robot:
mic = robot.microphone
with mic.get_buffer() as mic_buf, wave.open('record.wav', 'wb') as file:
file.setnchannels(1)
file.setframerate(mic.sample_rate)
file.setsampwidth(mic.sample_width)
duration = 0
for segment in mic_buf:
file.writeframesraw(segment.raw_data)
# 麦克风输出流中每个数据块默认是 0.1 秒的音频,录制 5 秒后结束
duration += segment.duration_seconds
if duration >= 5:
break
microphone 还有几个属性: volume 和 gain 用来调节麦克风的音量大小, sample_rate 、 dtype 和 block_duration 分别是麦克风的采样率、数据类型和每次从输出流中读取的数据块的时长。除了音量增益 gain 以外,这些属性通常不需要修改。
以上演示了从麦克风和摄像头中读取数据的基本操作。有了图像和声音数据,我们就可以实现诸如图像识别、语音识别等好玩的应用了。下节见…