1. 摄像头选型与接口:USB、CSI、IP 摄像头怎么选?
做嵌入式视觉,第一步就是选摄像头。这事儿看着简单,其实坑不少。我刚开始带项目时,就因为在选型上拍脑袋,结果后面调试折腾了两周。今天咱们把三种主流接口的摄像头掰开揉碎聊清楚。
1.1 USB 摄像头:即插即用,但别太当真
USB 摄像头,说白了就是电脑摄像头那套东西。UVC 协议(USB Video Class)让它在 Linux 下直接认出来,/dev/video0 一挂,OpenCV 就能读。方便是真方便。
适用场景:
- 原型验证、快速 demo
- 帧率要求不高(30fps 以内)
- 分辨率 1080p 以下
- 开发板如树莓派、Jetson Nano 的临时测试
选型要点:
- 传感器型号:别只看像素。我见过标 1080p 的摄像头,实际用的是老旧的 OV2640,画质糊得不行。优先选 Sony IMX 系列或 OmniVision 的新款。
- 帧率:很多 USB 摄像头标 30fps,实际在 1080p 下只能跑 15fps。你得看小字——"MJPG 模式下 30fps,YUV 模式下 15fps"。嗯,这里要注意。
- USB 版本:USB 2.0 带宽 480Mbps,传 1080p@30fps 的 YUV 数据基本到顶了。想跑高帧率或高分辨率,得上 USB 3.0。
⚠️ 我曾经踩过的坑:用 USB 摄像头做工业检测,结果发现每隔几分钟画面会卡顿一下。查了半天,是 USB 控制器带宽被其他设备抢了。后来换了独立 USB 控制器才解决。所以,USB 摄像头不适合对实时性要求苛刻的场景。
1.2 CSI 摄像头:嵌入式视觉的"原配"
CSI(Camera Serial Interface)是直接连在 SoC 的 ISP(图像信号处理器)上的。说白了,它是为嵌入式平台量身定做的。数据不走 USB 总线,延迟低、带宽大。
适用场景:
- 需要低延迟(比如无人机、机器人视觉)
- 高帧率或高分辨率(比如 4K@30fps)
- 功耗敏感的设备(CSI 比 USB 省电)
- 量产产品(CSI 接口稳定,不受 USB 抖动影响)
选型要点:
- 接口兼容性:树莓派的 CSI 接口是 15-pin FPC,Jetson 的是 22-pin。别买错了。我有个同事买了个树莓派摄像头,想直接插 Jetson 上用,结果针脚定义不对,烧了摄像头。
- 传感器与 ISP 匹配:CSI 摄像头通常不带 ISP,或者只带简单的。图像处理全靠 SoC 的 ISP。你得确认 SoC 的 ISP 支持你的传感器。比如树莓派的 ISP 对 Sony IMX219 支持很好,但换了个老款传感器就可能出问题。
- 驱动支持:Linux 下 CSI 摄像头需要设备树(Device Tree)配置。我建议你买之前先查一下内核版本是否支持。否则你可能得自己写驱动——那可不是闹着玩的。
💡 我个人习惯:做量产项目时,优先选 CSI 摄像头。虽然前期调试麻烦点,但稳定性和性能都比 USB 强太多。你想想看,工业相机为什么都用 CSI 或 GMSL?道理是一样的。
1.3 IP 摄像头(RTSP):远距离监控的王者
IP 摄像头走网络,用 RTSP(Real Time Streaming Protocol)传视频流。它不依赖本地硬件,一根网线能拉几百米。这在安防领域是标配。
适用场景:
- 远程监控、安防
- 多摄像头组网(一个交换机带几十个摄像头)
- 已有网络基础设施的场景
- 需要 PoE 供电(一根网线解决数据和供电)
选型要点:
- 编码格式:H.264 是主流,H.265 更省带宽。但解码需要硬件支持。树莓派 4 的 GPU 支持 H.264 硬解,但 H.265 只能软解,CPU 直接拉满。你选型时得算好解码能力。
- RTSP 协议兼容性:不同厂家的 RTSP 实现有差异。海康的 RTSP 地址是
rtsp://[ip]:554/Streaming/Channels/101,大华的是rtsp://[ip]:554/cam/realmonitor?channel=1&subtype=0。我建议你买之前先拿 OpenCV 的VideoCapture试一下能不能连上。 - 延迟:IP 摄像头的延迟通常在 100ms-500ms。做实时控制?别想了。但做图像分析、事件检测,完全够用。
核心对比:三种接口怎么选?
| 特性 | USB 摄像头 | CSI 摄像头 | IP 摄像头 |
|---|---|---|---|
| 延迟 | 中(30-80ms) | 低(5-15ms) | 高(100-500ms) |
| 带宽 | 受 USB 控制器限制 | 高(专用 MIPI 通道) | 受网络带宽限制 |
| 距离 | 5 米以内 | 30 厘米以内 | 100 米以上 |
| 开发难度 | 低(UVC 免驱) | 中(需设备树配置) | 中(需处理网络协议) |
| 典型应用 | 原型验证、桌面应用 | 机器人、无人机、工业 | 安防、远程监控 |
1.4 实战建议:我一般怎么选?
做项目时,我通常按这个思路来:
- 先看距离:摄像头离处理器超过 1 米?直接上 IP 摄像头或 USB 延长线。CSI 就别想了,MIPI 信号传不远。
- 再看延迟要求:要做实时控制(比如无人机避障)?必须 CSI。做图像分析(比如人数统计)?USB 或 IP 都行。
- 最后看成本:USB 摄像头最便宜,几十块就能买到。CSI 摄像头稍贵,一百到几百。IP 摄像头最贵,但带 PoE 和外壳,适合室外。
举个例子。我之前做一个智能门禁项目,摄像头装在门口,处理器在室内。距离 5 米,延迟要求不高。我选了 IP 摄像头,一根网线搞定供电和数据传输。调试时发现 RTSP 流偶尔断连,后来加了心跳检测和自动重连机制才稳定下来。嗯,这就是实战中才会遇到的问题。
💡 一个小技巧:如果你不确定选哪种,可以先买一个 USB 摄像头做原型验证。等算法调通了,再换成 CSI 或 IP 摄像头做量产。这样风险最小。
好了,摄像头选型就聊到这儿。下一节咱们讲摄像头驱动配置和图像采集,到时候我会手把手教你用 Python 把摄像头数据读进来。