产品描述
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。
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 的名字
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
详细可以参考附件里面的代码。
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, ‘’)
临时改了一下代码, 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举办的这次活动,能够有机会接触到这样最新潮的高级成年人乐高。