基于Kinect的重障者辅助洗浴器具手势控制系统设计

2014-12-31 11:31龙海飞刘咏梅李相旭毕德学
关键词:手势手部器具

龙海飞, 刘咏梅, 李相旭, 毕德学

(1.厦门理工学院 机械与汽车工程学院,福建 厦门 361024;2.北京出入境检验检疫局,北京 100026;3.天津科技大学 机械工程学院,天津 300222)

0 引 言

世界卫生组织在2008年的一份报告里指出,全球大概有6.5亿的残障人士(包括残疾人士、老年人士、病伤人士),约占全球总人口数的10%[1]。而在这6.5亿的残障人士中,大概有15%需要辅助器具,据此进行粗略的估算,全世界大约有将近1亿的残障人士需要辅助器具。因此开发辅助器具的相关技术和产品,利用科技的力量来提升残障人士的生活质量,是很多国家研究的目标,目前一些发达国家技术水平都处于领先地位,我国也在这方面加大了资金投入、加快了研究步伐[2-4]。微软 Kinect的推出,可以实现很多的人机交互方式,且成本和开发难度较低,本文采用基于Kinect的手势识别控制系统实现对重障者辅助洗浴器具的控制,重障者辅助洗浴器具的三维模型如图1所示。

图1 重障者辅助洗浴器具三维模型

重障者辅助洗浴器具由移动装置、升降装置和洗浴椅3部分构成。洗浴椅通过S架以及S架与升降装置中的外管固定零件组成一个整体,洗浴椅升降通过升降装置带动,其中升降装置的升降主要通过推杆电机带动外管升降实现。洗浴椅由背板、坐板以及腿板构成,背板与坐板以及坐板与腿板分别通过转轴连接,转轴靠近外管部分各有1个带轮,带轮通过与S架相连的无刷直流电机带动来实现转轴的转动,从而可以实现患者的抬背和曲腿。由于行动不便,重障者需要躺在放入浴缸中的洗浴椅上,并在护理人员帮助下进行洗浴。护理人员通过一系列简单的手势,经Kinect采集传入到PC中并对其进行计算和处理,然后通过PC和单片机的通信设备将控制指令传入到单片机中,最后实现对电机的控制。

本文采用多层次的系统框架设计,底层是Kinect设备接收手部图像,驱动采用开源Open-NI框架,通过研究OpenNI的模块原理实现识别手势的算法。由于本系统对手势的定义简单,故系统对信息的计算量不大,可以很好地达到实时性的要求,很容易实现对洗浴椅的控制。

1 重障者辅助洗浴器具控制系统

基于手势识别的控制系统流程图如图2所示,本控制系统由手势识别和洗浴椅的控制2个部分组成。其中手势识别部分是通过Kinect采集手势信号,调用开源OpenNI开发包中相关函数实现手势识别的算法,将能够识别的特征手势转换为相应的控制指令;洗浴椅的控制部分是通过PC与单片机的通信设备将控制指令传送给以单片机为核心的控制系统,以实现对电机的控制,从而达到控制洗浴器具的目的。

图2 系统流程图

重障者辅助洗澡器具的控制主要包括床体的升降、背部姿态的调整和腿部姿态的调整3个部分,并且每部分的控制是由各自的电机实现的。选用AVR单片机作为主控芯片来实现对电机的控制。下位AVR单片机接收PC相应的指令是通过RS-232C异步串口通信总线实现的,对电机相应的控制指令进行如下约定。

(1)电机的选择。分别将控制床体的升降、腿部姿态和背部姿态的电机定义为1号、2号和3号电机,当相应的电机被选中时,PC机向下位机分别发送“1”“2”“3”指令。

(2)电机的正反转选择。当检测到电机正转信号时,PC机向下位机发送“P”指令;当检测到电机反转信号时,PC机向下位机发送“N”指令。

(3)电机速度的控制。当检测到电机加速信号时,PC机向下位机发送“U”指令;当检测到电机减速信号时,PC机向下位机发送“D”指令。

(4)电机的停止。当检测到电机停止信号时,PC机向下位机发送“S”指令。

2 图像信息的获取与处理

2.1 Kinect简介

Kinect是美国微软公司于2010年11月正式推出的一种3D体感摄影机,起初是为XBOX 360游戏机开发的一款体感设备,Kinect外观图如图3所示。

Kinect与传统的二维摄像头相比具有很大的优势,它不仅具有传统摄像头能获取物体颜色信息的功能,还可以同时获取物体的深度信息,从而能够帮助数字设备更好地感知外界。Kinect光学部分有红外线发射装置、RGB VGA彩色摄像头组和3D深度感应器3个摄像头。红外线发射装置发出一道“激光”覆盖了整个Kinect的可视范围,摄像头组接收反射光线用来识别用户。红外摄像头识别的图像是一个“深度场”(Depth Field),其中每一像素的颜色代表该点物体到摄像头的距离,比如离摄像头近的身体部位呈现亮红色、绿色等,而离摄像头远的身体部位则呈暗灰色。通过景深摄像头和RGB摄像头的配合,Kinect可将实物的3D影像投放到屏幕之中,同时拍摄彩色图像和红外图像,从而捕捉到用户的手势动作。

图3 Kinect外观图

2.2 手势提取的分析

为了满足系统设计要求,手部与Kinect摄像头的距离为1.5~2.0m,背景的颜色单一。此外,Kinect的垂直可视角度为43°,故手部的手心平面与Kinect的夹角[5]应小于43°。Kinect所获取的深度数据是以640×480的图像存在的。在手势识别过程中,需要根据手部与Kinect的实际距离进行判断,故要将像素的数据转换为实际距离的数据。设Kinect拍摄的深度图x-y平面尺寸为w×h,则实际距离的坐标位置如图4所示,其中,零点坐标为彩色摄像头光心的位置。

图4 Kinect坐标示意图

Kinect返回的深度值只是一个相对的数据。假定Kinect任意返回的一点深度值为r,则在Kinect的自我调整过程中,可得到实际距离的深度值[6]为:

其中,a=0.123 6m;q=0.037m。

由(1)式可解得像素位置为(m,n,p)点的实际位置(x,y,z),其计算公式[7]为:

其中,b=0.002 1。

3 基于OpenNI软件设计与实现

OpenNI为开发者提供了一组使用体感(Natural Interaction)程序的API接口,它是一个多语言、跨平台的框架,可以实现与外接硬件的沟通。

3.1 手势识别的实现

NITE控制是OpenNI的中间层部分,包括一些可以识别用户和跟踪用户动作的计算机视觉算法。NITE控制的设计理念是基于手势控制和全身控制的2个模块,本系统主要应用了手势控制模块。手势的识别是由NITE Controls中手势检测器实现的,NITE控制为开发者提供了一些专业的手势检测器,这些检测器在NITE内部是以类的形式存在的,它可以利用自身内部的一些算法,实现对手势的识别和理解。本文用到的手势检测器,见表1所列。

表1 手势检测器简介

3.2 控制信号流的运行机制

Kinect检测到预定义的手势时,该手势会触发相应的控制信号流,实现人机的交互。控制信号流的运行机制如下。

(1)当 Kinect检测到“Wave”或者“Raise-Hand”手势时对话开始,此时对话管理器(Session Manager)将路由节点FlowRouter置为活动状态(SetActive)。

(2)此时FlowRouter将数据流路由至水平滑块MainSlide 1,该滑块主要有悬挂和选择2个状态。当手势在水平方向来回移动时,MainSlide 1处于悬挂状态;当检测到向前推的手势时,可以发出MainSlide 1的选择状态,即选择1号、2号或3号电机。

(3)当电机选择后,FlowRouter将数据流路由至SteadyDetector 1,即手势稳定状态检测器。该状态为过渡状态,主要是确保其他手势状态的有效检测。

(4)当SteadyDetector 1检测到手势的稳定状态时,FlowRouter将数据流路由至水平滑块MainSlide 2,实现电机正反转的选择。

(5)当电机的正反转选择后,FlowRouter将数据流路由至Box,Box通过BroadCaster对PushDetector、FlowRouter 2和CircleDetector进行广播。此时如果要停止电机时,则触发Push-Detector或者CircleDetector。如果要控制电机的速度时,先触发SteadyDetector 2,然后选择SwipeUp或者SwipeDown。

3.3 MFC框架下手势识别系统的设计与实现

该部分在Visual C++2010环境下,利用MFC框架实现了手势信号的识别和与下位单片机的实时通信[8]。本系统实现了手动和手势的控制,手势控制通过Kinect的手势识别实现。

(1)控制电机的选择。左右进行一定角度的摆手,系统即会识别,开始进行电机的选择,这时系统可以识别沿水平方向手部滑动的动作,水平方向划分为3个区域,分别对应3个电机,即高度调节电机、椅前角度调节电机和椅背角度调节电机。手部滑到不同的区域,即出现了不同电机区域界面,如图5所示。

图5 手部滑移到不同电机区域的界面

手部滑移到要控制的电机区域,然后手部沿着竖直方向向下,即选中了1个需要控制的电机。选中高度调节的电机,就会传输给单片机信号“1”;选中椅前角度调节,就会传输给单片机信号“2”;选中椅背角度调节的电机,就会传输给单片机信号“3”。

(2)电机正反转的选择。水平方向分为2个区域,分别对应正转和反转2个电机的方向控制。在水平方向进行手部的左右滑移,系统即会识别,可以开始进行方向的选择,如图6所示。

图6 手部滑移到方向选择区域的界面

手部滑移到方向控制的区域,然后手部沿着竖直方向向下,即选中了相应的方向控制。选中正转,就会传输给单片机信号“P”;选中反转,就会传输给单片机信号“N”。

(3)电机速度的调节与停止。水平方向分为2个区域,分别对应加速和减速2种速度控制。手部进行水平方向的左右滑动,即可选中1种速度控制,手部沿着竖直方向向上系统识别,这时会传输给单片机信号“U”,单片机就会控制电机速度增加1级;手部沿着竖直方向向下系统识别,会传输给单片机信号“D”,单片机就会控制电机速度减1级,如图7所示。

图7 手部滑移到速度区域的界面

当手部焦点消失或手部进行向前推动时,系统识别,这时会传输给单片机信号“S”,单片机就会控制电机停止运转。

4 实验结果分析

本实验主要测试了距离对识别效果的影响、各种手势识别的灵敏度、系统对手势的操作是否反应及时等。当Kinect摄像头检测到手部动作时,系统会判断是否与事先定义好的手势相匹配,如正确,则通过串口通信向以单片机为核心的控制系统发出控制指令,使洗浴器具做出相应的动作;如错误,则系统重新对手势进行检测,直到正确为止。本系统定义了6种手势动作,它们所代表的指令见表2所列。

表2 动态手势的定义

系统对所定义的手势识别实验结果见表3所列,从表3可以得出,对系统所定义的6种手势平均识别率可达96%,平均响应时间要小于49ms,因此本系统具备良好的实时性,故可实现对洗浴器具实时控制的要求。

表3 定义的手势识别实验结果

洗浴姿势主要有仰姿和坐姿2种,人体最舒适洗浴姿势一般为背部平躺30°,腿部弯曲10°,洗浴床实验运动示意图,如图8所示。

图8 洗浴床实验运动示意图

图8中,背板活动范围为40°,腿板活动范围为50°,从而可以使洗浴者在该范围内随意调整姿势。在本实验中,实验者经过对本系统所定义的手势简单了解后,就可以方便地对洗浴床进行控制。

5 结束语

本控制系统采用了一种全新的、成本较低的微软体感控制器Kinect,通过手势识别这种友好的人机交互方式来实现对洗澡椅的控制,从而方便了重障者的生活。本系统具有成本比较低廉、用户使用方便、控制功能良好等特点。

随着体感设备的进一步发展和改进,其应用将越来越广泛,识别的部位和方式也会有多种,如对全身、多人的识别等。此外,在手势识别的实验中,会有一些相似信号的干扰,进一步提高识别率和增强系统对干扰的鲁棒性,将是下一步要完成的工作。

[1] Center for Health Workforce Studies,University at Albany.The impact of the aging population on the health workforce in the United States:summary of key findings[R].U-niversity at Albany,2006.

[2] 陈振声.中国残疾人辅助器服务体系的构建[J].中国康复理论与实验,2011,17(6):83-85.

[3] 王健强,程 汀.SCARA机器人结构设计及轨迹规划算法[J].合 肥 工业 大 学 学 报:自 然 科 学 版,2008,31(7):1026-1028,1041.

[4] 罗元,谢彧,张 毅.基于Kinect传感器的智能轮椅手势控制系统的设计与实现[J].机器人,2012(1):110-113.

[5] 张 毅,张 烁,罗 元,等.基于Kinect深度图像信息的手势轨迹识别及应用 [J].计算机应用研究,2012(9):3547-3550.

[6] Raheja J L,Chaudhary A,Singal K.Tracking of fingertips and centres of palm using KINECT[C]//2011Third International Conference on Computational Intelligence,Modelling and Simulation(CIMSiM),Langkawi,Malaysia,2011:248-252.

[7] OpenKinect Organization.Imaging information for Kinect[EB/OL].[2011-06-07].http://openkinect.org/wiki/Imaging-Informationg.

[8] 王 坤,高 簧.基于VC++实现串口通信的方法[D].西安:西安科技大学,2010.

猜你喜欢
手势手部器具
手部皮肤软组织缺损修复的皮瓣选择
室庐几榻器具间 浅谈明清绘画中的器座
试析山东地区所出金银饮食器具
挑战!神秘手势
融资租赁在汽车零部件包装器具领域的应用探索
V字手势的由来
胜利的手势
谁是创意大玩家——创意手部彩绘
古代器具灌农田
发生于手部的硬下疳一例