9、20分类实验
About 2 min
例程代码
import sensor, image, time, lcd
from maix import KPU
import gc
lcd.init() # 初始化LCD显示屏
sensor.reset() # 复位并初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 设置摄像头输出格式为 RGB565
sensor.set_framesize(sensor.QVGA) # 设置摄像头输出大小为 QVGA (320x240)
sensor.skip_frames(time = 1000) # 等待摄像头稳定
clock = time.clock() # 创建一个clock对象,用来计算帧率
#检测模型需要320*256图输入,这里初始化一个image
od_img = image.Image(size=(320,256))
obj_name = ("aeroplane","bicycle", "bird","boat","bottle","bus","car","cat","chair","cow","diningtable", "dog","horse", "motorbike","person","pottedplant", "sheep","sofa", "train", "tvmonitor")
anchor = (1.3221, 1.73145, 3.19275, 4.00944, 5.05587, 8.09892, 9.47112, 4.84053, 11.2364, 10.0071)
# 创建一个kpu对象
kpu = KPU()
print("ready load model")
# 加载模型
#kpu.load_kmodel(0x300000, 1536936)
kpu.load_kmodel("/sd/KPU/voc20_object_detect/voc20_detect.kmodel")
# yolo2初始化
kpu.init_yolo2(anchor, anchor_num=5, img_w=320, img_h=240, net_w=320 , net_h=256 ,layer_w=10 ,layer_h=8, threshold=0.5, nms_value=0.2, classes=20)
i = 0
while True:
i += 1
print("cnt :", i)
clock.tick() # 更新计算帧率的clock
img = sensor.snapshot() # 拍照,获取一张图像
a = od_img.draw_image(img, 0,0) # 将img图像写到od_img图像的坐标(0,0)位置处
od_img.pix_to_ai() # 对rgb565的image生成ai运算需要的r8g8b8格式存储
kpu.run_with_output(od_img) # 对输入图像进行kpu运算
dect = kpu.regionlayer_yolo2() # yolo2后处理
fps = clock.fps() # 获取帧率
# 画出框并显示物体类别
if len(dect) > 0:
print("dect:",dect)
for l in dect :
a = img.draw_rectangle(l[0],l[1],l[2],l[3], color=(0, 255, 0))
a = img.draw_string(l[0],l[1], obj_name[l[4]], color=(0, 255, 0), scale=1.5)
a = img.draw_string(0, 0, "%2.1ffps" %(fps), color=(0, 60, 128), scale=1.0)
lcd.display(img)
gc.collect()
# 创建的kpu对象去初始化,释放模型内存
kpu.deinit()
实验准备
- 请先将模型文件导入TF卡上,再将TF卡插入到K210模块的TF卡插槽上。具体操作步骤请参考:传输模型文件到TF卡。
- 可识别的物体包括:0.飞机、1.自行车、2.鸟、3.船、4.瓶子、5.公交车、6.小汽车、7.猫、8.椅子、9.奶牛、10.餐桌、11.狗、12.马、13.摩托车、14.人、15.盆栽、16.绵羊、17.沙发、18.火车、19.显示器。
准备其中任意一种物品。
- 可识别的物体包括:0.飞机、1.自行车、2.鸟、3.船、4.瓶子、5.公交车、6.小汽车、7.猫、8.椅子、9.奶牛、10.餐桌、11.狗、12.马、13.摩托车、14.人、15.盆栽、16.绵羊、17.沙发、18.火车、19.显示器。
- 通过usb线将K210与电脑连接。
- 打开CanMV IDE,执行上面的例程代码。
实验结果
- K210如果检测到模型中已训练的物体,会在图像上绘制绿色的矩形框框出识别到的物体位置并给出物体名称,并在图像左上角显示当前的帧率信息。
![](/assets/img/intelligence/K210/K210_6_12.png)
- 在IDE的串行终端打印物体检测结果。
![](/assets/img/intelligence/K210/K210_6_13.png)
例程代码讲解
略,详见例程代码注释。