物联网课程设计(物联网课程设计报告手势识别)

Mark wiens

发布时间:2022-10-28

物联网课程设计(物联网课程设计报告手势识别)

 

在《哈利·波特》系列电影中有各种各样的魔法棒,配合着不同角度的挥动,就可以实现奇特的效果,如点燃火把、拉开窗帘等。从物理学的角度分析,挥动魔法棒其实是改变魔法棒的运动速度,而衡量运动速度变化的物理量是加速度。从理论上讲,只要给魔法棒安装一个加速度传感器,就能感知所有的速度变化。

恰好,掌控板上自带三轴加速度传感器,那么,能否利用掌控板来准确判断魔法棒的手势呢?实际上很多人都尝试过用掌控板的加速度传感器来识别手势,但都因为编程太复杂、难度太大而放弃。目前,加速度传感器仅仅应用在摇一摇的判断和x、y轴的角度识别上,有大材小用的感觉。

用加速度识别手势的难度分析

为什么用加速度传感器识别手势很困难呢?因为在魔法棒挥动的过程中,加速度是不断变化的。因此,识别手势需要得到挥动过程中所有的数据变化,需要在手势轨迹中连续采样加速度数值,在得到的一组数据中寻找数据变化的规律。但是,每次人工绘制的手势数据不可能完全相同,总会因为快慢、形状的偏差而产生相近但不相同的数据,这就给编程带来了很大的难度。

在2018年,笔者曾经在本栏目写过《用掌控板体验机器学习》一文,介绍用曼哈顿距离公式来计算两组数据的偏差,即先绘制一次样本数据,作为手势的特征,当新采集的数据与样本数据的手势特征相近,误差小于某个阈值时,就可以识别为正确的手势。然而,这种方式需要人为计算均方根误差,并且不断调整阈值以达到较好的效果,识别算法设计难度高。再加上掌控板的存储和计算资源有限,也很难通过保存多次数据取均值改进识别效果,或者部署AI算法进行识别。

换一种思路来识别手势

1.深度学习

在学习人工智能的时候,大家都知道用机器学习的方式来寻找数据中的关系,是一种非常有效的方式。假设已经拥有一系列不同手势的加速度传感器数据(简称加速度数据集),那么搭建一个BP(Back Propagation)神经网络(如图1),不断将数据喂给这个网络模型,就能训练出一个能够识别手势的AI模型。借助于BP神经网络的机器学习,因为拥有神经网络分为多层,属于深度学习中的一种。

图1

深度学习主要分为数据收集、模型训练和模型推理这三个环节。数据收集也就是制作数据集,类似于人类的学习经验知识库,每条数据包含连续的加速度信息x和手势类别信息y。通过收集大量手势数据,并给数据正确标注类别信息,就可以让机器学习这些数据了。模型训练是让深度学习模型通过不断学习数据集信息,达到手势识别的能力。当模型训练好后,只要输入一组数据,就能输出识别的结果了(如图2)。

图2

2.物联网技术

虽然我们没有办法在掌控板上部署一个深度学习的计算框架,但是可以借助物联网技术,将数据传输到P C 机上处理。例如,我们可以通过发送MQTT消息将每条数据传输到物联网平台数据库保存,完成手势数据的收集,也可以将需要识别的手势数据,通过MQTT消息传入PC上的深度学习系统中进行推理(手势识别),然后得到结果(如图3)。

图3

手势数据的收集

为了手势识别更加准确,笔者规定每一个手势在1秒钟内完成,在这个过程中平均采集128个加速度传感器的数据。采集的程序比较简单,用mPyt hon就能编写。如图4所示,每次按下A键开始采集数据,听到滴的一声采集完成,如果确认采集无误,按B键发送到SIoT服务器(消息主题为shoush i/caiji )。

图4

重复多次挥动手中的掌控板,在空中画出相同的路径,如画三角形,这样就可以采集多条数据。当数据达到一定数量(笔者分别收集了100条)时,登录SIoT找到对应主题,可以导出数据到本地。然后更换一个手势,如×号,重复以上操作。笔者采集的手势分别是三角形、对号、错号、五角星和圆形。

接下来整理数据,为保存到本地的各种手势数据添加标签,保存为csv文件。文件中每行是一条数据,第一个数据是标签名,第二个数据是标签序号,后面的128个数值是一次完整手势轨迹的加速度值序列。

手势模型的训练

1.安装MMEdu

深度学习框架有很多,如Keras、TensorFlow、PyTorch等。MMEdu开发团队基于Pytorch和OpenMMLab,简化了神经网络模型搭建和训练的参数,降低了编程的难度,因此笔者以它为例介绍神经网络模型训练环境的搭建。

通过地址gitee.com/openxlab-edu/OpenMMLab-Edu可以下载项目文件。解压后即可使用,在Demo文件夹中能够找到范例代码。MMEdu内置了Pyzo,但笔者推荐使用jupyter作为IDE。

互联网小常识:CIDR使得路由选择变成了从匹配结果中选择具有最长网络前缀的路由的过程,这就是“最长前缀匹配”的路由选择原则。

2.训练数据模型

根据数据格式,笔者将第二列作为类别信息y,后面的128个数组成的序列作为加速度数据x,以图5所示的方式读入。

图5

互联网小常识:密码学分为密码编码学和密码分析学。在设计加密系统时,加密算法是可以公开的,真正需要保密的是密钥,对于同一个加密算法,密码的位数越长,破译的难度也就越大,安全性也就越好。

接下来,搭建一个BP神经网络模型进行机器学习,神经网络模型的输入层为128个神经元,因为每条数据有128个特征,输出层为5,所以手势共有5类。中间有3个隐藏层,神经元个数分别为64、32、16,隐藏层的作用是增加模型特征提取的效果。隐藏层层数和神经元个数可以自行调整。每个隐藏层后面紧跟一个激活层,用于增强模型的非线性拟合能力,代码如图6所示。

图6

然后将数据载入到网络中,进行训练。这里的lr指的是学习率,epochs是训练轮数,可以根据实际情况修改( 如图7)。每训练一轮,会输出一次训练情况,其中Loss越小,表明学习的效果越好。

图7

如果想在此基础上再继续训练,可以重复执行model.train,也可以修改其中的参数lr和epochs继续训练,以达到较好的效果(如图8)。

图8

当效果满意时,也就是当Loss数字不再明显下降时,就可以停止训练,执行model.save("mynet.pkl")来保存模型。

AI魔法棒的部署和测试

笔者将训练好的模型部署在计算机上,将从SIoT的主题shoushi/caiji收到的信息传入神经网络进行推理,根据推理结果决定是否发送消息给SIoT的主题shoushi/jieguo。代码编写如图9所示。在掌控板原来代码的基础上,添加一段代码,使得在掌控板上也能查看识别的结果(如图10)。

图9

图10

经过上述步骤的操作,基本已经完成了部署。接下来,就可以测试一下AI魔法棒的效果了。识别率还不错,大部分情况能够正确分辨出所做的手势(如图11)。

图11

小 结

当实现了对魔法棒的手势识别后,下一步就是要实现一些有趣的创意功能了,如识别出手势后点亮不同的LED或者在屏幕上显示相应的图案。当然,这样还太简单,因为笔者的实验室部署了智能家居系统,并且部署了HASS(具体请参考前几期的文章),那么这个魔法棒就能和智能家居结合了。例如,画个圆形灯光就点亮,画个心形灯光就变成粉色,画个×号灯就关闭等,是不是很有魔法的感觉?

有了深度学习和物联网技术的加持,学生各种天马行空的想象都更有可能成为现实。那么,还等什么,当人工智能遇上物联网,精彩的世界正拉开帷幕。

(本文作者:谢作如,浙江省温州中学;邱奕盛,上海人工智能实验室)

文章刊登于《中国信息技术教育》2022年第9期

互联网小常识:交换机与网桥的主要区别是主要功能都采用硬件完成,端口最多128(网桥24)。

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186