程杰 陈建华 许舒涵
关键词:手势识别;ESP32;弯曲传感器;SVM;神经网络*
据中国残疾人人口数据库有关数据,我国持残疾证人口中听力残疾和言语残疾共计249.2 万人,且多为农村人口。由于工作和生活中大多数人不熟悉手语,造成了聋哑人难以融入社会生活的问题。因此,迫切需要一款低价、便携的手语翻译系统来辅助聋哑人与普通人沟通。
鉴于手语翻译系统在辅助聋哑人融入社会中起到的重要作用,本文通过设计一款适用于手语采集与输入的智能手套及翻译系统采集手势,形成数据库并训练机器学习模型。使用者佩戴手套以后做出不同手势,手套将采集到的手指弯曲程度、加速度等信息在单片机进行预处理以后,通过UDP 协议经Wi-Fi 传递至云端处理,云端接收数据报后通过分辨通过分辨静态手势与动态活动,将数据二次处理后放入已经训练好的模型中进行预测,并在网页界面实时显示结果,实现全平台兼容。该方案稳定性较高,可拓展性及可维护性极强,人机交互友好,解决了当前非接触式手势识别精度低、易受干扰、处理速度慢等痛点。
经过测试该方案识别准确性高达91.02%,方差0.0012,硬件成本仅为296 元且可拓展性高,人机交互友好,具备广泛普及的条件,能有效辅助聋哑人士进行简单交流,更好的参与社会生活,并且还可以作为教学用具进行手语培训。
1 手势识别方案选择
方案1 基于传感器和MPU6050 姿态传感器的手势识别数据手套上的传感器能识别手指弯曲以及手部的运动,识别率较高,并且成本低有利于推广,数据量低传输速度快,处理难度低。
方案2 基于计算机视觉的手语识别通常采用摄像头作为传感设备,无须穿戴,体验感较好,但是感受与识别技术容易受到周围环境因素的影响,如光照等。同时需要处理的数据量巨大,识别的实时性较低,并且不适用于日常环境。
2 系统设计
2.1 系统组成
本系统总体设计框图如图1 所示,包括弯曲传感器、姿态传感器MPU6050、ESP32、服务器、网页端五部分。
2.2 系统工作过程
弯曲传感器和姿态传感器分别采集手指弯曲数据和手掌朝向、运动数据。采集到的数据在ESP32 进行滑动滤波和归一化处理后以UDP 报文发送给服务器进行分類和识别最终将识别结果呈现在网页端。
3 系统功能实现
3.1 硬件部分
系统的硬件部分将五根弯曲传感器通过几段在手指关节处的软管固定使其可以在软管中自由滑动,从而实现良好的佩戴体验并提高数据采集的准确性。将陀螺仪、单片机通过排母固定于主板上,并将主板通过手环固定于手腕上,从而尽可能降低了佩戴该装置对手部活动的影响,单片机和弯曲传感器之间通过杜邦线连接,采用电池供电形式,实现了舒适的穿戴体验。
3.1.1 弯曲传感器
弯曲传感器采集五根手指的弯曲数据,如图2 所示,R1为弯曲传感器等效电阻, R2为可变电阻,用于分压使得输出电压不高于ADC最大可分辨的电压2 450 mV。由于拇指与另外四指采用的弯曲传感器不同,因此对于拇指,R1的范围为25 kΩ~135 kΩ,R < 2 24.04 kΩ;对于其它四指,R1的范围为9 kΩ~22 kΩ,R 2< 8.64 kΩ。
3.1.2 姿态传感器
姿态传感器采用MPU6050,用于识别手掌朝向和手部的运动数据。姿态传感器MPU6050 可以测定x、y、z 三个坐标轴的加速度,当传感器静止时加速度分量的绝对值最大的坐标轴所对应的平面向上,若该最大加速度为正值则该坐标轴负方向所对应的平面向上,反之则该坐标轴正方向对应的平面向上。基于这个原理实现了对手掌朝向的判断。另外,通过航向角、横滚角、俯仰角的变化识别手部的运动情况。
3.1.3 ESP32
ESP32-C3-WROOM-02 对弯曲传感器的数据进行归一化和滤波处理,同时将弯曲传感器和姿态传感器输出以UDP 报文形式发送到服务器。
3.1.4 主板设计
如图4 所示,主板电路由ESP32、MPU6050 模块、自动下载电路组成,具备WiFi 连接、六轴运动数据采集与处理、自动复位等功能。传感器电路由弯曲传感器、可变电阻及运放构成,实现将手指弯曲程度的变化转换成电压变化的过程。由于ESP32 单片机中,可设置的最大ADC 采样范围为150 ~2 450 mV,因此可变电阻和弯曲传感器电阻对V cc 进行分压使得电路输出电压不超过阈值电压。通过调整可变电阻的大小实现可变电阻与弯曲传感器电阻对电源电压分压,电压信号通过运放增强驱动能力,避免长距离传输造成的损耗,从运放输出端输出,实现对手指弯曲程度的采集。该电路的设计应该 注意在运放输出端与地之间接一个100 nF 的电容进行滤波,并且传感器电路应该尽可能离单片机近一些,以避免长距离传输造成的损耗。
3.2 软件部分
3.2.1 手套端程序设计
如图5 所示, 本项目的程序设计基于ESP32 的RTOS,在此基础上,单片机任务主要分为三部分:串口任务、ADC 任务、UDP 任务。
1)串口任务设计
初始化后读取缓冲区中存储的弯曲传感器数据,然后对数据进行处理,处理结束后判断缓冲区是否有数据,若有则重复读取数据、处理数据、判断缓冲区有无数据步骤,反之则延时10 ms 切换其他任务。
2)ADC任务设计
初始化后进行ADC 采样,采样完成后进行数据处理及存储,然后延时30 ms 并返回ADC 采样步骤进行循环。
3)UDP任务设计
初始化后连接Wi-Fi,连接完成后处理ADC 数据,之后判断ADC 滑动滤波窗口是否已满,若已满则发送数据并延时10 ms 然后判断发送是否出错,若出错则返回连接Wi-Fi 步骤重新执行以后步骤,若未出错则返回处理ADC 数据步骤重新进行。如果ADC 滑动滤波窗口未满则直接跳转至延时10 ms 阶段并执行后续步骤。
4)滤波程序设计
在数据处理过程中,源信号往往受到多种因素的干扰,使得采集到的信号包含多种类别的噪声。如图 6 是通过ADC 直接采集到的弯曲传感器上的电压,可以看到,数据有明显的波动。本子程序采用滑动滤波方式,控制窗口大小为450 ms,能较好地平衡抖动与细微动作。同时使用归一化处理使手套具备更强的鲁棒性,适配多用户情况下的手势识别。如图7 是经过滤波和归一化处理后的数据。
3.2.2 服务端程序设计
服务端程序設计如图8 所示,初始化时,加载训练好的SVM 模型和ANN 模型并且初始化套接字,等待数据报。接收数据报后,对数据进行预处理,判断数据是否来自动态手势,若不是,则将数据放入线性分类器进行处理,显示结果;若数据来自动态手势,则放入列表,循环“采集- 堆栈”该操作,直至动作结束,将数据缩放后放入ANN 模型,得出结果。
服务端基于Python 的Web 应用程序框架Streamlit搭建,如图9 所示,数据处理的结果可以实时呈现。
3 测试方案与测试结果
为了测试设计的识别准确率和可靠性,我们邀请200 位受试者以20 人为一组分为A~J 共计10 组进行测试,得出每组的平均正确率如表2 所示。
表格 2 测试分组正确率
可见本设计具有良好的识别准确率和可靠性。但测试者所做手势准确与否、数据库数据量等会对测试结果造成一定影响。
4 结束语
本文设计并实现了一种适用于手语采集与输入的智能手套及翻译系统,硬件和软件经测试均可正常运行并达到良好的准确性和稳定性,实现了识别准确率高达91.02% 方差仅为0.0012. 手套功耗仅为0.32 W,资源利用率为59.3%,采集速率达到模块理论上线,硬件成本可以控制在296 元。本设计能很好的解决聋哑人的日常沟通问题帮助他们更多的参与社会生活,并且可用于教学用途,辅助学习者更快、更规范地学好手语。