探智AI视觉与语音实验箱是一款专注于视觉、语音与AI技术的产品,聚焦数字图像处理技术,计算机视觉技术,机器学习技术,深度学习技术,语音交互技术,采用理论与实践相结合的方式,从通识概念理解,到算法研究,软件功能实现,实验操作几个方面,帮助学生掌握相关软硬件知识内容。并结合一系列综合实践案例,使学生了解相关技术在生活实际与产业实践方面的应用
位于~/uptech_ai_vbox
目录下。
本手册是针对探智AI视觉与语音实验箱的操作说明,主要介绍配套的19个示例的运行方法和运行效果。
目前包含的示例内容有:
每次在装配实验箱时,需要使用相应的工具辅助安装。
第一步: 确定摄像头高度
摄像头下平面距离桌面大约44-50cm
第二步: 摄像头需要与桌面保持水平
使用随工具箱的水平仪, 将其放置在摄像头顶部,当气泡位于水平仪器仪内部的小圆圈内,可认为水平。
第三步: 摄像头位置需要在鼠标垫物料块位置正上方
使用摄像头位置指示工具进行对准。
工具位于~/uptech_ai_vbox/0_adjust
运行方法
在终端中进行如下操作:
cd ~/uptech_ai_vbox/0_adjust
./run.sh
指示工具界面如下:
此工具可用于三个方面的调整:
摄像头
标记框的中间对齐。摄像头
标记框重合。可能出现的问题:
红点和蓝色标记框与摄像头
框有少量位移, 但标记框和摄像头
框边是平行的, 没有旋转,如上图所示。 这种情况是可以允许的。
鼠标垫边缘位于红色区域内 。 这是摄像头高度过高或者过低,请调整摄像头高度。理想的高度范围为 44cm - 50cm
, 测量点为摄像头底部到鼠标垫的垂直距离。
下面的图片展示符合标准、不符合标准情况及对应的调整方法。
上图对应摄像头高度为44cm
上图对应摄像头高度为50cm
如上图所示,从上往下看, 鼠标垫的左右两边有外扩(或者收缩)的趋势。
原因: 这是由于摄像头没有调水平。
解决方法: 请将其调整水平。
如上图所示, 鼠标垫左右两边倾斜的方向相同
原因: 摄像头(x,y)轴与鼠标垫(x,y)方向没有对齐。
解决方法: 旋转摄像头竖直的支杆。
原因: 摄像头高度过高。
解决方法: 降低摄像头高度。
如上图所示, 鼠标垫左右两边位于外部红色区域。
原因: 摄像头高度过低。
解决方法: 增加摄像头高度。
如上图所示, 蓝绿色中心位置对准标志与鼠标垫上摄像头
位置框存在较大错位。
原因: 摄像头中心与摄像头
位置框没有对齐。
解决方法: 调整摄像头或者鼠标垫位置。
调整说明:
上述5种情形会一起或几种同时存在,此时的调整顺序为:
摄像头
位置框初步对齐(情况五)。上述步骤可能会需要反复。
每次在装配好实验箱后,需要对摄像头进行校准操作。
项目连接位于~/uptech_ai_vbox/1_cam_calibration
运行方法
在终端中进行如下操作:
cd ~/uptech_ai_vbox/1_cam_calibration
./run.sh
校准工具界面如下:
将有颜色的物料块放到中间标记位置处,鼠标点击物料块的区域。当检测到物料块后,终端会打印出相关信息。在鼠标激活视频窗口的状态下,根据提示按键盘的s
键两次(两次均需根据提示按),保存校准信息并自动退出。
一些参考数值:
安装规范
步骤且符合标准), 测量值为: 机械臂基座像素位置为: x = 320, y = 22, 当前高度下图像像素密度为:11.6 pixel/cm
安装规范
步骤且符合标准), 测量值为: 机械臂基座像素位置为: x = 321, y = 51, 当前高度下图像像素密度为:9.9 pixel/cm
详细操作教程请看视频。
👇点击查看视频
每次在装配好实验箱后,需要对摄像头进行校准操作。
项目连接位于~/uptech_ai_vbox/2_color_calibration
运行方法
在终端中进行如下操作:
cd ~/uptech_ai_vbox/2_color_calibration
./run.sh
校准工具界面如下:
步骤:
根据终端提示,将对应颜色的标记块放到中间区域,鼠标点击物料块的一部分区域后根据红色框的结果和提示按下’s’键,保存此颜色的HSV数值。
可以看到窗口下有名为’size_min, size_max’的滑块,是用来调整被检测物体的大小。 正常情况下使用默认值(35, 65)即可。如果有下列情况,请根据规则调整滑块:
size_max
的值。size_min
size_max
当一个颜色校准完成后,终端会提示进行下一个颜色。直到"红,黄,绿"三个颜色都完成校准。
校准程序将校准结果保存到~/.bc_config/color_calibration.config
文件中。
请手动检查校准文件内容, 在终端输入下列命令查看:
cat ~/.bc_config/color_calibration.config
结果如下(数值每次都会不同, 但结构是一样的):
{
"red": [
153,
180,
133,
233,
38,
138,
35,
55
],
"yellow": [
7,
47,
149,
249,
60,
160,
39,
45
],
"green": [
55,
95,
118,
218,
6,
106,
35,
55
]
}
注意事项: 数值每次都会不同, 但结构是一样的, 我们只需要保证该文件存在且结构一样即可.
详细操作教程请看视频。
👇点击查看视频
上面的视频只展示红色
物料块的校准。 完整的校准流程与之前相同, 只是选取颜色的方式从点击
变为了拖拽
, 下面的是视频为完整的校准流程(注意选取颜色的区别)。
通过基于RKNN的人脸检测模型和人脸识别模型,实现一个简易的考勤系统。该系统通过摄像头对视野内的人脸进行实时检测,并用识别模型与数据库中的人脸进行对比,确定身份,进行考勤打卡。该系统还能对新用户进行注册。
项目连接位于~/uptech_ai_vbox/a_face_recognition
硬件连接:
选用模型:
运行方法:
a. 只运行人脸考勤
打开一个终端,进入考勤程序目录
cd ~/uptech_ai_vbox/a_face_recognition
./run.sh
b. 进行人脸注册
人脸注册需要打开两个终端页面, 分别输入如下内容:
# 终端1:
cd ~/uptech_ai_vbox/a_face_recognition
./run.sh
# 等终端1正常启动后,在终端2中输入:
# 终端2:
cd ~/uptech_ai_vbox/a_face_recognition
./run_face_reg.sh # 此步骤与视频中有不同,以此步骤为准
如下图所示:
运行界面如下:
在注册窗口点击Save
, 在弹出小窗口输入人员名称, 最后点击Save
保存。
等程序继续运行10s左右就会看到新注册的用户可以被正常识别,同时终端中会显示打卡成功。
详细操作方法请参考视频。
👇点击查看视频
通过预先训练好的YOLOv5模型进行水果块
识别,当检测到水果块后,机械臂会将水果块抓取并放到界面中的对应位置
项目连接位于~/uptech_ai_vbox/b_fruit_sort_and_place
硬件连接:
选用模型:
运行方法:
打开一个终端,进入水果识别与抓取程序目录
cd ~/uptech_ai_vbox/b_fruit_sort_and_place
./run.sh
程序界面如下:
退出时请先用鼠标点击视频框,按q
退出。
详细操作方法请参考视频。
👇点击查看视频
对人脸详细的特征点进行检测,绘制眼睛,眉毛,嘴唇等部位线条以及脸部实时网状图。
项目连接位于~/uptech_ai_vbox/c_face_mesh
硬件连接:
选用模型:
运行方法:
打开一个终端,进入考勤程序目录
cd ~/uptech_ai_vbox/c_face_mesh
./run.sh
程序界面如下:
退出时请先用鼠标点击视频框,按q
退出。
详细操作方法请参考视频。
👇点击查看视频
三轴机械臂的动力学仿真计算,有如下功能:
(Joint0, Joint1, Joint2)
,进行正运算计算末端的(x,y,z)坐标(x,y,z)
坐标,进行逆运算计算三轴(Joint0, Joint1, Joint2)
的转动角度计算完成后,在窗口绘制简易版的机械臂状态图。
项目连接位于~/uptech_ai_vbox/d_matplotlib_simulator/
硬件连接:
选用模型:
运行方法:
打开一个终端,进入Matplotlib仿真程序
cd ~/uptech_ai_vbox/d_matplotlib_simulator
./run.sh
程序界面如下:
退出时请按仿真器右上角x
直接关闭。
详细操作方法请参考视频。
👇点击查看视频
在同一台电脑或者在局域网内将控制指令通过socket发送到机械臂上,执行抓取任务.
项目连接位于~/uptech_ai_vbox/e_socket_robot_control
硬件连接:
选用模型:
运行方法:
本项目需要在路径~/uptech_ai_vbox/e_socket_robot_control
下打开两个终端,分别如下:
cd ~/uptech_ai_vbox/e_socket_robot_control
./run.sh
cd ~/uptech_ai_vbox/e_socket_robot_control
./run_client.sh
程序界面如下:
在socket 客户端的终端框中进行下列输入:
2
并按下 回车
.4
的位置. 在终端中输入数字4
并按下 回车
.如下图所示:
退出时请先用鼠标点击视频框,按q
退出。
详细操作方法请参考视频。
👇点击查看视频
通过预先训练好的YOLOv5模型进行手势数字
识别,当检测到手势作出的数字后,机械臂会在对应的方向上进行固定距离的运动。
项目连接位于~/uptech_ai_vbox/f_hand_gesture
硬件连接:
选用模型:
运行方法:
打开一个终端,进入手势识别
程序目录
cd ~/uptech_ai_vbox/f_hand_gesture
./run.sh
能够在图像中识别出若干手势即可认为程序正常。
注意事项:
1. 本模型为自己在小规模数据集上训练, 识别的效果在不同环境下会有较大差异。建议在白色背景前进行识别。
2. 作手势的时候请使用`左手`。
3. 手势数字与机械臂运动对应关系为:
"1" --> 向右移动3cm
"2" --> 向左移动3cm
"3" --> 向前移动3cm
"4" --> 向后移动3cm
"5" --> 向上移动3cm
"6" --> 向下移动3cm
"0" --> 回到初始点
其中`3cm`是设置的固定距离, 被 f_hand_gesture/hand_gesture/hand_gesture.py 中的 `MOVE_DIST` 参数控制
程序界面如下:
退出时请先用鼠标点击视频框,按q
退出。
详细操作方法请参考视频。
👇点击查看视频
通过摄像头实时检测检测到的人是否佩戴有口罩.
项目连接位于~/uptech_ai_vbox/g_face_mask
硬件连接:
选用模型:
运行方法:
打开一个终端,进入口罩检测程序目录
cd ~/uptech_ai_vbox/g_face_mask
./run.sh
程序界面如下:
退出时请先用鼠标点击视频框,按q
退出。
详细操作方法请参考视频。
👇点击查看视频
根据HSV值进行颜色识别,并按物料块的颜色将其放到预先定义好的位置。
项目连接位于~/uptech_ai_vbox/h_color_sort
硬件连接:
选用模型:
运行方法:
打开一个终端,进入h_color_sort
文件夹
cd ~/uptech_ai_vbox/h_color_sort
./run.sh
注意事项:
1. 放置颜色块时, 尽量不要让方块旋转。
2. 颜色识别容易受到外界环境光线,阴影的干扰。识别不准是正常现象。 可通过HSV颜色校准进行改善。
3. 如果检测到手的情况较多,请在颜色校准时尽量调小`size_max`的数值。
4. 红色识别率较低,是正常现象。
程序界面如下:
退出时请先用鼠标点击视频框,按q
退出。
详细操作方法请参考视频。
👇点击查看视频
读取Apriltag, 并根据其检测到的数字按从小到大顺序进行抓取,并放置到对应位置.
项目连接位于~/uptech_ai_vbox/i_apriltag_sort
硬件连接:
选用模型:
运行方法:
打开一个终端,进入i_apriltag_sort
文件夹
cd ~/uptech_ai_vbox/i_apriltag_sort
./run.sh
说明:
1. 受光线影响, Apriltag贴纸表面会有反光高光,导致无法检测。请手动调整Apriltag 物料块的位置。
程序界面如下:
退出时请先用鼠标点击视频框,按q
退出。
详细操作方法请参考视频。
👇点击查看视频
交互式的目标跟踪器,通过鼠标点选跟踪物体,基于RK3588深度学习模型。
项目连接位于~/uptech_ai_vbox/j_object_tracking
硬件连接:
选用模型:
运行方法:
打开一个终端,进入跟踪程序目录
cd ~/uptech_ai_vbox/j_object_tracking
./run.sh
操作步骤
1. 通过鼠标在视频界面上用鼠标框选被跟踪的对象.
2. 缓慢移动摄像头或者移动被跟踪物体,观察到跟踪框会随着运动始终在被跟踪物体上。
3. 可重新通过鼠标框选新的跟踪物体。
当视频中的被跟踪物体能够被跟踪为程序正常。
退出时请先用鼠标点击视频框,按q
退出。
详细操作方法请参考视频。
👇点击查看视频
通过基于RKNN的人脸检测模型,进行实时人脸检测。
项目连接位于~/uptech_ai_vbox/k_face_detection
硬件连接:
选用模型:
运行方法:
打开一个终端,进入人脸检测程序目录
cd ~/uptech_ai_vbox/k_face_detection
./run.sh
当视频中能够显示被框住的人脸即可视为程序正常。
退出时请先用鼠标点击视频框,按q
退出。
详细操作方法请参考视频。
👇点击查看视频
通过摄像头实时检测人体姿态.
项目连接位于~/uptech_ai_vbox/l_human_pose
硬件连接:
选用模型:
运行方法:
打开一个终端,进人体姿态检测程序目录
cd ~/uptech_ai_vbox/l_human_pose
./run.sh
当视频中显示人体姿态点即可认为程序正常.
程序界面如下:
退出时请先用鼠标点击视频框,按q
退出。
详细操作方法请参考视频。
👇点击查看视频
通过摄像头实时检测人脸表情.
项目连接位于~/uptech_ai_vbox/m_face_expression/
硬件连接:
选用模型:
运行方法:
打开一个终端,进人脸表情识别程序目录
cd ~/uptech_ai_vbox/m_face_expression
./run.sh
能够在视频中显示表情框即可视为程序正常。
说明:
1. 该程序运行了两个深度学习模型,计算量较大。帧率低,卡顿是正常现象。
2. 人脸表情受到光照等多种因素影响,识别不准确或者与你的预期结果不一样也是正常现象。
3. 可识别的表情为:
angry --> 生气
disgust --> 厌恶
fear --> 害怕
happy --> 开心
neutral --> 中性
sad --> 伤心
surprise --> 惊讶
程序界面如下:
退出时请先用鼠标点击视频框,按q
退出。
详细操作方法请参考视频。
👇点击查看视频
使用语音进行一些通用型知识提问, 通过对在线大模型的交互,获取问题答案.并使用合成语音进行回答.
项目连接位于~/uptech_ai_vbox/n_voice_assistant
硬件连接:
其它要求:
~/uptech_ai_vbox/n_voice_assistant/moonshot_api_key.txt
中填写你的Moonshot API Key, 如果没有可以免费申请一个选用模型:
该Demo共由三个子项组成, 分别为:
我们将按顺序介绍这三个功能的使用方法。
在终端执行下列代码:
cd ~/uptech_ai_vbox/n_voice_assistant
./run_speech_to_text.sh
根据提示说话输入语音, 终端内会打印出转换后的文字。
在终端执行下列代码:
cd ~/uptech_ai_vbox/n_voice_assistant
./run_tts_keyboard.sh
根据提示在终端中输入中文, 按Enter
后麦克风会播放文字对应的中文语音。
运行方法:
该程序需要在~/uptech_ai_vbox/n_voice_assistant
路径下打开三个终端,分别为:
cd ~/uptech_ai_vbox/n_voice_assistant
./run_trans.sh
cd ~/uptech_ai_vbox/n_voice_assistant
./run_llm.sh
cd ~/uptech_ai_vbox/n_voice_assistant
./run_tts.sh
程序界面如下:
详细操作方法请参考视频。
👇点击查看视频
使用语音控制机械臂基础运动.
项目连接位于~/uptech_ai_vbox/o_voice_control_robot_move
硬件连接:
其它要求:
Apriltag二维码
的物料小块选用模型:
运行方法:
该程序需要在~/uptech_ai_vbox/o_voice_control_robot_move
路径下打开两个终端,分别为:
cd ~/uptech_ai_vbox/o_voice_control_robot_move
./run.sh
cd ~/uptech_ai_vbox/o_voice_control_robot_move
./run_client.sh
可用的语音控制指令:
1. 直接控制运动的: 左移, 向左, 向左移动3厘米, 向左移动4.8厘米
(同理: 右, 上, 下, 前, 后)
2. 返回起始位置, 返回初始位置, 回到初始位置等.只要有`回`字,就表达`返回起始位置`的意思。
注意:
1. 根据语音的特性,并不每次都会成功。 不成功请多试几次。
2. 识别出的结果可能会有同音字,或不完全, 这也是正常现象. 只要识别出下列关键字,即可准确生成指令:
3. 语音最好是有量词号的:
`向左移动`, 没有数字量词时,默认1cm
`向前移动2.4厘米`, 机器人按照在字面意思运动
4. 尽量移动整数, 比如`1厘米`, `4厘米`等。
5. "返回指令" 出于未知原因,成功率不高。
6. 说语音的时候尽可能紧凑,一气呵成
程序界面如下:
详细操作方法请参考视频。
👇点击查看视频
语音控制机械臂进行物料分拣提供了两个Demo, 需要通过结合之前的 二维码识别, 颜色识别, 语音识别等技术共同实现。两个Demo的内容分别为:
使用语音控制机械臂,执行抓取放置和移动等二维码物料分拣工作.
项目连接位于~/uptech_ai_vbox/p_voice_control_robot_pick_and_release
硬件连接:
其它要求:
Apriltag二维码
的物料小块选用模型:
运行方法:
该程序需要在~/uptech_ai_vbox/p_voice_control_robot_pick_and_release
路径下打开两个终端,分别为:
cd ~/uptech_ai_vbox/p_voice_control_robot_pick_and_release
./run.sh
cd ~/uptech_ai_vbox/p_voice_control_robot_pick_and_release
./run_client.sh
可用的语音控制指令:
表达运动的: 移动到2号目标上方
表达抓取的: 抓取, 抓取3号
表达放下的: 放置到4号, 放下
注意:
1. 根据语音的特性,并不每次都会成功。 不成功请多试几次。
2. 识别出的结果可能会有同音字,或不完全, 这也是正常现象. 只要识别出下列关键字,即可准确生成指令:
运动: ['移动', '去', '前往'],
抓取: ['抓取', '拿起', '抓', '拿'],
放置: ['放下', '放到', '放', '放置']
3. 语音最好是有目标编号的:
移动到2号目标上方 (Good)
移动到3号上方--->(等待执行完成)--->抓取 (Bad)
|--------->抓取3号物体 (Good)
4. 说语音的时候尽可能紧凑,一气呵成
程序界面如下:
详细操作方法请参考视频。
👇点击查看视频
使用语音控制机械臂,执行抓取放置和移动等带有颜色的物料分拣工作.
项目连接位于~/uptech_ai_vbox/q_voice_control_robot_pick_color_and_release
硬件连接:
其它要求:
2_color_calibration
进行颜色校准选用模型:
运行方法:
该程序需要在~/uptech_ai_vbox/q_voice_control_robot_pick_color_and_release
路径下打开两个终端,分别为:
cd ~/uptech_ai_vbox/q_voice_control_robot_pick_color_and_release
./run.sh
cd ~/uptech_ai_vbox/q_voice_control_robot_pick_color_and_release
./run_client.sh
可用的语音控制指令:
表达运动的: 移动到红色目标上方
表达抓取的: 抓取, 抓取红色方块
表达放下的: 放置到1号位置, 放下
注意:
1. 根据语音的特性,并不每次都会成功。 不成功请多试几次。
2. 识别出的结果可能会有同音字,或不完全, 这也是正常现象. 只要识别出下列关键字,即可准确生成指令:
运动: ['移动', '去', '前往'],
抓取: ['抓取', '拿起', '抓', '拿'],
放置: ['放下', '放到', '放', '放置']
3. 语音最好是有目标编号的:
移动到红色目标上方 (Good)
移动到红色上方--->(等待执行完成)--->抓取 (Bad)
|---------->抓取红色方块 (Good)
4. 说语音的时候尽可能紧凑,一气呵成
程序界面如下:
详细操作方法请参考视频。
👇点击查看视频
机械臂抓取或放置的时候下降高度过高或者过低
这类问题有两个现象:
原因: 下降高度不足是因为系统认为在当时的下降高度下,末端执行器的长度足够达到物体表面执行任务,但从实际上说,末端执行器的真实物理长度不够。
下降过度的原因相反,末端执行器的实际物理长度大于软件中设置的末端执行器长度。
解决方法:调整算法中机械臂的末端执行器的长度参数,可以通过修改代码中的ARM_Z_OFFSET
数值来实现。
ARM_Z_OFFSET
是机械臂末端执行器的z轴偏移量,单位为厘米。调整方法为先测量ARM_Z_OFFSET
的实际值,用实际值进行抓取测试,如果下降高度不足,则将ARM_Z_OFFSET
调小;如果下降高度过多,则将ARM_Z_OFFSET
调大。
下图表明了ARM_Z_OFFSET
的具体定义,单位为毫米(注意软件中为厘米):
与机械臂抓取相关的实验:
b_fruit_place: fruit_sort_and_place.py 中的 ARM_Z_OFFSET
参数, 第18行左右。
e_socket_robot_control: run.py 中的 ARM_Z_OFFSET
参数, 第24行左右。
h_color_sort: color_sort.py 中的 ARM_Z_OFFSET
参数, 第20行左右。
i_apriltag_sort: apriltag_sort.py 中的 ARM_Z_OFFSET
参数, 第19行左右。
p_voice_control_robot_pick_and_release: run.py 中的 ARM_Z_OFFSET
参数, 第24行左右。
机械臂抓取物体移动过程中碰到其它被抓物体
该现象的原因是机械抓取后,抬升的高度不足,需要在代码中调整PICK_AND_RELEASE_OFFSET
参数。
与机械臂抓取相关的实验:
b_fruit_place: fruit_sort_and_place.py 中的 PICK_AND_RELEASE_OFFSET
参数, 第17行左右。
e_socket_robot_control: run.py 中的 PICK_AND_RELEASE_OFFSET
参数, 第23行左右。
h_color_sort: color_sort.py 中的 PICK_AND_RELEASE_OFFSET
参数, 第19行左右。
i_apriltag_sort: apriltag_sort.py 中的 PICK_AND_RELEASE_OFFSET
参数, 第18行左右。
p_voice_control_robot_pick_and_release: run.py 中的 PICK_AND_RELEASE_OFFSET
参数, 第23行左右。