调用摄像头使用Yolo识别物品

2025-04-20 19:18 更新

本章节为 如何调用摄像头进行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
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号