尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

07-摄像头实时推理:USB/CSI 摄像头帧读取 + 实时检测

07-摄像头实时推理:USB/CSI 摄像头帧读取 + 实时检测 摄像头实时推理:USB/CSI 摄像头帧读取 + 实时检测嵌入式端摄像头类型做嵌入式视觉,摄像头是第一道关。常见两类:USB 摄像头:插上就能用,免驱(UVC 协议),兼容性最好。缺点是走 USB 总线传输,帧率和分辨率有上限,在低端板子上可能受 USB 带宽影响。常见的比如罗技 C270、各种无牌子 USB 摄像头模组。CSI 摄像头:直接通过 MIPI CSI 接口连到 SoC,带宽高、延迟低。树莓派的官方摄像头模块就是 CSI 接口,瑞芯微 RK 平台也大量用 CSI 摄像头。缺点是配置复杂,需要驱动和设备树支持,不像 USB 那么傻瓜化。还有一种是网络摄像头(IP Camera),通过 RTSP/HTTP 传视频流。在工控和安防场景常见,但实时性受网络影响,这篇不展开。OpenCV VideoCapture 读取摄像头帧OpenCV 的VideoCapture是读取摄像头最通用的方式,不管 USB 还是 CSI 都能用。读取 USB 摄像头importcv2# 参数0表示第一个摄像头设备cap=cv2.VideoCapture(0)# 设置分辨率和帧率cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)cap.set(cv2.CAP_PROP_FPS,30)whileTrue:ret,frame=cap.read()ifnotret:print("读取失败")breakcv2.imshow('Camera',frame)ifcv2.waitKey(1)0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()这段代码在任何装了 OpenCV 的平台上都能跑。VideoCapture(0)里的 0 是设备索引,如果你插了多个 USB 摄像头,可以用 0、1、2 来区分。一个坑:CAP_PROP_FPS不一定生效你设置了 30FPS,但实际帧率可能只有 15FPS。原因很多:摄像头硬件不支持那个帧率、USB 带宽不够、cap.read()阻塞等待。解决方法是实际测一下帧率,别信设置值:importtime cap=cv2.VideoCapture(0)prev_time=time.time()frame_count=0whileTrue:ret,frame=cap.read()ifnotret:breakframe_count+=1ifframe_count%30==0:now=time.time()fps=30/(now-prev_time)
返回列表