第5章 实践项目:机械手掌 智能视觉机械手掌全机身有6个自由度,手指关节有5个自由度,采用微型伺服电动 机,可水平转动180°。机身搭载高清晰度摄像头,基于TensorFlow 和OpenCV 可以轻松 实现项视觉识别功能。其结构如图5. 1所示。 图5.机械手掌 1 第5章 实践项目:机械手掌 175 ................ .............. 5.连接与控制 1 机械手掌本质上是一个基于智能视觉的机器人,其控制中枢是手掌上搭载的树莓派模 块,在机械手掌正常运行前需要对其进行一些功能上的设定。本节主要讲述如何通过计算机 连接机械手掌的树莓派控制板,树莓派程序架构以及如何进行机械手掌相应的实践功能。 5.1.1 远程连接机械手掌 在开始实践项目之前,首先连接智能视觉机械手掌,具体步骤如下。 (1)将DC 电源对接线的红色和黑色分别连接至树莓派扩展板的正(+)、负极(-), 将 电源适配器的外接口与DC 电源对接线的内接口连接。 (2)将树莓派扩展板的开关由OFF 推动到ON,此时树莓派的LED1 、LED2 常亮,稍 等片刻后LED1 由常亮变为每2s闪烁一次,同时手掌会做出抓取姿态,设备开机成功。 (3)机械手掌开机后,会产生一个以HW 开头的热点,打开计算机WiFi 可以搜索到该 热点 ( 。 4)在VNCViee168.1, 输入默认账 wr中输入树莓派默认IP 地址192.149.按回车键, 号和密码,单击OK 按钮,可以看到远程打开的树莓派桌面。 5.1.2 程序架构 程序结构如图5.包含主程序界面设计和各个实践项目的子程序设计。主程序 2所示, 文件名为TrnfrPly.各实践项目子程序在文件CvHand. ase_apy, py 中。 图5.程序架构 2 在Transfer_Play.项目跳转的程序代码如图5. py 中,3所示。 用户输入的跳转序列号保存在全局变量mode中,根据mode中的数值启动对应的项 目子程序。例如,在LX 终端执行命令pythnrnfr_apy1,跳转到CvHanpy 的 o3TasePly.-d. 第108 行(defcv_color_identify), 4所示(3第77 代码中的cv_color_ 如图5.对应图5. identify), 启动颜色分类项目。 树莓派智能项目设计:RaspberyPi4ModelB上的Python实现 176 .................................................. .............. 图5.项目跳转的程序代码 3 图5.颜色空间转换代码 4 5.颜色分类 2 给机械手掌加上摄像头视觉模块,通过视觉识别可以让它识别不同的颜色。 本实践项目使用Lab颜色空间进行颜色识别。首先将RGB颜色空间转换为Lab空 间,然后进行二值化处理,再经过膨胀、腐蚀等操作,可获得只包含目标颜色的轮廓,最后将 该颜色轮廓用圆圈框起。 1.颜色空间转换 调用OpCV颜色转换函数cvctoor(mg,rnfrm_l)将RGB颜色空间 en2.vClITasomode 转换为Lab空间,其中参数Img为图片对象,参数Transform_model指定色彩转换模式。 代码如图5. 4所示。 2.轮廓检测 调用OpeCV的fnotus(mg,Modl,Mehd)函数获取不同颜色小球的轮廓, nidCnorIeto 代码如图5.5所示。其中,mg表示要检测轮廓的图片对象,该图片需要灰度图片;Mod Iel 表示轮廓的检测模式,v2.EXTERNAL表示只检测外轮廓;Metod表示轮廓的逼 近方法(检测策略),2. RETR_ APPROX_NONE存储所有的轮廓点, h 相邻的两个点的像 cvCHAIN_ 素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1。 第5章 实践项目:机械手掌 177 ................ .............. 图5.轮廓检测代码 5 3. 圈出识别的颜色小球 在获取小球轮廓的基础上,使用ccrle() 函数圈出指定颜色的小球,代码如图5. v2.ic6 所示。 图5.圈出指定颜色的小球代码 6 4. 实践流程 (1)在LX 终端执行命令cduHand_Pi,定位到程序目录。 (2)执行命令python3Transfer_Play.-1,将小球正对着摄像头,待识别到小球颜色 py 且未闭合前,将小球放置在手掌心的位置,手掌会短暂抓取小球并转动(红色时云台向左 树莓派智能项目设计:RaspberyPi4ModelB上的Python实现 178 .................................................. .............. 转,蓝色时向右转)。 会将红色小球框起来,7所示。 (3)当摄像头识别后, 如图5. 图5.红色识别 7 5.颜色跟踪 3 通过增加随着识别的颜色小球运动而运动的程序代码,达到颜色跟踪的目的。其原理 是应用PID控制,驱动手掌云台转动,8所示。 代码如图5. 图5.颜色跟踪代码 8 执行命令pythnrnfr_apy2,通过摄像头模块识别指定颜色的物体,并实现 o3TasePly. 手掌云台跟随目标颜色物体的功能。 注意,实践过程中手握小球移动时动作不可过快,并且要保证小球一直出现在摄像头 的画面内。这样,手掌会跟随小球移动的方向进行对应的转动。 5.人脸检测 4 首先调用人脸分类器正脸样本图像,然后将图像转换为灰度图像,最后使用分类器检 测人脸,如果有返回则将人脸框出来。 第5章 实践项目:机械手掌 17 ................ .............. 人脸检测的关键是提取人脸的特征。对于一幅图像,提取出图像的细节对产生稳定分 类结果和追踪结果很有用,这些提取的结果被称为特征。对于给定的图像,特征可能会因 为区域的大小而有所不同,区域大小也被称为窗口大小。即使窗口大小不一样,仅在尺度 上不同的两幅图像也应该有相似的特征。因此,生成能适应于不同大小窗口的特征是图像 处理中非常关键的一点。这些大小不同的窗口中的同一种特征的集合被称为级联。 OpenCV提供了尺度不变的Har级联的分类器和跟踪器,在进行程序编写之前,将 OpeCV源代码的haracds文件夹中有关人脸检测的haracd_flbdy.l文件 ncsaecsaeuoxm 复制到保存人脸检测代码所在的文件夹VOCData中。 人脸检测的代码如图5. 9所示。 图5.人脸检测代码 9 执行命令python3Transfer_Play.-3,通过手掌的摄像头模块检测人脸。没检测到 py 人脸时,手掌在0°~180°范围左右转动;检测到人脸时,手掌停止转动,并招手打招呼,直到 人脸离开检测范围,手掌恢复在0°~180°左右转动。 5.石头剪刀布 5 本节的原理是机器学习。首先进行图像采集,对图像中手势部分进行标注;然后训练 标注的信息,获得模型;最后调用模型检测对应的手势,做出相应的动作。手势标注代码如 图5. 10所示。 图5.手势标注代码 10 执行命令python3Transfer_Play.-4。通过摄像头模块检测人手的石头剪刀布手 py 树莓派智能项目设计:RaspberyPi4ModelB上的Python实现 180 .................................................. .............. 势,待手掌自主判断后,它会做出对应的手势与人进行猜拳游戏。比如人伸出“剪刀”手势, 它识别后会出“拳头”。 5.手势识别 6 按2.7节中创建人脸识别的方法,在百度智能云的平台的“产品”“人工智能”“人体 分析”中创建手势识别应用。创建完毕后,记录申请到的AppID 、APIKey和SecretKey。 3.|| 1.程序设计 所示 ( 。 1)将获取的APP_ID 、API_KEY和SECRET_KEY填入程序代码中,如图5. 11 图5.填写手势识别关键信息 11 (2)通过手势控制的在线识别功能获取识别结果, 12所示。 程序代码如图5. 图5.获取识别结果代码 12 所示 ( 。 3)根据手势识别的结果,驱动机械手掌做出相应的反馈动作,程序代码如图5. 2.实践流程 (1)在LX终端下进入uHand_Pi文件夹,执行命令sudovimcv_Hand.将AppID 、 py, 第5章 实践项目:机械手掌 181 ................ .............. 图5.反馈动作代码 13 APIKey、SecretKey添加到如图5.保存并退出。 14 所示的位置, 图5.修改参数 14 (2)执行命令sudoreboot,重启树莓派。 (3)执行命令python3Transfer_play.-5。利用机器人摄像头模块检测人手的手 py 势,自动判断后,模拟人手做出相应的手势动作。 第6章 实践项目:视觉人形机器人 视觉人形机器人搭载2自由度云台和高清晰度摄像头,支持AI 图像识别,可以实现颜 色识别、自动踢球、视觉巡线等多种功能。 6.项目启动 1 在LX 终端定位到human_code目录,执行命令ls-l,显示该目录下的所有文件,如 图6. 1所示。 图6.项目对应的文件 1 每个cv开头的文件都对应一个实践项目,1所示。 如表6. 表6.项目对应指令 1 序号项目名对应指令 1 自主巡线python3cv_line_patrol.py 2 点球射门python3cv_find_stream.py 第6章 实践项目:视觉人形机器人 183 ...................... .............. 续表 序号项目名对应指令 3 云台跟踪python3cv_track_stream.py 4 物品识别python3cv_color_stream.py 5 手势交互python3cv_find_hand.py 执行命令pythnv_iearlpy,就可以运行实践项目“自主巡线”,以此类推。 o3cln_pto. 6.自主巡线 2 很多机器人比赛里都要求机器人能够沿着黑线行进,接下来通过编写程序实现机器人 识别黑色。 1. 黑线识别 黑线识别的原理是先将图像缩小,然后转为灰度图,接着进行二值化、腐蚀、膨胀等操 作去除噪点。识别到的颜色在画面中会呈现白色,没识别的颜色则为黑色。最后将图像分 割成三段进行处理,每一段都用矩形将黑线框起来,并且标出中心点,用这3个点来近似的 表示这条线。 机器人通过摄像头识别出黑线的过程如图6. 2所示。 图6.黑线识别过程 2 2. 自主巡线 将图像处理部分与机器人动作相结合,就可以让机器人在识别黑线的基础上实现自主 巡线,程序代码如图6. 3所示。 执行命令python3cv_line_patrol.启动自主巡线程序,机器人将沿着黑色线路进行 巡线前行,如图6. py, 4所示。