本章節(jié)為 如何調(diào)用攝像頭進(jìn)行YOLO識別教程
-- 初始化攝像頭
參數(shù)1:攝像頭ID,從 0 開始
參數(shù)2:采集卡類型,0 表示 V4L2,1 表示 OpenCV
參數(shù)3:采集卡中心裁切分辨率
-- 將初始化結(jié)果存儲在 init_ok 變量中,初始化成功可能返回 true,失敗返回 false
local init_ok = CameraInit(0, 0, 320)
-- 打印攝像頭初始化的結(jié)果
print("Camera init:", init_ok)
-- 加載 YOLO 模型,傳入兩個參數(shù):模型文件路徑 "yolov5cs.rknn" 和模型標(biāo)簽總數(shù)
-- 將加載結(jié)果存儲在 ret_load 變量中,加載成功可能返回特定值,失敗返回錯誤碼
local ret_load = YoloLoadModel("yolov5cs.rknn", 2)
-- 打印 YOLO 模型加載的結(jié)果
print("YoloLoadModel:", ret_load)
-- 進(jìn)入一個無限循環(huán),持續(xù)進(jìn)行目標(biāo)檢測操作
while true do
-- 獲取攝像頭最新的方形幀圖像,將其存儲在 frame 變量中
local frame = CameraGetLatestFrameSquare()
-- 獲取當(dāng)前的微秒級時間戳,用于后續(xù)計算檢測時間
local nanoTime = getMicroTime()
-- 使用 YOLO 模型對獲取的圖像幀進(jìn)行目標(biāo)檢測,傳入三個參數(shù):圖像幀、置信度閾值 0.45、非極大值抑制閾值 0.25 和最大檢測目標(biāo)數(shù)量 100
-- 將檢測結(jié)果存儲在 results 變量中,結(jié)果是一個包含檢測到的目標(biāo)信息的表
local results = YoloDetectImg(frame, 0.45, 0.25, 100)
-- 再次獲取當(dāng)前的微秒級時間戳
local nanoTime2 = getMicroTime()
-- 計算目標(biāo)檢測所花費(fèi)的時間,單位為微秒
local nanoTime3 = nanoTime2 - nanoTime
-- 將檢測時間轉(zhuǎn)換為毫秒并打印出來
print("dt:", nanoTime3 / 1000)
-- 檢查是否檢測到目標(biāo),即 results 不為空且檢測到的目標(biāo)數(shù)量大于 0
if results and #results > 0 then
-- 遍歷檢測到的目標(biāo)列表
for i, det in ipairs(results) do
-- 從檢測結(jié)果中提取目標(biāo)的邊界框信息,x1 為邊界框左上角的 x 坐標(biāo)
local x1 = det.box_x
-- 從檢測結(jié)果中提取目標(biāo)的邊界框信息,y1 為邊界框左上角的 y 坐標(biāo)
local y1 = det.box_y
-- 從檢測結(jié)果中提取目標(biāo)的邊界框信息,x2 可能為邊界框的寬度
local x2 = det.box_w
-- 從檢測結(jié)果中提取目標(biāo)的邊界框信息,y2 可能為邊界框的高度
local y2 = det.box_h
-- 打印每個檢測到的目標(biāo)的相關(guān)信息,包括目標(biāo)序號、置信度、類別 ID 和邊界框坐標(biāo)
print(string.format("object[%d]: prop=%.3f, cls_id=%d, box=(%d,%d,%d,%d)",
i, det.prop, det.cls_id, x1, y1, x2, y2))
end
else
-- 如果沒有檢測到目標(biāo),打印提示信息
print("No objects detected")
end
-- 程序暫停 0.1 秒,避免過于頻繁地進(jìn)行檢測
sleep(0.1)
end
更多建議: