M5Stack UnitV2 - 观察“小动物”M5stack BugC
M5Stack UnitV2 - 用于边缘计算的独立 AI 摄像头 (SSD202D) 检测 BugC的出现和stickC(低于0.9)
标签
嵌入式系统
AI
UnitV2
chinjeenin
更新2021-07-16
958

FgOoBCsF5kHzbxIiDD5_2QF7m0xp

产品描述
UnitV2是M5Stack推出的一款高效率的AI识别模块,专为, 采用Sigmstar SSD202D(集成双核Cortex-A7 1.2Ghz处理器)控制核心,集成128MB-DDR3内存,512MB NAND Flash, 1080P摄像头。内嵌Buildroot 嵌入式Linux操作系统,集成丰富的软硬件资源与开发工具,致力带给用户开箱即用,简洁高效的Ai开发体验。

实现功能
检测装了BugC hat的Stick C出现在摄像范围内、以及区别不带hat的Stick C(分辨率低于0.9)。一般的步骤就不再累赘,就那么几个地方点一下吧。

0、参考 https://docs.m5stack.com/en/unit/unitv2 相关流程, 用浏览器video steam 模式 右键截图30多张 放到 http://v-training.m5stack.com/build/index.html 上面训练, 下载训练好的模型 上传到UnitV2上面就可以用了。

1、因为手上刚好有m5stack 的 M5GO(esp32) 是https://docs.m5stack.com/en/core/face_kit 套装的主机,可以用来处理整理UnitV2输出的数据,同时配置MQTTclient 上传到云端IOT平台生成报表。 GO的代码就直接在Flow(https://flow.m5stack.com/)上面编辑。flow units里面同时新增了UnitV2作为模块,查了一下go的文档grove 接口 tx 21、 rx 22。

FlwuGiJ0MQghL9EpoSvxLT5Kg1sW

2、Flow里面因为自身限制,肯定没有裸写代码那么舒心,处理list的时候要比较小心index rang的问题;但是Flow基本功能都包括了可以直接开干。本身M5stack模块很丰富 mqtt 、espnow通讯协议方法。 所以我用JoyC 控制了一个BugC的移动, 代码也是在flow上写的,工程文件都在附件。

 

3、嵌入式的linux操作系统, Buildroot为UnitV2带来成熟的高级操作感,完整的fileSystem,远程ssh( 虽然ap模式 有待改善,但是如果熟悉linux的话还是很容易切换wifi 的),甚至自带zsh。

(凑个字数,复制一下交流群里面代码)

wpa_cli -i wlan0 << EOF

set_network 0 ssid "ssid"

set_network 0 key_mgmt WPA-PSK

set_network 0 psk "password"

enable_network 0

select_network 0

EOF

 

4、因为如果直接用自带的server,浏览器跑识别的话比较容易发热,自带感温程序会断了进程。所以基本上我自己会kill掉开机启动的python3 server.py。

killall -9 python3

5、从server_core.py里面,复制了serial和thread相关的代码到run.py,  把app.config['UPLOAD_FOLDER_MODELS'] 改成绝对路径 '/home/m5stack/payload/uploads/models/'

uploaded_model定义成自己上传model 的名字

在__main__ 里面直接就跑,当然 serial 那里发{function: 'object reconigation',args:['modelname']} 也是可以的
try:
process = subprocess.Popen(['/home/m5stack/payload/bin/object_recognition', '/home/m5stack/payload/uploads/models/' + uploaded_model], stdout=subprocess.PIPE, stdin=subprocess.PIPE, close_fds = True, bufsize = 1)
except:
logger.info('Wait for process to start')
pass

详细可以参考附件里面的代码。

Fn4ABlqZqU6AMJsXz_PdrAMTtbAf

6、 MQTT 服务用的是 https://iot.dfrobot.com.cn/ 一个topic 限制1000条 不过够用,可以手动清空数据, 我自己也试过直接在run.py里面跑mqtt。自己在unitv2里面 pip install paho-mqtt

from paho.mqtt import client as mqtt_client
 
client = mqtt_client.Client(client_id)
client.on_connect = on_connect
client.connect(broker, port)
client.publish(topic, ‘’)

FvBElVUUFvS2Z67pIeRCK-ziVmn5

临时改了一下代码, 0的意思是虽然有数据,但不是bugc,是stickC, 所以还是有数据发上来,这里2的话,那就是训练图片做得比较少,误以为stickC是bugC,当然他们相似率还是很高的。

 

遇到主要难题
1、 因为自带网卡的typeC口,比较方便ssh同时也是唯一入口了(在ap模块不完善、wifi没设置下),如果乱改了的话真找不到北,我自己就差点放弃,后来发现有通过MicroSD卡自带更新方法。

2、 Flow上面的list 操作缺append等等方法 list操作还是比较麻烦的, uart 那里write(bytes( 发json的话有点乱了。

3、发热问题其实毕竟是嵌入式的,还是要节省资源削减体量,不能跑太多进程。

4、自己的代码还需要改善一下延迟问题,本来想做一个追逐碰撞游戏,时间有限先交作业了。

 

未来计划和建议

1、希望厂方能够开源固件配置文件,毕竟国产的芯片便宜,是比较值得去再挖掘其潜能。

2、UnitV2相对于jetson nano 方便简单多了 ,能够给人更快地对整个ai边缘计算有个大概的了解 和整个流程认识,应该可以更容易推广到初中小学计算机课堂上和ai入门。

 

活动感想:非常感谢电子森林和M5Stack举办的这次活动,能够有机会接触到这样最新潮的高级成年人乐高。

附件下载
code.zip
团队介绍
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号