“手势识别是计算机科学和语言技术领域的一个研究课题,其目的是通过数学算法解析人类手势。它可以在机器和人类之间搭建更高效的沟通桥梁,让生活更丰富多彩、更智能化。人们在基于图像/视频的手势识别方面已经做了大量研究(通常使用2D摄像机),今天我们将讨论新的解决方案 - 基于ToF传感器的3D手势识别。

手势识别是计算机科学和语言技术领域的一个研究课题,其目的是通过数学算法解析人类手势。它可以在机器和人类之间搭建更高效的沟通桥梁,让生活更丰富多彩、更智能化。人们在基于图像/视频的手势识别方面已经做了大量研究(通常使用2D摄像机),今天我们将讨论新的解决方案 - 基于ToF传感器的3D手势识别。

在新冠疫情肆虐的当前形势下,人们对“非接触式”解决方案用户界面的要求越来越高,同时保持社交距离正成为“新常态”;然而在日常生活中,我们仍然需要接触公共场所中的多个目标,特别是使用ATM机、自动售货机、工厂机器等设备的界面。将意法半导体的新型传感技术和强大的人工智能算法结合之后,我们可以通过3D手势识别演示实现此解决方案。让我们看看演示过程。

演示概述

该演示目前能够识别8种手势,包括:向左滑动、向右滑动、向上滑动、向下滑动、单击、双击、顺时针旋转和逆时针旋转。

我们采用意法半导体的最新飞行时间(ToF)8X8多区域测距传感器VL53L5CX作为输入,然后在STM32上运行深度学习神经网络算法,最后在PC GUI上显示识别结果。

在硬件方面,我们组合运用STM32F401RC Nucleo板和VL53L5 EVK扩展板。

基于CNN的手势识别系统结构图 手势识别基于什么算法_3d

输入传感器

VL53L5CX是最先进的飞行时间(ToF)多区域测距传感器,壮大了意法半导体的FlightSense产品阵容。该产品是意法半导体今年最新发布一款ToF传感器。

✦ 特性:

快速、精确的多区域测距传感器
– 多区域测距输出可覆盖4x4或8x8个单独区域
– 自主低功耗模式,通过可编程中断阈值唤醒主机
– 范围可达400 cm

完全集成的微型模块,具有宽视野(FoV)
– 发射器:940nm不可见光垂直腔面发射激光器(VCSEL)和集成模拟驱动器
– 在发射器和接收器上使用衍射光学元件(DOE)的63 °对角视野FoV
– 大小:6.4 x 3.0 x 1.5 mm

方便集成
– 单回流焊元件
– 灵活的电源选择,单个3.3 V或2.8 V操作或3.3 V或2.8 V AVDD与1.8 V IOVDD组合

基于CNN的手势识别系统结构图 手势识别基于什么算法_数据集_02

采集与标记数据集

获取足够数量的关于不同手势的代表性数据对于训练人工神经网络模型是非常重要的。

当执行一个手势动作时,我们可以通过使用Python语言开发的特定GUI轻松从ToF传感器获取并标记原始数据,并创建自己的数据集。

基于CNN的手势识别系统结构图 手势识别基于什么算法_数据集_03

 

该数据集包含了每种手势(我们的演示中有8种:向左滑动、向右滑动、单击、双击、顺时针旋转、逆时针旋转、向上滑动、向下滑动)的数千个样本,这些手势由少数几人提供。

显然,如果你希望创建自定义的手势,也可以使用相同的工具为这个手势创建新的数据集。

构建和训练神经网络

对于神经网络部分,我们选择运用简单、灵活、功能强大的Keras框架构建神经网络。因为手势是一种顺序动作,所以我们选择CNN + GRU层来创建模型,经过大约50个epoch的训练,我们训练和验证数据集的准确率可达到95%以上,而损失仅有0.08左右,已经很不错了。对于测试数据集,我们也可以针对每种手势获得不错的准确率。F1评分可达96%。

基于CNN的手势识别系统结构图 手势识别基于什么算法_3d_04

最后,我们可以将训练效果最好的模型和权重保存为gesture.h5的模型,以便在MCU端实施。

在MCU端实施手势模型

✦ 先决条件:

需要在STM32CubeMX中安装X-Cube-AI扩展包。目前的最新版本是7.0.0,它也支持sklearn机器学习模型转化。

基于CNN的手势识别系统结构图 手势识别基于什么算法_数据集_05

✦ X-Cube-AI配置向导:

配置完使用哪块板件后,可以从软件包->选择组件加载X-Cube-AI,或使用快捷键Alt+O。

基于CNN的手势识别系统结构图 手势识别基于什么算法_基于CNN的手势识别系统结构图_06

需在“Software packs component selector”窗口选中X-Cube-AI/Core 这个选项,才能调用神经网络模型并生成相关的STM32 NN库。单击[OK],完成选择。如下图所示:

基于CNN的手势识别系统结构图 手势识别基于什么算法_基于CNN的手势识别系统结构图_07

✦ 启用X-CUBE-AI组件:
单击[STMicroelectronics X-CUBE-AI 7.0.0] 打开初始AI配置窗口。选中 [Artificial Intelligence X-CUBE-AI] ,启用X-CUBE-AI内核组件。还必须选中[Device Application],才能添加AI插件应用程序。

✦ 加载神经网络(NN):
1.添加网络。
2.将模型名称改为“gesture”。
3.选择“Keras”作为输入模型类型。
4.点击“Browse”按钮以选择要实现的模型。gesture.h5
5.点击“Analyze”按钮以分析模型。

基于CNN的手势识别系统结构图 手势识别基于什么算法_3d_08

分析完毕后,将显示模型层详细报告,还附有该模型需要使用的MACC、flash、ram信息。

最后,在CubeMX中点击“生成代码”,然后会在您的项目中创建一个X-CUBE-AI文件夹,可以在该文件夹中找到一些有用的文件。

包括拓扑网络的gesture.c和gesture.h文件。

包括权重/偏差的gesture_data.c和gesture_data.h文件。
app_x-cube-ai.c and app_x-cube-ai.h 文件还提供AI客户端应用程序可以使用的通用多网络推理API接口。

如果后续需要更新数据集或是重新训练更新权重以获得更好的性能效果,只要更新gesture_data.c和gesture_data.h文件就可以。所以,更新过程很方便的。

显示结果

最后,将uart日志打印到PC端,从而在GUI端显示我们的预测结果。当您在距离自己20~80cm的ToF传感器前做一个顺时针旋转的手势时,GUI将会显示预测结果,如下所示。百分比是该手势的概率。

基于CNN的手势识别系统结构图 手势识别基于什么算法_基于CNN的手势识别系统结构图_09

3D手势演示到这里已经结束,该解决方案可用于以下几个应用场景。
智能家电:当您的手上脏或湿的时候,通过手势识别控制不同的家电。
交互式娱乐:如游戏机。
人机交互:让机器更智能,让人更安全,特别是在新冠病毒肆虐的环境或一些危险环境中。

现在,您可以尝试使用VL53L5传感器、STM32开发板、以及强大的X-Cube-AI库创建自己的手势识别演示。我们正在一些活动中展示该演示项目;如果您对我们的手势演示感兴趣,请联系意法半导体的AI创新应用中心,我们会选定目标客户根据产品的特定用例对该演示进行产品级支持。