基于离线手部检测的智能小车遥控系统设计与实现

作者: 蒋苇

基于离线手部检测的智能小车遥控系统设计与实现0

摘要:借助基于多传感器或云服务的目标跟随方法成本较高,不利于普通场景下工业级目标跟随应用的发展。结合移动设备发展现状,文章设计了一种基于离线手部检测的智能小车遥控系统,利用移动端设备自带的摄像头、蓝牙模块与运算能力在离线状态下完成手部检测,并将结果转换为运动指令以实现灵活的远程控制。该系统成本低廉,适用于STEM教具等场景。

关键词:手部检测;图像识别;智能小车遥控系统;移动开发

中图分类号:TP311 文献标识码:A

文章编号:1009-3044(2024)31-0096-03

开放科学(资源服务)标识码(OSID):

0 引言

在工业应用中,物体自动跟随方案往往借助单一的超声波模块完成跟随动作,但只能完成直线跟随和障碍物跟随动作,运动姿势有限;而借助基于多种传感器或基于云服务的目标跟随方法(涉及目标记忆、目标位置感知、目标标定等工作要求)成本高昂,在智能小车STEM教具、日常行李箱跟随等场景难以形成工业级的应用。目前,大多数移动设备已具备足够的图像传感器和图像处理能力,本文设计了一款充分利用手机性能的智能小车遥控系统,可利用摄像头拍摄实时画面,使用设备自身计算能力完成离线手部检测并转换为相应的车辆运动指令,通过蓝牙模块发送至小车端,无须增加额外的硬件模块或云服务,有效降低物体跟随及遥控的成本和开发难度。

1 整体设计

该遥控系统原理框图如图1所示,为满足离线手部检测需求,手部检测模型将被部署在应用内,相机模块采集的实时画面被送入手部检测模型开展推理计算,若检测结果的置信度高于设定值,应用将会根据算法将其转换为具体遥控指令并通过手机蓝牙模块发送至小车蓝牙模块;小车蓝牙模块通过串口将数据传达给小车运动控制模块驱动电机运动,使小车按照应用发出的遥控指令运动。

1.1 遥控应用总体设计

遥控系统需完成视频拍摄、手部检测及蓝牙匹配、指令发送等工作,因此移动遥控应用由4大模块构成,如图2所示。

物体检测模块负责加载手部检测模型、读取设备摄像头模块采集的实时图像数据,利用设备自身的计算能力提供手部检测推理结果。收到推理结果后,前端模块会显示实时画面与识别结果框;遥控服务模块负责将推理结果转换为遥控指令并控制蓝牙信号发送。蓝牙服务模块负责与智能小车建立蓝牙连接、执行发送遥控指令。

软件工作流程如图3所示。App启动时须判断移动设备是否具备摄像头和蓝牙模块、用户是否愿意提供摄像头、蓝牙和定位等模块权限。在初始化阶段,程序将设置图像采集参数、加载手部检测模型并设置应用界面。在检测阶段,以画面帧为单位持续进行手部检测工作。当用户开启遥控,如已成功创建蓝牙连接,App会向小车发送遥控指令,如未匹配设备,则提醒用户进行匹配。

1.2 手部识别

在iOS或Android操作系统体系下,部署机器学习模型需要借助特定软件接口接收和输出模型进行运算,TensorFlow Mobile框架[1]精简了完整的TensorFlow 框架,去除分布式执行等对端设备无用的业务功能,仅保留核心计算功能,增加移动端操作系统应用支持,开发者可以部署符合自身业务需求的模型,通过接口调用模型反馈结果到应用层(软件)。

由于遥控App根据手部检测结果遥控小车运动,物体检测模型只须精确识别手部即可。图像分类迁移学习可以利用特定图像数据集对CNNs的输出层进行再训练,在保留其他层权重不变的情况下,训练所需时间较短,准确率与重新训练整个网络结果没有太大差异,且重新训练原有分类模型对数据集要求较低,为模型提供数千张的特定种类目标图像即可获得更优的输出结果[2]。本文采用物体检测模型ssd_mo⁃bilenet_v1_coco作为预训练模型和经过处理的手部数据集进行迁移学习,得到了遥控系统中所使用的手部检测模型,迁移学习可借助TensorFlow物体检测API[3]完成。

1.2.1 手部数据集处理

EgoHands数据集[4]是美国印第安纳大学IU计算机视觉实验室提供的一个以手部画面为中心的复杂交互场景下专用、免费数据集,该数据集以图为单位记录了一连串沿手部轮廓记录的高精度值标注坐标,以matlab格式记录。本文在该数据集的基础上,通过计算将原轮廓型标注转换为矩形识别标注以满足迁移学习训练数据集的格式要求。处理规则如下:一张图内可能有多个手部,须依次处理;每个手部分别取轮廓型标注数据中的[minx,miny ]及[maxx,maxy ]为该手部矩形标注框左上角及右下角的坐标值。

1.2.2 模型训练及结果

在API提供的迁移学习脚本中设定训练与测试数据集文件路径、分类标签文件路径、预训练模型资源路径及训练轮数,执行脚本即可开始训练。为了获得稳定输出效果,训练轮数设为15万轮。实验中,约1万步左右时模型loss逐步降至2.5,随着训练轮次增加在2.0 附近趋于稳定;经过测试集验证,[email protected] 为0.960 8,表明当前模型识别手部效果较好,可以将其部署在遥控应用中。此外,训练所得的模型网络计算图结构model.ckpt文件还需冻结为可用于部署的pb格式。原训练结果ckpt格式文件约90MB,经冻结操作后获得pb格式文件仅23MB。

2 软件实现

2.1 手部检测模型推理与遥控指令生成

TensorFlowInferenceInterface 接口负责处理数据输入输出工作,接口利用模型图Graph对象和名称构建指定节点Operation对象,分别为一个输入节点和四个输出节点,输出结果分别给出检测物体识别框位置、分类信息、分类概率与物体数量信息。相机采集得到帧画面为YUV格式,须先转换为RGB格式像素图对象送入网络输入节点,模型推理结果(识别种类和位置等信息)将返回至输出节点。模型可以返回多个手部识别结果,为确保指令清晰,需选取概率数值最大的结果作为唯一输出,因此在阅览区至多只有一个结果框。如图4所示,AB框为帧画面中手部物体检测结果矩阵框。实际情况中,AB框可能涉及多个区域,为得到明确的遥控指令,需利用AB框中心点(下称中心点)坐标确定具体的指令。定义阅览区起点坐标为(0,0),中心点坐标计算方法为:

Centralx = top + (button - top) /2

Centraly = left + (right - left) /2

遥控指令与中心点所在位置有关,规则如下:1)中心点在左部区域,即其坐标满足(x < 150,y 任意),小车向左前方行驶;2)中心点在右部区域,即其坐标满足(x > 330,y 任意),小车向右前方行驶;3)中心点在上方区域,即其坐标满足(x ≥ 150,y ≤ 330),小车向正前方行驶;4)当中心点位于以上其他区域之外,即其坐标位于其他区域,小车后退。

2.2 消息传递机制

遥控App须监听用户点击遥控按钮操作、及时创建定时执行的遥控服务,还涉及手部检测、遥控指令生成、根据蓝牙连接状态决定是否发送蓝牙信号,这些涉及多个Activity、Service等组件及其后台线程的通信,实现难度较大。EventBus事件驱动框架[5]使用订阅/发布模式降低Activity、Service等组件的耦合度、消除复杂的依赖关系,是一种简洁、开销较低的实现方式。在该框架下,Activity和Service可同时具备事件发布者和订阅者两种身份;总线程会在发布者发布消息事件后将其转发,注册了相关事件的订阅者即可接收到有关该消息事件的数据。依靠上述设计实现定时发送遥控信号功能相关方法如下:

1)在活动中注册消息机制,利用定时任务方法发布EventBus消息事件。一旦监听到用户点击遥控按钮,当前活动将新增定时任务(发布定位事件,内含识别结果坐标和匹配设备信息)并指定发送间隔,使遥控服务定期执行任务。当用户在界面点击“开始遥控”按钮,每3秒向EventBus总线程发布一次消息。

2)遥控服务在收到定位消息事件后,将其携带的中心点坐标转换为遥控指令、发送蓝牙信号并以消息弹窗形式显示指令内容和当前连接状态。该服务需要先获得手部检测结果和蓝牙连接设备信息才能执行后续操作,因此需要将这两种信息包装成一个消息事件供活动和服务共同使用。

2.3 蓝牙服务

在现实场景中,小车端需使用低功耗蓝牙模块来获得更低的电量消耗,因此应用需与小车建立BLE蓝牙连接,通过应用全局类单例对象创建并管理蓝牙管理器,根据小车蓝牙模块设定相应服务与特征UUID。当用户在蓝牙匹配弹出对话框中选中智能小车并确认连接,蓝牙服务将与选中的BLE 蓝牙设备创建GATT连接。GATT连接单次发送的数据不能超过20 字节[6];智能小车端运动控制模块需要Hex类型数据,因此遥控指令(字符串)需转换为Hex字符串后再转为Byte数组,当数据超过20 字节时需分批(以20字节为一组)发送,该过程将循环执行直至全部发送完毕。

3 测试结果

通过测试验证,手机蓝牙功能正常开启时在应用内点击“蓝牙遥控”按钮可以查看手机5~10米范围内所有BLE蓝牙设备,可选择小车蓝牙设备并成功匹配;检测到手部时阅览区会出现手部识别框,阅览区下方会出现对应的遥控指令提示文字。如图5所示,手部识别框中心点在阅览区下方时小车遥控指令为“go down”。通过串口调试助手进一步检查小车蓝牙模块所收到的数据,确认App向小车蓝牙模块发送的数据均被正常接收且遥控指令与人物手部运动情况一致。结合多种手部姿态和复杂背景进一步开展测试,发现App仍能实时识别出不同姿态的手部并给出相应运动方向的遥控指令。目前,该模型在测试设备上完成单帧检测时间在250ms~380ms之间浮动,FPS 均值约为3。

4 结束语

本文设计并实现了一种基于离线手部检测模型的智能小车遥控系统,该系统利用移动端设备硬件模块可实现离线手部检测,并将其转换为智能小车的运动指令,通过低功耗蓝牙连接发送至小车端。该方法经过适当调整(如通过迁移学习调整识别物体种类)可适配工作性质类似的应用场景,对推动基于图像识别的遥控低成本工具发展有一定的实际意义。

参考文献:

[1] TAKAWALE H C,THAKUR A.Talos app:on-device machine learning using TensorFlow to detect android malware[C]//2018Fifth International Conference on Internet of Things:Systems,Management and Security.October 15-18,2018,Valencia,Spain.IEEE,2018:250-255.

[2] JEFF TANG.Intelligent Mobile Projects with TensorFlow[M].Birmingham, UK: Packt Publishing Ltd., 2018.

[3] AL-AZZOA F,MOHAMMED A,MILANOVAB M.Human related-health actions detection using android camera based on TensorFlow object detection API[J].International Journal of Ad⁃vanced Computer Science and Applications,2018,9(10):9-23.

[4] BAMBACH S,LEE S,CRANDALL D J,et al.Lending A hand:de⁃tecting hands and recognizing activities in complex egocentric interactions[C]//2015 IEEE International Conference on Com⁃puter Vision (ICCV). December 7-13, 2015, Santiago, Chile.IEEE,2015:1949-1957.

[5] Greenrobot. EventBus: Events for Android[EB/OL].[2023-10-20].https://greenrobot.org/eventbus/.

[6] Punch Through. How GAP and GATT Work-Bluetooth Low En⁃ergy Basics[EB/OL]. [2023-10-20]. https://punchthrough. com/products/bean/guides/everything-else/how-gap-and-gattwork.

【通联编辑:代影】

上一篇 点击页面呼出菜单 下一篇