本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

机器学习系列之可穿戴手势识别聊天交互工具

发布时间:2020-08-12
分享到:

机器学习系列之可穿戴手势识别聊天交互工具

发布时间:2020-08-12
分享到:

描述

Atltvhead手势识别护腕-用于atltvhead项目的Tensorflow手势检测器以及对数据科学的探索该存储库是我对Jennifer Wang和Google Tensorflow的魔杖项目的支​​持。使用加速度计数据和CNN模型,在实时流中检测手势。手势数据通过Twitch聊天发送到我的tvhead项目,更改了可供聊天控制的动画。机器学习模型与Twitch聊天互动。简化电视聊天API。

 

我运行一个交互式实时流。我戴了像头盔和背包一样的老式电视(带有可正常工作的LED显示屏)。Twitch聊天通过聊天命令控制电视屏幕和背包屏幕上显示的内容。在一起Twitch聊天时,我经历了乔治亚州亚特兰大市的欢呼声。 随着时间的流逝,我有20多个电视显示频道命令。记住甚至复制粘贴都变得复杂而乏味。因此,现在是时候简化我与tvhead的界面了。

 我有什么资源?
在直播期间,我身着旱冰鞋,右手握着相机,左手有一个由飞行时间传感器和esp32制成的高五只检测手套,我的背包有一个覆盆子pi 4,和一个带有按钮的网站,这些按钮在抽搐聊天中发布命令。 

要简化什么?
我想简化通道命令,并使其更加游戏化。

 使用什么资源?
我将换上五指高的手套,取下飞行时间激光雷达传感器,并向树莓派提供加速度和陀螺仪数据。这样Pi可以从手臂数据推断出手势。这是我的游戏计划!

组件
1个×ESP32 Thing Plus
由Sparkfun
1个×LSM6DSOX + LIS3MDL-精密9 DoF IMU-STEMMA QT / Qwiic
通过Adafruit
1个×按钮
1个×树莓派4


我缩小了可以将手势执行的时间窗从3秒缩短到大约1.4-1.5秒。它运作良好,并且感觉比原来的流畅得多。手势计时方面还有一些优化的余地,但我对其当前状态感到满意。这次在比较模型时,第二和第三cnn的训练比第一个要好。但是,较大的第2个模型比较小的第3个模型执行得更好。我继续使用cnn_model2_half.h5但是,使用熊猫时需要进行一些改进。由于未释放数据帧内存,因此每个手势采样将消耗越来越多的内存。解决方案是使用多处理库来运行手势采样,就像在单独的过程中一样。进程完成后,它将其内存返回给操作系统。这应允许进行真正的连续手势读取,而不会占用树莓派上的内存。仍在努力在esp32上进行部署,但只是确保有足够的空间来容纳其他代码和处理位。

选择传感器
简要说明我的传感器选择。

激光雷达:在以前的可穿戴设备版本中,我使用“激光雷达”飞行时间传感器来检测击掌。但是,如果不将大量手势全都安装在一只手臂上,它就无法检测到手臂手势。

污点传感器:使用电阻拉伸橡胶的变化,我可以感觉到我正在锻炼的肌肉或手臂的总体形状。但是,它们很容易损坏,使用时会磨损。

肌肉传感器:像MYO臂章之类的东西可以确定手势,但是在我的用例中需要大量处理开销。它们也很昂贵。

IMU:加速度传感器和陀螺仪传感器很便宜,并且不会随着时间而磨损。但是,从传感器的数据输出确定手势需要大量手动阈值设置和计时,才能确定有用的内容。幸运的是,机器学习可以确定数据中的关系,甚至可以在具有tflite和TinyML的微控制器上实现。我选择继续使用IMU传感器和机器学习。我的传感器是ST的Adafruit Qwiic板上的LSM6DSOX。

Arduino设置
在该项目的Arduino_Sketch文件夹中,Github存储库是AGRB-Traning-Data-Capture.ino。一个脚本,用于将Adafruit LSM6DSOX 6自由度IMU的加速度和陀螺仪数据通过USB串行端口输出。由于该板与Adafruit IMU之间的Qwiic连接器支持,我选择了SparkFun的ESP32 Thingplus。在内部上拉电阻接通的情况下,按钮连接在接地和引脚33之间。最终,我计划在esp32上部署tflite模型,因此我包括了一个电池。每次按下按钮,esp32都会通过USB发送3秒钟的加速度和陀螺仪数据。

建造房屋
我使用Fusion 360为手臂和方形外壳(例如外壳)建模。它进行了一些修改,以使其完美匹配,并且即使在Hotlanta炎热的天气中,实际上也相当舒适。所有cad文件都在该项目的链接github中。

数据采集
在我的github存储库的Training_Data文件夹中,找到CaptureData.py脚本。在Arduino加载了AGRB-Traning-Data-Capture.ino脚本并通过USB电缆连接到捕获计算机的情况下,运行CaptureData.py脚本。它会询问您要捕获的手势的名称。然后,当您准备执行手势时,请按Arduino上的按钮并在3秒钟内执行手势。捕获到足够的一个手势后,停止python脚本。冲洗并重复。我选择3秒钟的数据收集或大约760个数据点,主要是因为我不太确定每个手势要花多长时间。谁有更好的数据?

 

外文原文:点击进入


声明:本文由Hackaday授权电路城翻译,系电路城的原创内容,转载请注明出处!

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论