Funpack第九期-使用automl实现特定声音监测系统
大家好, 我叫james, 是一名hacker. 平时喜欢研究一些可编程的小东西.
第九期funpack活动的开发板是来自ST的SensorTile.box. 搭载了一颗arm cortex m4 mcu. 本期笔者使用AutoML, 实现了特定声音的监测.
第九期可以选择三个任务: 1. 实现物理量测量立方体; 2. 实现随身环境监测系统; 3. 使用神经网络实现特定声音监测系统.
我选择了第三个. 可能一开始会觉得第三个比较难, 但是经过认真比较挑选实现路径, 选择用AutoML实现, 其实可以不用编程就能实现.
为了更明确地区分项目中需要不同技能的任务, 笔者将任务分解为"ML实现", "软件实现"和"硬件实现"三部分, 本期不需要"软件实现"和"硬件实现", 具体如下:
- ML实现
使用qeexo在线服务, 实现包括训练, 验证, 测试的数据采集, 建模, 转换等步骤, 最终得含有训练模型的固件, 直接烧录到板子上.
- 软件实现
任务三无须编写代码. 但是为了完整性, 我用emacs实现了一个简单的上位机软件, 可以读取串口数据判断声音类型.
- 硬件实现
本期无须硬件开发.
不同于使用tensorflow等机器学习框架, 采用AuotoML可以实现全流程自动化, 不用自己搭环境.
ML基本步骤: 建模 -> 采数 -> 训练 -> 转换 -> 测试 以上步骤均在automl在线完成.
使用Qeexo进行数据采集首先会在sensortile上烧录数据采集固件
qeexo支持对采集到的数据进行可视化
数据采集完成后选择合适的模型, 这里笔者选择了CNN卷积神经网络模型, 模型选择完成后进行训练
iot软件无须自己编写, 以下为上位机重要代码段
(defun sensortile-result (p o) (show-result (let* ((tokens (split-string o "[ \n:,]+")) (alpha (string-to-number (nth 2 tokens))) (beta (string-to-number (nth 3 tokens))) (gamma (string-to-number (nth 4 tokens)))) (print (list tokens alpha beta gamma)) (cond ((> alpha 0.6) "Doh") ((> beta 0.6) "listening") ((> gamma 0.6) "Whistle") ("Knock")))))
以下为效果演示截图:
首先将训练好的板子插到电脑上, 然后运行上位机程序, 进入监听状态:
板子听到吹口哨等声音就会显示出来:
本期没有硬件变动.
- automl在试验算法和数据的时候非常好用, 但是如果想深度定制, 仍然需要软件开发工作.
- 机器学习很好玩儿, 但仍然不是万金油.
- qeexo安装 qeexo安装过程需要单独dfu-util, 还需要建立软连接, 客户端安装便利程度可能还需要提升.
https://github.com/picospuch/eetree-funpack-workshop/tree/phase-nine
后续继续学习AutoML, 这个配合主频较高的mcu还是很有用的, 可以让嵌入式应用更"智能"
最后,感谢硬禾学堂和得捷电子,让我接触到了st传感器开发板,让我能在业余时间参与更多有趣项目的学习,也感谢群的小伙伴提供很多种实现题目功能的思路,感谢大家一路的折腾与陪伴,谢谢!