K210入门,模型训练+MaixPy调用模型
本人使用的是Maix Dock,不同开发板自行进行微调
模型训练
首先先去GITHUB上将yolo-for-k210项目转移到码云方便下载。
MaixPY
将训练好的模型转换成Kmodel后,去下载对应的固件,这里我使用的是官方的 maixpy_v0.5.0_22_g7ac6b09.bin 对应的下载链接在这里 →
在下载好固件后将固件和模型依次烧入到板子里我发现,板子是不能正常工作的所以这里将模型和固件打包到一个文件下成为一个新文件 (.kfpkg)
这里注意将kmodel的地址设置为0x300000,固件的地址设置为0x000000。然后将 .kfpkg 烧入到板子里。
然后打开MaixPY将下列代码放入工作区↓
from fpioa_manager import * from Maix import GPIO #从包 Maix 导入了 GPIO 这个类 import sensor,image,lcd,time #导入sensor、image、lcd、time模块 import KPU as kpu task = kpu.load(0x300000) #从flash或者系统文件中加载模型,这里为模型在 flash 中的偏移大小为:0x3000000 fm.register(board_info.LED_R, fm.fpioa.GPIO0) #把 fm.fpioa.GPIO0 注册到了 引脚 board_info.LED_R led_r=GPIO(GPIO.GPIO0, GPIO.OUT) #把GPIO0设置成输出 lcd.init(freq=15000000) #初始化LCD(freq为SPI通信速率) sensor.reset() #初始化单目摄像头 sensor.set_pixformat(sensor.RGB565) #设置帧格式 sensor.set_framesize(sensor.QVGA) #设置帧大小 sensor.set_hmirror(1) #开启水平镜像 sensor.set_vflip(1) #开启垂直镜像 sensor.set_windowing((224, 224)) sensor.set_brightness(2) #设置亮度(范围为[-2~2]) #sensor.set_contrast(-1) #设置对比度(范围为[-2,+2]) #sensor.set_auto_gain(1,2) #设置摄像自动增益模式 sensor.run(1) #图像捕捉控制(1:开始捕捉;0:关闭捕捉) clock = time.clock() #获取clock对象 classes = [huanxiong] anchor = (1, 1.2, 2, 3, 4, 3, 6, 4, 5, 6.5) a = kpu.init_yolo2(task, 0.17, 0.3, 5, anchor) #为yolov2网络模型传入初始化参数 #(task, 0.17, 0.3, 5, anchor)分别为 kpu网络对象、概率阙值、box_iou门限、锚点数、锚点参数与模型参数一致 while(True): clock.tick() #记录开始时间(ms) img = sensor.snapshot() #使用摄像头拍摄一张照片 #lcd.display(img) #在液晶屏上显示一张 image code = kpu.run_yolo2(task, img) #task为 kpu_load 返回的 kpu_net 对象 #img为从sensor 采集到的图像 #run_yolo2返回的值为kpu_yolo2_find 的列表 print("FPS当前为:",clock.fps()) #clock.fps于clock.tick搭配使用计算帧率 if code: for i in code: a=img.draw_rectangle(i.rect()) #在图像上绘制一个矩形。此处为作为元组传递回坐标框出矩形 #传回的是检测到的图像的四个坐标 a = lcd.display(img) #在液晶屏上显示被框框框起来的image led_r.value(0) #如果检测到物体就亮LED灯 print("物体是:",classes[i.classid()])#打印出识别的类别 print("概率为:",100.00*i.value())#打印出置信度 for i in code: lcd.draw_string(i.x(), i.y(), classes[i.classid()], lcd.RED, lcd.WHITE) #在左上角打印出id lcd.draw_string(i.x(), i.y()+12, %f1.3%i.value(), lcd.RED, lcd.WHITE) #在左上角打印出置信度 else: a = lcd.display(img) #如果没有识别出物体,则继续呈现图像 led_r.value(1) #如果没有检测到物体就灭LED灯 a = kpu.deinit(task) #反初始化。kpu_load 返回 kpu_net 对象
这里加上了控制板子上的LED灯代码,实现识别到图像LED亮灯,没识别到图片LED灯灭的功能,后期可以再拓展为识别到图像通过wifi与上位机进行通讯。
识别到目标: 没识别到目标: 后期模型的识别精度还可以调整,或者使用YOLOV4或者更优秀的模型。
上一篇:
JS实现多线程数据分片下载
下一篇:
反欺诈分析研判平台构建思路