本项目在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中去,如下图所示:
基于勘智K210的人脸检测模型的部署与优化,LCD屏幕画分割检测线并显示FPS_机器学习
在使用的时候,有几个注意的的小点,波特率需要使用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) #模型推理结束

以下就是串口终端输出的人脸检测信息;

基于勘智K210的人脸检测模型的部署与优化,LCD屏幕画分割检测线并显示FPS_人脸识别_02

屏幕显示的图像如下图所示:

基于勘智K210的人脸检测模型的部署与优化,LCD屏幕画分割检测线并显示FPS_深度学习_03

由于这是上位机的IDE的图像,通过USB的端口进行图传,数据会有延迟,因此会出现一些重影与跳帧。14.4fps的速度已经相当的快了。

这是边缘计算方向的第一次分享~下一次我们继续,

博主的微信公众号:

AI学习经历分享

参考代码来源:
1.https://github.com/sipeed/MaixPy_scripts