第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所示。