鹹魚K210體驗筆記—物體檢測
寫在前面:本人非專業人員,僅爲此類愛好者。分享一下新手在體驗K210的過程。入門踩坑(各種跳坑),希望大佬幫忙填上一二~。(所選設備都是K210。都想體驗一下。歡迎大佬指點。)因爲之前有些硬件使用基礎所以K210只使用視覺相關功能。
物體識別,是機器視覺裏面非常典型的應用。要實現的就是將一幅圖片裏面的各種物體檢測出來,然後跟已知模型做比較從而判斷物體是什麼。
構造函數
首先簡單介紹一下 K210 的 KPU。KPU 是 K210 內部一個神經網絡處理器,簡單來說就是 KPU 能加載和運行各種現成的 AI 算法模型,實現各種機器視 覺等功能。 MaixPy 中人臉識別本質是目標檢測,主要通過在 K210 的 KPU 上跑 YOLO(You Only Look Once)目標檢測算法來實現。我們來看一下 KPU 在 MaixPy 下的 用法。
import KPU as kpu
#常用的 KPU 模塊導入方法。
使用方法
函數 | 參數 |
---|---|
kpu.load(offset or file_path) | 加載模型。【offset】模型存放在 flash 的偏移量,如 0x300000;【file_path】模型在文件系統爲文件名,如“xxx.kmodel” |
kpu.init_yolo2(kpu_net,threshold,nms_value,anchor_num,anchor) | 初始化 yolo2 網絡;【kpu_net】kpu 網絡對象【threshold】概率閾值;【nms_value】box_iou 門限;【anchor_num】描點數;【anchor】描點參數與模型參數一致。 |
kpu.run_yolo2(kpu_net,image) | 運行 yolo2 網絡;【kpu_net】從 kpu_load()中返回的網絡對象;【image】從 sensor 中採集到的圖像 |
kpu.deinit(kpu_net) | 反初始化。【kpu_net】kpu 網絡對象 |
參考地址:https://maixpy.sipeed.com/zh/libs/Maix/kpu.html
請按照以下步驟解鎖物體識別(滑稽)
1.下載模型模型地址
下載
2.使用kflash漿把模型文件添加到開發板中,參數如下
3.下載成功就可以浪了
4.示例程序在01科技文件裏也有:路徑:示例程序——機器視覺——物體檢測。
5.導入代碼
#https://blog.sipeed.com/p/677.html (代碼地址)
import sensor,image,lcd,time
import KPU as kpu
lcd.init(freq=15000000)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(1) #攝像頭後置方式
sensor.run(1)
clock = time.clock()
#模型分類,按照 20class 順序
#“飛機”、“自行車”、“鳥”、“船”、“瓶子”、“公交車”、“汽車”、“貓”、“椅子”、“牛”、“餐桌”、
#“狗”、“馬”、“摩托車”、“人”、“土豆植物”、“羊”、“沙發”、“火車”、“電視監視器”
classes = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']
#需要將模型(20class.kfpkg)燒寫到 flash 的 0x500000 位置
task = kpu.load(0x500000)
anchor = (1.08, 1.19, 3.42, 4.41, 6.63, 11.38, 9.42, 5.11, 16.62, 10.52)
#初始化 yolo2 網絡,識別可信概率爲 0.5(50%)
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
while(True):
clock.tick()
img = sensor.snapshot()
code = kpu.run_yolo2(task, img)
print(clock.fps())
if code:
for i in code:
a=img.draw_rectangle(i.rect())
a = lcd.display(img)
for i in code:
lcd.draw_string(i.x(), i.y(), classes[i.classid()], lcd.RED, lcd.WHITE)
lcd.draw_string(i.x(), i.y()+12, '%f1.3'%i.value(), lcd.RED, lcd.WHITE)
else:
a = lcd.display(img)
a = kpu.deinit(task)
將代碼保存到開發板的boot.py;保存成功我們就可以不用連數據線了。放個電池就能運行了
實現效果
運行程序,準備 20class 裏面相關的物體圖片,可以看到 pyAI-K210 可以輕易地將相關物體識別出來。