“tf.keras 是用于构建和训练深度学习模型的 TensorFlow 高阶 API。利用此 API,可实现快速原型设计、先进的研究和生产…” —— Keras  |  TensorFlow Core

目标: 依赖 nnom 库,将 keras 模型部署到 esp、stm32 等微控制器上

🐈‍⬛majianjia/nnom: 适用于微控制器的高级神经网络库.

部署到 stm32 | Keil

使用 STM32F103C8T6 + MPU-6050, 由于手上没有按键模块,暂时用串口中断的方式代替按键。(希望不会对效果有太大影响…😅)

串口发送一次输入时触发串口接受中断,中断回调函数里会从传感器读取一帧数据,直到得到特定长度的数据帧就由主线程送入模型中进行推理。

效果很一般,据了解 MPU-6050 只是收集加速度和角度,而原作者提供的模型包含了较多区分度不高的动作,可以先训练只包含少量动作的模型。

串口中断是由硬件异步触发的,不在程序的主线程发生,被跨线程访问的状态变量在声明时注意使用volatile关键字,以防编译器对其进行优化,确保每次都从内存中读取到最新的值。

部署到 esp8266 | Arduino

首先是如何在 Arduino IDE 中编译 nnom 库

  • 该步骤已验证成功

自己“制作”一个 Arduino 库: Arduino | 如何组织一个 Arduino 第三方库

尝试烧录到开发板上

nnom 会将 keras 模型编译为一个 model.h 文件,在源码中包含头文件,调用 nnom 的 API 即可创建模型实例进行推理。

暂时也没有 esp8266 的板子…

部署到 ws63 | 海思

待续。