MPU6050陀螺仪的有趣玩法——手势识别制作魔杖

前言

今天在B站上看到一个很有意思的项目:

仔细看了一下项目,大概是通过MPU6050收集陀螺仪数据,然后在STM32上跑了一个神经网络的分类模型,识别出来不同的手势动作。这个项目的思路让我眼前一亮,感觉可玩性很高,只要是MPU6050+可以跑神经网络的开发板都可以这么玩。

技术解析

1. 数据收集和处理

设备端有一个按钮,按了之后会收集80条MPU6050的数据,数据加入头尾封装之后,发送到串口

用python读取串口数据,并保存数据到文件中

收集所有的动作+无动作的数据,每种数据100条

2. 训练

使用CNN网络训练,参数要少,模型要小,以防单片机放不下,参考代码:

inputs = layers.Input(shape=input_shape)
# 卷积层1
x = layers.Conv1D(24, kernel_size=3, strides=1)(inputs) # type: ignore
x = layers.ReLU()(x) # type: ignore
x = layers.Conv1D(12, kernel_size=3, strides=1)(x) # type: ignore
x = layers.ReLU()(x)# type: ignore
x = layers.Conv1D(12, kernel_size=3, strides=1)(x)# type: ignore
x = layers.ReLU()(x)# type: ignore
x = layers.Conv1D(12, kernel_size=3, strides=1)(x)# type: ignore
x = layers.ReLU()(x)# type: ignore
x = layers.MaxPooling1D(pool_size=3, strides=1)(x)# type: ignore
# 展平层
x = layers.Flatten()(x)# type: ignore
x = layers.Dropout(0.5)(x)# type: ignore
# 全连接层1
x = layers.Dense(num_classes)(x)# type: ignore
x = layers.Dropout(0.5)(x)# type: ignore
outputs = layers.Softmax()(x)# type: ignore
model = models.Model(inputs=inputs, outputs=outputs)# type: ignore

3. 部署

只要是能部署神经网络的开发板都可以

使用时,仍然是通过按按钮,收集80条数据,发送给模型进行分类判断

如果置信度高于80%,就输出分类结果,如果不到,则分类为未识别

结语

这个 IDEA 还可以用到很多地方,例如使用动作识别来开门开灯,总之是一个很有意思的工作,大家可以试试看