调用摄像头使用Yolo识别物品
本章节为 如何调用摄像头进行YOLO识别教程
-- 初始化摄像头
参数1:摄像头ID,从 0 开始
参数2:采集卡类型,0 表示 V4L2,1 表示 OpenCV
参数3:采集卡中心裁切分辨率
-- 将初始化结果存储在 init_ok 变量中,初始化成功可能返回 true,失败返回 false
local init_ok = CameraInit(0, 0, 320)
-- 打印摄像头初始化的结果
print("Camera init:", init_ok)
-- 加载 YOLO 模型,传入两个参数:模型文件路径 "yolov5cs.rknn" 和模型标签总数
-- 将加载结果存储在 ret_load 变量中,加载成功可能返回特定值,失败返回错误码
local ret_load = YoloLoadModel("yolov5cs.rknn", 2)
-- 打印 YOLO 模型加载的结果
print("YoloLoadModel:", ret_load)
-- 进入一个无限循环,持续进行目标检测操作
while true do
-- 获取摄像头最新的方形帧图像,将其存储在 frame 变量中
local frame = CameraGetLatestFrameSquare()
-- 获取当前的微秒级时间戳,用于后续计算检测时间
local nanoTime = getMicroTime()
-- 使用 YOLO 模型对获取的图像帧进行目标检测,传入三个参数:图像帧、置信度阈值 0.45、非极大值抑制阈值 0.25 和最大检测目标数量 100
-- 将检测结果存储在 results 变量中,结果是一个包含检测到的目标信息的表
local results = YoloDetectImg(frame, 0.45, 0.25, 100)
-- 再次获取当前的微秒级时间戳
local nanoTime2 = getMicroTime()
-- 计算目标检测所花费的时间,单位为微秒
local nanoTime3 = nanoTime2 - nanoTime
-- 将检测时间转换为毫秒并打印出来
print("dt:", nanoTime3 / 1000)
-- 检查是否检测到目标,即 results 不为空且检测到的目标数量大于 0
if results and #results > 0 then
-- 遍历检测到的目标列表
for i, det in ipairs(results) do
-- 从检测结果中提取目标的边界框信息,x1 为边界框左上角的 x 坐标
local x1 = det.box_x
-- 从检测结果中提取目标的边界框信息,y1 为边界框左上角的 y 坐标
local y1 = det.box_y
-- 从检测结果中提取目标的边界框信息,x2 可能为边界框的宽度
local x2 = det.box_w
-- 从检测结果中提取目标的边界框信息,y2 可能为边界框的高度
local y2 = det.box_h
-- 打印每个检测到的目标的相关信息,包括目标序号、置信度、类别 ID 和边界框坐标
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
-- 如果没有检测到目标,打印提示信息
print("No objects detected")
end
-- 程序暂停 0.1 秒,避免过于频繁地进行检测
sleep(0.1)
end