Unit-v+M5Stack 体验深度学习与目标检测-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3246|回复: 5

Unit-v+M5Stack 体验深度学习与目标检测

[复制链接]
发表于 2020-3-8 23:51 | 显示全部楼层 |阅读模式
【故事】
    Unit-v检测到目标小球,将坐标传给M5Stack,屏幕上显示小球的坐标,从而 体验深度学习与目标检测。
☞☞☞点击此处观看效果视频

core3a.jpg
【硬件】
UNIT-V
M5STACK core


【软件】
Maixpy 0.24
UIFLOW 1.4.5


[接线]
UNIT-V 的grove输出,core端,16=rx   17=tx


【模型训练】
详见https://www.arduino.cn/thread-94433-1-1.html


【代码】
V侧
[mw_shl_code=python,true]#======2020-03-08 unitv识别小球目标,uart传回坐标
import image
#import lcd
import sensor
import sys
import time
import KPU as kpu
from fpioa_manager import *
import math
import KPU as kpu
from Maix import GPIO
import utime

#===========uart init
fm.register(34,fm.fpioa.UART1_TX)
fm.register(35,fm.fpioa.UART1_RX)
uart_out = UART(UART.UART1, 115200, 8, None, 1, timeout=1000, read_buf_len=4096)

#载入已训练模型
task=kpu.load(0x00300000)
#只有一个目标小球,1即为小球
labels=["1"] #You can check the numbers here to real names.
anchor = (0.33340788 * 16, 0.70065861 * 16, 0.18124964 * 16,0.38986752 * 16, 0.08497349 * 16,0.1527057 * 16)
a = kpu.init_yolo2(task, 0.05, 0.05, 3, anchor)
#注:第一个是兴趣框的精确度的阈值
#第二个参数,是目标的精确度的阈值,v-train发回0.2,现在是0.05,调高了就会更可靠,但是可能识别率低
#调低了,容易识别到,但是也同时容易误识别。

print("Load Done.")
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((320, 224))
sensor.run(1)

print("Init Done.")

counter = 1 #计数器
code_stake = [] #识别集合

ball_x = 0 #ball的x坐标
ball_y = 0 #ball的y坐标

while(True):
    img = sensor.snapshot()
    code = kpu.run_yolo2(task, img)

    if code:
        if counter < 3: #累计3次识别,将识别结果累加到code_stake[]当中
            code_stake = code_stake + code
            counter = counter  + 1
        else:
            counter = 0
            ball_x = 0
            ball_y = 0
            #注:i.rect()[0]   i.rect()[1]    i.rect()[2]    i.rect()[3]   分别是兴趣框的x,y,w,h
            for i in code_stake:
                ball_x=i.x()
                #ball_x=i.rect()[0]
                ball_y=i.y()
                #ball_y=i.rect()[1]


        if counter == 0: #3次识别完毕
            #发送数据至uart
            #==== send json str for ball_x and ball_y  四舍五入 round()
            #s_json="{\"ball_x\":\""+str(round(ball_x))+"\",\"ball_y\":\""+str(round(ball_y))+"\"}"
            s_json="{\"ball_x\":"+str(round(ball_x))+",\"ball_y\":"+str(round(ball_y))+"}"
            uart_out.write(s_json+"\r\n")
            print(s_json)
            code_stake = [] #识别集清零
            utime.sleep_ms(50)  #此延时不宜过低
        for i in code: #在屏幕上标记兴趣框和原点
            img.draw_rectangle(i.rect())

    else:
        #lcd.display(img)
        pass
a = kpu.deinit(task)
[/mw_shl_code]


core侧
[mw_shl_code=python,true]from m5stack import *
from m5ui import *
from uiflow import *
import json


setScreenColor(0x222222)



#rectangle0 = M5Rect(40, 5, 200, 170, 0xFFFFFF, 0xFFFFFF)
label1 = M5TextBox(39, 10, "Text", lcd.FONT_Default,0xFFFFFF, rotate=0)
label2 = M5TextBox(231, 12, "Text", lcd.FONT_Default,0xFFFFFF, rotate=0)
circle0 = M5Circle(81, 144, 10, 0xfdd708, 0xFFFFFF)

uart = None
dict2 = None
data1 = None
atom_x = None
atom_y = None



uart = machine.UART(1, tx=17, rx=16)
uart.init(115200, bits=8, parity=None, stop=1)
while True:
   
  if uart.any():
      dict2 = uart.readline()
      data1 = json.loads(dict2)
      atom_x=data1['ball_x']
      atom_y=data1['ball_y']
      label1.setText(str(atom_x))
      label2.setText(str(atom_y))
      circle0.setPosition((320-atom_x), (atom_y+20))[/mw_shl_code]



【小结】
这是深度学习的一次简单体验,没有小车驱动,也没有更炫目的特效,有一个新知识点,那就是UIFLOW的JSON解析
代码也非常简单:

snipaste_20200308_234320.png


【鸣谢】
    感谢arduino.cn和m5stack.com以及笑笑师兄的支持。
    明天复工,沧海合十,立此为念
【附件分享】其中的uiflow文件里面,关于uart.any()的判断,与代码不一致,以代码为准。
boot_unit_v.rar (3.38 KB, 下载次数: 8)
发表于 2020-3-9 01:26 来自手机 | 显示全部楼层
圈粉啦,每贴都很实用
 楼主| 发表于 2020-3-9 11:31 | 显示全部楼层
genvex 发表于 2020-3-9 01:26
圈粉啦,每贴都很实用

感谢支持,一切学习
发表于 2020-3-10 12:16 | 显示全部楼层
厉害了 楼主,谢谢分享
发表于 2020-4-11 19:19 | 显示全部楼层
沧海笑出品,必是精品!
 楼主| 发表于 2020-4-12 21:46 | 显示全部楼层
topdog 发表于 2020-4-11 19:19
沧海笑出品,必是精品!

谢谢师兄支持
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 00:53 , Processed in 0.112616 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表