智能送药小车(二)——K210物体检测,训练模型与部署


线上训练模型参考这篇: Maixhub模型训练平台整体流程
下面仅介绍利用Mx-yolov3训练模型并部署在k210上的整体流程。

采集图片

利用K210采集数据集
使用说明:插上合适的SD卡(最大32GB),采集不同类别图像时要在代码相应位置进行修改(有注释提示),程序运行后按下KEY会进行图像采集并存放在相应类别的文件夹中。

#import os
#print(os.listdir())

##import os
##os.remove("1.jpg")

from Maix import GPIO
from fpioa_manager import fm
import utime, sensor, image, lcd

# 自定义变量
KeyState = 0        # 按键中断标志位
PicName = 0         # 拍摄照片号
SetWindowing = (224, 224)  # 设置图片大小

# 注册 IO,高速 GPIO 口才有中断
fm.register(12, fm.fpioa.GPIO0)
fm.register(16, fm.fpioa.GPIOHS0)

#摄像头初始化
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(1) #摄像头后置方式
sensor.set_windowing(SetWindowing) # 设置图片大小
lcd.init() #LCD 初始化
clock = utime.clock()

# 初始化IO
LED_B = GPIO(GPIO.GPIO0, GPIO.OUT, value=1)
KEY = GPIO(GPIO.GPIOHS0, GPIO.IN, GPIO.PULL_UP)

# 按键中断回调函数
def fun(KEY):
    global KeyState
    utime.sleep_ms(10) #消除抖动
    # 当按键按下后
    if KEY.value() == 0:
        KeyState = 1

# 开启按键中断,下降沿触发
KEY.irq(fun, GPIO.IRQ_FALLING)

while True:
    clock.tick()

    img = sensor.snapshot()

    # 当按键按下,蓝灯闪烁,并存储照片
    if KeyState == 1:

        KeyState = 0

        LED_B.value(0)
        utime.sleep_ms(500)
        LED_B.value(1)

        # 修改目录“/sd/One”
        img.save("/sd/One" + str(PicName) + ".jpg")
        print(PicName, "CAPTURED!")
        PicName+=1

    lcd.display(img)
    #print(clock.fps())

LabelImg数据集标注

labelimg使用教程参考: 数据集制作——使用labelimg制作数据集

Mx-yolov3训练模型

我安装的是Mx-yolov3的3.0版本
链接:https://pan.baidu.com/s/1Gl3Qfw5s8LZuu2wc1GTITg 提取码:dvsf
使用教程参考的这一篇:MX-Yolov3本地训练模型的安装和使用

K210端物体检测代码

修改的时候注意以下几点:

  1. sensor.set_windowing((224, 224)) 和训练模型采集图片时保持一致
  2. classes 名称修改
  3. task = kpu.load(“/sd/model.kmodel”) 模型名称修改
  4. 网络参数修改成Mx-yolov3 计算出的anchor
import sensor,image,lcd,time
import KPU as kpu

#摄像头初始化
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224, 224))
sensor.set_vflip(1)  #摄像头后置方式

lcd.init() #LCD初始化

clock = time.clock()

#模型分类,按照20class顺序
classes = ['One', 'Two']

#下面语句需要将模型(20class.kfpkg)烧写到flash的 0x500000 位置
#task = kpu.load(0x500000)

#将模型放在SD卡中。
task = kpu.load("/sd/model.kmodel") #模型SD卡上

#网络参数
anchor = (3.0078, 1.1641, 3.5278, 1.3924, 3.7373, 1.5579, 4.2359, 1.6781, 4.4162, 1.89)

#初始化yolo2网络,识别可信概率为0.7(70%)
a = kpu.init_yolo2(task, 0.7, 0.3, 5, anchor)

while(True):

    clock.tick()

    img = sensor.snapshot()
    code = kpu.run_yolo2(task, img) #运行yolo2网络


    if code:
        for i in code:
            a=img.draw_rectangle(i.rect())
            a = lcd.display(img)

            lcd.draw_string(i.x(), i.y(), classes[i.classid()], lcd.RED, lcd.WHITE)
            lcd.draw_string(i.x(), i.y()+12, '%f1.3'%i.value(), lcd.RED, lcd.WHITE)
    else:
        a = lcd.display(img)

    print(clock.fps())#打印FPS
  • 10
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值