本项目在sipeed推出的maixpy平台上实现的demo效果,使用了一些maixpy的源码,进行改进。那咱们闲言少叙,直接进入正题。
人脸检测首先我们要选择yolo v2-tiny的模型,采集相应的数据进行数据集的制作,进行模型的训练,得到你的face.kmodel
我在这里使用的是sipeed的官方人脸检测,
附上模型的网址;
https://github.com/sipeed/MaixPy_scripts/tree/master/machine_vision/models 使用face.kfpkg 现在进入0x30000的硬件地址,同时烧录进入固件,
使用kflash_gui软件进型烧录flash中去,如下图所示:
在使用的时候,有几个注意的的小点,波特率需要使用115200,同时烧录模型文件与固件不能发生地址的交叉与重叠。
上位机中我们需要使用maix的IDE进行开发,
下面使用上位机代码:
import sensor #导入摄像头传感器
import image #导入图像处理的工具包
import lcd #导入LCD屏幕处理包
import KPU as kpu #导入kpu处理器
import time #导入时间处理包
lcd.init() #LCD屏幕初始化
sensor.reset() #摄像头重启
sensor.set_pixformat(sensor.RGB565) #彩色画面
sensor.set_framesize(sensor.QVGA)
sensor.run(1) #摄像头启动
task = kpu.load(0x300000) # you need put model(face.kfpkg) in flash at address 0x300000
#将face.kmodel放入0x300000的地址
# task = kpu.load("/sd/face.kmodel") #也可以放入sd卡进行加载
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
预选5个anchor的锚框的宽纵比
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
#初始化yolo的模型推理
clock = time.clock() #初始化时钟
while(True):
clock.tick() #开始时钟的计算时间
img = sensor.snapshot() #获取摄像头的图像
code = kpu.run_yolo2(task, img) #执行模型推理
if code:
for i in code:
print(i) #输出模型推理的结果的目标检测的结果
a = img.draw_rectangle(i.rect()) #标注矩形框
fps =clock.fps() #计算处理的视频帧数
a = lcd.display(img) #使用lcd屏幕进行展示
img.draw_string(2,2, ("%2.1ffps" %(fps)), color=(0,0,255), scale=2)#将fps在LCD屏幕上进行显示
#print(fps)
b = img.draw_line(0,120,320,120,color=(255,0,0)) #在屏幕中心绘制一条红线
lcd.display(img)
a = kpu.deinit(task) #模型推理结束
以下就是串口终端输出的人脸检测信息;
屏幕显示的图像如下图所示:
由于这是上位机的IDE的图像,通过USB的端口进行图传,数据会有延迟,因此会出现一些重影与跳帧。14.4fps的速度已经相当的快了。
这是边缘计算方向的第一次分享~下一次我们继续,
博主的微信公众号:
AI学习经历分享
参考代码来源:
1.https://github.com/sipeed/MaixPy_scripts