- M5Stack Unit2硬件介绍及实现的功能
1.1M5Stack Unit2硬件介绍
M5Stack UnitV2是一款用于边缘计算的独立 AI 摄像头 ,其控制核心采用的是Sigmstar SSD202D,集成128MB-DDR3内存,512MB NAND Flash, 外加一个1080P摄像头,内嵌Linux系统,集成丰富的软硬件资源与开发工具,真正做到降低学习门槛开箱即用。
1.2M5Stack Unit2实现功能
利用M5Stack UnitV2 摄像头实现识别宿舍出入人员是否有正常佩戴口罩,发现异常立即报警,并将每日的数据上传到PC端,生成报表。
- 实现思路及实现功能的具体介绍
2.1获取训练模型
M5Stack提供了在线的训练模型和工具V-Training在线训练平台,将准备好的数据集到的图片上至传训练平台,然后对每一张照片都进行标记标好对应的标签,由官方提供的平台进行训练,最后得到一个模型文件,上传到AI摄像头即可使用。(http://v-training.m5stack.com/build/index.html)
2.2使用训练模型
模型的使用。有了训练好的模型,上传到AI摄像头运行后,每当摄像头中出现戴口罩或者不带口罩的人脸时就能得到这样一个json字符串
{'num': 1, 'obj': [{'prob': 0.913268149, 'x': 101, 'y': 31, 'w': 245, 'h': 313, 'type': 'nonmask'}], 'running': 'Object Recognition'}
这样就可以进一步处理json数据来实现任务要求。
2.3上传数据
AI摄像头与电脑连接是使用数据线,供电的同时,还作为一个网卡可以与linux通过ssh通讯。所以我们需要给摄像头配置一个WIFI使其能联通互联网,将采集到的数据上传至阿里云的IOT平台。
2.4摄像头联网
使用wpa_cli 命令进行配网,配网步骤如下:
① 查询附近的热点,使用命令:
wpa_cli -i wlan0 scan
wpa_cli -i wlan0 scan_results
找到需要配置的WiFi。
② 将WiFi 信息配置到wpa_supplicant.conf 文件
使用命令wpa_passphrase SSID PSK >> /etc/wpa_supplicant.conf 将WiFi 信息写wpa_supplicant.conf 文件, 写入后,使用wpa_cli 命令配网。
③增加一个网络id:wpa_cli -i wlan0 add_network
④配置WiFi 热点的名称ssid:wpa_cli -i wlan0 set_network 网络编号 ssid '"WiFi 名称"'
配置WiFi 热点的密码psk:wpa_cli -i wlan0 set_network 网络编号 psk '"密码"'
⑤查看网络列表:wpa_cli -i wlan0 list_network
⑥选择网络:使用list_network 命令,会打印所有已添加成功的WiFi 热点,如果有多个WiFi 热点,可以使用select_network 命令选择使用哪个热点,可实现WiFi 热点的切换。wpa_cli -i wlan0 select_network 网络编号
⑦获取动态IP:udhcpc -i wlan0 -q
⑧使用ping 命令测试是否能够连接百度
WiFi 配置完成
2.5连接阿里云IOT平台
首先在阿里云iot后台获取的三元素,配置topic列表
# 三元素(iot后台获取)
ProductKey = 'a1Z9lcu6nKe'
DeviceName = 'AIcamera3'
DeviceSecret = "7b6aeac7914db529c030c9a662035775"
# topic (iot后台获取)
POST = '/sys/a1Z9lcu6nKe/AIcamera3/thing/event/property/post' # 上报消息到云
POST_REPLY = '/sys/a1Z9lcu6nKe/AIcamera3/thing/event/property/post_reply'
SET = '/sys/a1Z9lcu6nKe/AIcamera3/thing/service/property/set' # 订阅云端指令
# 消息回调(云端下发消息的回调函数)
def on_message(client, userdata, msg):
#print(msg.payload)
Msg = json.loads(msg.payload)
switch = Msg['params']['PowerLed']
print(msg.payload) # 开关值
#连接回调(与阿里云建立链接后的回调函数)
def on_connect(client, userdata, flags, rc):
pass
# 链接信息
Server,ClientId,userNmae,Password = aliLink.linkiot(DeviceName,ProductKey,DeviceSecret)
# mqtt链接
mqtt = mqttd.MQTT(Server,ClientId,userNmae,Password)
mqtt.subscribe(SET) # 订阅服务器下发消息topic
mqtt.begin(on_message,on_connect)
2.6处理json数据实现口罩识别
while 1:
timeCount += 1
doc = json.loads(reconizer.stdout.readline().decode('utf-8'))
print(doc)
if 'num' in doc:
for obj in doc['obj']:
if obj['prob'] > 0.55:
if obj['type'] == 'nonmask':
nonmask += 1
peopleCount += 1
control_white_led(0)
elif obj['type'] == 'mask':
mask += 1
peopleCount += 1
control_white_led(1)
2.7数据上传
# 构建与云端模型一致的消息结构
if timeCount >10:
timeCount = 0
updateMsn = {
'PeopleCount':peopleCount,
'nonmask':nonmask,
'mask':mask,
}
JsonUpdataMsn = aliLink.Alink(updateMsn)
print(JsonUpdataMsn)
mqtt.push(POST,JsonUpdataMsn) # 定时向阿里云IOT推送我们构建好的Alink协议数据
2.8生成数据报表
使用阿里云的IOT studio中进行数据显示。
- 遇到的主要难题
不会给摄像头联网,尝试使用python中webdriver爬取网页数据成功但是不会上传至物联网平台。
当摄像头温度较高时出现运行卡顿现象。
- 可编译下载的代码