目录
导包:
import sensor,lcd,time
import KPU as kpu
KPU库
'''
初始化 yolo2 网络;
【kpu_net】kpu 网络对象, 即加载的模型对象, KPU.load()的返回值
【threshold】概率阈值, 只有是这个物体的概率大于这个值才会输出结果, 取值范围:[0, 1]
【nms_value】box_iou 门限;
【anchor_num】描点数;
【anchor】锚点参数与模型参数一致,同一个模型这个参数是固定的,和模型绑定的(训练模型时即确定了), 不能改成其它值。
返回值:
bool类型, 是否成功
'''
kpu.init_yolo2(kpu_net,threshold,nms_value,anchor_num,anchor)
'''
参数:
offset 和 file_path 参数只能二选一,不需要关键词,直接传参即可
offset: 模型在 flash 中的偏移大小,如 0xd00000 表示模型烧录在13M起始的地方, 0x300000表示在 Flash 3M的地方
file_path: 模型在文件系统中为文件名, 如 “/sd/xxx.kmodel”
返回:
如果正确加载,会返回返回值, 否则会抛出错误, 请看抛出的错误提示, 另外错误代码参考这里
如果发现错误代码是小于 2000 的值, 则是固件版本太低,需要更新固件版本
'''
KPU.load(offset, file_path)
'''
运行 yolo2 网络;
【kpu_net】从 kpu_load()中返回的网络对象;
【image】从 sensor 中采集到的图像
返回值:
list: kpu_yolo2_find 的列表
'''
kpu.run_yolo2(kpu_net,image)
'''
反初始化。
【kpu_net】kpu 网络对象;
'''
kpu.deinit(kpu_net)
部署模型
例程1
例程思路
'''
main.py
人脸检测
'''
import sensor,lcd,time
import KPU as kpu
#设置摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
#sensor.set_vflip(1) #设置摄像头后置
lcd.init() #LCD初始化
clock = time.clock()
#task = kpu.load(0x300000) #需要将模型(face.kfpkg)烧写到flash的 0x300000 位置
task = kpu.load("/sd/facedetect.kmodel") #模型SD卡上
#模型描参数
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
#初始化yolo2网络
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
while(True):
clock.tick()
img = sensor.snapshot()
code = kpu.run_yolo2(task, img) #运行yolo2网络
#识别到人脸就画矩形表示
if code:
for i in code:
print(i)
b = img.draw_rectangle(i.rect())
#LCD显示
lcd.display(img)
print(clock.fps()) #打印FPS
测试图片
例程2
'''
main.py
用按键转换前后摄像头
'''
import sensor,lcd,time
import KPU as kpu
from Maix import GPIO
from fpioa_manager import fm
flag=1
#配置引脚
fm.register(16,fm.fpioa.GPIO0) #注册引脚
key=GPIO(GPIO.GPIO0,GPIO.IN)
#设置摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(flag) #设置摄像头后置
lcd.init() #LCD初始化
clock = time.clock()
#task = kpu.load(0x300000) #需要将模型(face.kfpkg)烧写到flash的 0x300000 位置
task = kpu.load("/sd/facedetect.kmodel") #模型SD卡上
#模型描参数
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
#初始化yolo2网络
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
while(True):
clock.tick()
if key.value()==0:
while key.value()==0:
pass
if flag==1:
flag=0 #摄像头前置
elif flag==0:
flag=1 #摄像头后置
sensor.set_vflip(flag) #转换摄像头
img = sensor.snapshot()
code = kpu.run_yolo2(task, img) #运行yolo2网络
#识别到人脸就画矩形表示
if code:
for i in code:
print(i)
b = img.draw_rectangle(i.rect(),thickness=2)
img.draw_string(i.x()+5,i.y(),'face',color=(255,255,255),scale=2,mono_space=False)
#LCD显示
lcd.display(img)
print(clock.fps()) #打印FPS