设计概述
1.1 设计背景
随着信息技术的发展,人机交互技术逐渐由以键盘、鼠标等基于图形用户界面的方式,转变为以模拟和类似人类感知传输的信息类型。其中,手势识别因其具有的自然、直接、有效的交互特点,越来越受到研究人员的关注。传统的手势识别,需要借助配置有传感器的手套来确定具体的手势形态,成本高且操作不便,不具有推广性。基于机器视觉的手势识别技术,突破硬件局限,从模式识别算法层面革新人机交互方式,更适应未来人机交互发展趋势。机械臂作为现代工业领域自动化智能加工中最常见的执行终端,通过各个关节的协调运动与机械末端的配合,可进行多自由度模拟仿真。通过对舵机进行控 制设计,使机械臂能够完成抓取分拣、连续动作,从而使其具有比人手更好的动 作组合灵活性和指令完成准确性。
1.2作品概述
本作品基于机器视觉,聚焦手势识别,利用摄像头获取单目图像信息,基于 PYNQ 实现手势分割、手势建模、手势形状特征提取,对八种不同手势图像进行识别,以舵机控制的机械臂模块作为响应终端,借助手势变化来控制机械臂执行两种功能:一是按指令分拣物体,二是“井字游戏”人机大战。
1.3 应用领域
本作品将手势识别作为人机交互方式,以机械臂作为响应终端,设计了两种基于上述交互方式和响应终端的展示功能。按指令分拣物体,本质上是对机械臂进行开环控制,延长人手作用范围,对于操控大型机械进行物体分拣的工业自动化领域或物流行业,都有极好的应用前景。“井字游戏”人机大战,仅仅是将手势识别结合机械臂控制、简单的人工智能技术进行组合开发的例子,“手势识别 +”的探索永无止境,在娱乐领域、医疗领域、教育领域、智能家居领域都有着广泛的应用前景。 02
系统组成及功能说明
System Construction & FuncTIon DescripTIon
2.1系统组成
本系统以 Xilinx ZYNQ SoC 作为主控制芯片,分为处理器模块、摄像头模块、显示器模块、舵机驱动模块、通讯传输模块。通过摄像头模块捕捉手势图像信息,在处理器模块中完成手势分割、手势建模、手势形状特征提取、手势识别,手势识别的过程及结果通过显示器展示,通过处理器内部不同功能的逻辑运算,将对应的动作指令通过相应的 PWM 信号输出给各个舵机,驱动六自由度机械臂完成要求动作,从而实现对应的组合功能。
2.2手势识别核心算法
本作品所采用的是静态手势识别算法,算法核心主要由手势特征分析、手势特征建模及手势识别三部分组成,整体框架如上图所示。首先通过图像采集设备来获取手势图像,通过手势建模将获取的手势图像用数学模型描述出来,最后根据得到的手势识别所需要的模型参量判别出具体的手势形态。
2.2.1图像预处理
图像预处理,由四个主要步骤组成,分别为定义识别区域、颜色空间转换、 膨胀处理、高斯滤波。定义识别区域,主要用来减小识别区域面积,从而提高识 别效率。颜色空间转换,通过将摄像头捕捉到的 RGB 颜色空间下的图像信息转 化为 HSV 颜色空间下的图像信息,便利后续对背景和手部进行颜色分割。膨胀 操作,使得识别区域高亮区域增长,消除手部内的噪声点。高斯滤波,通过加权 求和的方式,消除图像内的高斯噪声点。
2.2.2 手势分析
利用道格拉斯-普克(Douglas-Pucker)算法,将手部轮廓拟合为多边形曲线, 同时计算面积,以得到轮廓内手部面积最大的手部轮廓。在此基础上,分别计算 出轮廓总面积(areacnt)、轮廓中手的面积(areahull)、以及手的面积占轮廓总面 积的百分比(arearaTIo)。与此同时,得到最大轮廓面积中的凸缺陷(即凹陷)数 (defects),并通过计算凸缺陷中起始点、终点、离起始点终点连线最远处的点构 成的三角形的高(d)和顶角(angle)值,来去除因噪声而得到的凸缺陷点,得 到消除噪声点后的凸缺陷数(l)。
2.2.3手势识别
由手势分析后得到的模型参量通过上述手势识别流程图后,输出“0”“1” “2”“3”“4”“5”“ok”“best of luck”八种手势识别结果,以便后续对结果进行使用。
2.3“井字游戏”人机大战算法设计
2.3.1游戏规则及数字化设置
游戏规则游戏对战的双方执不同棋子,轮流在 3×3 的九宫格中落子,但凡在横排、 竖排、对角线上出现三子相同的情况,则执该子的一方胜。
数字化设置现在对九宫格的九个位置编码为九个二维坐标(x,y)(x=1,2,3;y=1, 2,3),并赋值为 1,效果如下图所示。
一方执“0”,一方执“2”,落在哪个坐标位置上,就把那个坐标位置对应的 值改为“0”或“2”。每次落子后,分别对每排、每列、每对角线上的三个值求和(和可取 0,1,2,3,4,5,6),如果出现“0”则执“0”的一方胜,如果出 现“6”则执“2”的一方胜。
2.3.2机器端落子优先级设计
假设人执“0”子,机器执“1”子(1)中间、边上、角上三种位置的获胜方式分别为
所以优先落中间,其次落角上,最后落边上。
(2)情况优先级
第一优先级:如果出现“1”,立即将(0,0,1)中的“1”置 2,****人胜利。第二优先级:如果出现“5”,立即将(1,2,2)中的“1”置 2,机器取得游戏胜利。第三优先级:如果出现“4”,且不是“死路”的情况,则将(1,1,2)中任 意一个“1”置 2。
2.3.3算法流程图
2.4模块介绍
2.4.1 处理器模块
本作品采用基于 ZYNQ-7020 芯片的 PYNQ-Z2 开发板进行系统开发。ZYNQ 分为 PS(Processing System)和 PL(Programmable Logic)两部分,在 PS 上运 行 Linux 操作系统,在 Linux 操作系统上运行 Python,通过调用 PYNQ 中的库Overlay,对连接到 PS 端的接口进行解析,进而控制 FPGA 逻辑资源,加速系统 数据处理。
对于本作品中所设计的基于机器视觉的手势识别算法和“井字游戏”人机大 战算法,直接利用硬件语言进行编写在逻辑上十分复杂,故采用 Python 进行编程实现,利用 FPGA 对图像处理部分进行硬件加速,不仅提高了图像处理速度, 还更好地扩展了图像应用。
2.4.2摄像头(图像采集)模块
本作品的手势指令输入由摄像头采集完成。采用奥尼 C11 款的高清摄像头对手势进行画面捕捉,通过 USB 完成图像输入。相比于传统的传感器手套对手势姿态的采集,摄像头减轻了硬件端的负担,使得整个系统可推广性更好。
2.4.3机械臂(舵机)模块
本作品使用的机械臂,是 LeARM 公司开发的一款六自由度机械臂,能通过上 位机对其进行动作设计,通过 PWM 控制舵机运转,从而完成抓取和连续复杂动作两种不同的模式功能。舵机(机械臂)模块与处理器的模块采用 UART 串行通信,采用下述通信协议进行指令交互。
2.4.4显示器(图像输出)模块
采用显示屏作为图像输出端,展示手势识别图像处理过程及结果,不仅利于 过程中的算法调试与验证,并且具有更好地视觉效果。
2.5 功能说明
2.5.1 手势识别
本作品可以对常用的八种手势进行识别处理,分别为“0”“1”、“2”、“3”、 “4”、“5”、“Best of luck”、“ok”。启动系统后,在摄像头端摆出相应手势,及完 成手势输入,显示器会显示出对应的识别结果。显示器画面,有矩形框定位识别区域,在该矩形框中会有多边形框出手部轮廓,右上方会显示识别结果。当识别区域没有放入手进行识别时,显示器画面静止。
2.5.2 机械臂驱动
机械臂动作设计及存储机制
机械臂内部封装有存储“动作组”的部件,用来存储动作指令。用户如果要 进行动作设计,在机械臂通电的情况下,通过 USB 通信与电脑端上位机进行连接,在上位机中设置传输给六个舵机的 PWM 值,形成一个包含这个动作指令的 “动作组”,下载进存储部件以便后续调用。
机械臂驱动机制
通过 UART(串口通信)的方式来调用“动作组”,进而驱动机械臂完成相 应动作。这里需要注意的是,必须将处理器模块与机械臂模块进行“共地”操作, 否则二者无法完成通信,机械臂不能按指令动作。
2.5.3功能 1:按指令分拣物体
预设四个不同的区域,分别编号为“1”“2”“3”“4”,作为一组一维位置坐 标。设计机械臂在四个不同区域内抓取、放开动作,共八个动作组。手势输入“ok”, 告诉系统下一个输入的是初始坐标。待控制板上亮起指示灯后,通过人眼观测物 体初始位置坐标,通过手势输入该坐标(可输入“1”、“2”、“3”、“4”)。待控制板上亮起指示灯后,手势输入“5”,告诉系统下一个输入的是初始坐标。待控制板上亮起指示灯后,通过手势输入目标位置坐标(可输入“1”、“2”、“3”、“4”)。用户端操作结束,发送指令给机械臂完成分拣全过程。机械臂依次完成抓取、移动、放下,即完成一次按指令分拣。
2.5.4功能 2:“井字游戏”人机大战
游戏规则参看“2.3‘井字游戏’人机大战算法设计”。手势输入“ok”,告诉 系统接下来输入人落子的坐标区域(x,y)。待控制板上亮起指示灯后,手势输 入“5”,告诉系统接下来输入横向坐标(可输入“1”、“2”、“3”),待控制板上 亮起指示灯后,输入纵向坐标(可输入“1”、“2”、“3”)。用户端操作结束,可 以发送指令给机械臂完成人落子的操作,机械臂完成在棋盘上的人落子操作后, 继续完成机器落子操作。依次进行下去,直至出现有一方胜利。亮红灯表示“人 赢”,亮绿灯表示“机器赢”,亮白灯表示“平局”。
作品成效总结与分析
3.1 系统测试性能指标
3.1.1手势识别
本作品算法下的手势识别功能,在 FPGA 加速下能较好地平衡识别次数和识 别时间的冲突。根据测试结果,本作品取 60 作为整个作品的手势识别循环次数。
3.1.2机械臂驱动
机械臂能通过用户端“动作组”的设计,进行抓取、移动等连续复杂动作, 具有很好的灵活性。作为机电设计的响应终端,能很好地完成多种功能的指令要求。
3.1.3 按指令分拣物体
“按指令分拣物体”能很好地完成初始坐标输入、目标位置输入,同时能在 较短的时间内快速完成抓取与投递。
3.1.4“井字游戏”人机大战
“井字游戏”算法能很好地遍历所有可能结果,所以人和机器对战只会出现 “平局”、“机器赢”两种结果。并且,较为稳定、准确的机器识别以及人工智能 算法,能够使整个游戏流畅进行。“手势识别”结合“机械臂”具有很强的视觉观赏性,与此同时,游戏的模式使整个功能更具有趣味性。
3.2 成效得失对比分析
本作品整体而言,不仅将手势识别功能实现,还在此基础上结合机械臂运动特点进行了多功能开发,总体完成度较高,视觉效果较好,兼具灵活性、趣味性及可拓展性。开发本作品采用的手势识别算法,为了得到较高的识别精度,必须要以延长识别时间、增加单次识别次数作为牺牲,使得在应用开发时增加较多的时间负担,不能够凸显人机交互的便利性。从手势识别算法及对识别结果的处理技术层面出发,整个作品还有较大提升空间。
3.3 创新特色总结展望
本作品使用最新的基于机器视觉的手势识别技术作为人机交互方式,革新人 机交互的使用体验,具有极佳的技术前瞻性。使用机械臂作为执行终端,贴近目前工业设计的最新潮流。在设计功能时,基于数学建模,设计出更具有人机互动性质的小游戏,体现人工智能的灵活与智慧。机电一体化开发,充分发挥基于 Python 编程的代码灵活的特点,以实现复 杂算法,利用 FPGA 硬件加速的优势,提高视觉处理速度。在本作品的基础上,优化识别算法,加快识别速度,提高识别精度,“手势 识别+”将在未来发挥出自身更强的优势,在教育领域、娱乐领域、工业领域、 医疗领域、智能家居领域都具有越来越广阔的应用前景。