[Day 24] Edge Impulse + BLE Sense实现手势动作辨识(上)

有了先前[Day 20][Day 21][Day 22]「Edge Impulse + BLE Sense实现唤醒词辨识」的基础和[Day 23] 让tinyML感受你的律动对运动感测器(IMU)的认识後,相信接下来要说明的手势(连续)动作辨识(Gesture/Continuous Motion Recognition)应该也能轻松上手。

在这个案例中,我们同样使用Edge Impulse云端一站式tinyML开发平台,并以Arduino Nano 33 BLE Sense(以下简称 BLE Sense)开发板作为感测及布署的硬体,主要会用到ST LSM9DS1 IMU运动感测器来收集XYZ三个轴向的加速度变化,而陀螺仪和地磁计就暂时不会用到。如图Fig. 24-1所示。

Edge Impulse结合Arduino Nano 33 BLE Sense作手势动作辨识
Fig. 24-1 Edge Impulse结合Arduino Nano 33 BLE Sense作手势动作辨识。(OmniXRI整理绘制, 2021/10/9)

为方便测试手势运动,首先把BLE Sense固定在右手手背上(如图Fig. 24-1a),如果不好固定可用使用一个手套或魔鬼沾做成手环,再将板子固定在手背上,要注意最好能紧密贴合,不要可以随意晃动,这样取到的信号品质会好些,微量振动会少些。

将BLE Sense开发板安置於手背以方便手势辨识
Fig. 24-2a 将BLE Sense开发板安置於手背以方便手势辨识。(OmniXRI整理绘制, 2021/10/9)

再来自定义四种手势方便後续测试。当然这里你可以自定义不同的手势移动方式及分类数量,由於运动感测器非常敏感,容易收到许多杂讯,所以建议手势间要有明确的XYZ轴向变化,比方前後、上下、左右、画圆圈等运动,不能差异太少,否则模型训练时会很难收歛,布署後推论时准确率会很低。

  • OK : 伸出姆指比「赞」(当然姆指伸不伸出来是没差的),由後向前运动并停顿一下。

    OK手势
    Fig. 24-2a OK手势(OmniXRI整理绘制, 2021/10/9)

  • NG : 伸出食指由中间向右移动,再移至左方,再移回中间启始位置,并顿点一下。只要摇摆一次。

    NG手势
    Fig. 24-2b NG手势(OmniXRI整理绘制, 2021/10/9)

  • Pass : 伸出食指画一个圆圈,再回到原来的位置。

    Pass手势
    Fig. 24-2c Pass手势(OmniXRI整理绘制, 2021/10/9)

  • Idle : 闲置手势,手势预备动作,须有固定位置和手的摆放角度。如需手势任意摆放,则会增加资料集取样复杂度和产生更多不明确手势,所以暂以固定手势预备动作来辨识。如有需要还可另外增设「不明手势(Unknow)」分类。

    Idel手势
    Fig. 24-2d Idle手势(手有在动,请仔细看)(OmniXRI整理绘制, 2021/10/9)

接着就可以进入Edge Impulse云端平台依序执行下列工作。

  1. 建立新专案
  2. 确认连线装置
  3. 收集及建置资料集
  4. 模型设计及训练
  5. 模型布署及推论

建立新专案

登入Edge Impulse後,点击右上角使用者名称後,即可选择「Create New Project」,输入新专案名称创建一个新专案,系统会提示想要开那一类的专案,选择「Accelerometer Data」,然後按右下绿色按钮【Let's get started!】即可开始新专案,或者点击「Connect your development board」进入「连线装置(Device)」页面。如图Fig. 24-3左上所示。

确认连线装置

接着於Windows命令列模式执行「edge-impulse-daemon --clean」重新将BLE Sense连上网页,记得电脑要处於可於上网状态。输入使用者帐号、密码,并选择专案名称,输入装置名称,即可回到Edge Impulse网页「连线装置(Device)」页面检查是否已能正确连结(亮绿灯)。如图Fig. 24-3右及下方所示。

Edge Impulse 开新专案与装置连线
Fig. 24-3 Edge Impulse 开新专案与装置连线。(OmniXRI整理绘制,2021/10/9)

收集及建置资料集

接着录制四种手势,分类标签(Label)分别取名为「OK, NG, Pass, Idle」,为简单测试,这里每种手势录制20秒,取样频率100Hz,进入後连续作10次动作,记得手势要有间隔(间歇),再来分割样本,做两次可得到20个样本,如果样本品质不好,可以多录及分割几次,以取得足够的样本。最後四个分类会取得80个样本,再将其中16个(4分类各4笔,占20%)移作测试集用。如图Fig. 24-4所示。取样时大家应可注意到,这和声音样本最大的不同就是从一维变成三维资料了,且没有声音播放键,只有波形图。

Edge Impulse 收集和建置手势动作资料集
Fig. 24-4 Edge Impulse 收集和建置手势动作资料集。(OmniXRI整理绘制, 2021/10/9)

这里补充一下资料集多样性问题。上面范例只取4分类各20笔资料,这只是为了方便後续训练时能缩短一些时间,但这麽少的资料在训练时很容易就会发生训练过拟合(Overfitting)问题。建议实际操作时能增加多一点的样本,如果可以的话,甚至给多个人来重复这些动作。现实状况,每个人配戴开发板的位置、角度可能都有些不同,即便是同一人,重复穿戴也难保证会完全一样。另外每个人的手势运动速度、动作大小、移动角度、停顿力道等都有可能不同,所以收集越多就能提高训练出的模型有好的推论精确度表现。

目前手势辨识分为两大类,一种就是本文提到的方式,以IMU的运动数据来进行辨识,但此类比较适合动态手势。另一种则是以影像感测器获得的数据来辨识,所以不论动态或静态手势都能辨识。前者并不像声音(短字词)有很多公开资料集可供使用,而後者就有较多公开资料集可参考。大家都知道在手机触控萤幕上,有单指或双指甚至单、双击的常用手势,但这样人机介面并没有延伸到基於IMU感测器的3D(浮空)手势辨识,或许未来会有这类的公开资料集出现。但在这之前大家只好乖乖建置自己资料集。

=== 「模型设计及训练」、「模型布署及推论」就留待下回分解 ===

参考连结

Edge Impulse Document - Tutorials - Continuous motion recognition说明文件


<<:  Day 25 - [Android APP] 03-Android 的 STT 与 TTS

>>:  MyBatis 实际测试

【Day22】 Transformer 新手包 (二)

Query,Key,Value 在昨天我们有提到 "自" 注意力机制,现在我们更...

Day 17-隔离框架 (isolation Framework) - NSubstitute 基本介绍-2 (核心技术-9)

NSubstitute 基本语法前言 今天的文章主要参考於 NSubstitute官方网站,正所谓工...

学习笔记:一起进入 PixiJS 的世界 (一)

PixiJS为2D WebGL渲染引擎,经常使用於互动与游戏相关专案中,具有快速、装置支援度高的优点...

【Day13】:EXTI外部中断/事件控制器

外部中断 由於各种外设都可以有中断,今天我们就来实际使用一种比较简单的中断-外部中断,但却是非常重要...

[Day22] JavaScript - Fetch API

第18篇有提到过Fetch的用法(连结),这篇要实际使用Fetch来做简单的Api串接。 首先介绍一...