本文档说明
确认 USB 摄像头已被开发板正确识别,找到正确的设备节点,并使用命令行工具进行快速预览验证。
插入摄像头
将 USB 摄像头插入开发板的 USB HOST 接口(任意一个均可)。
TIP
泰山派3M-RK3576 有 3 个 USB2.0 和 1 个 USB3.0(蓝色)接口。USB 摄像头通常为 USB2.0 设备,插 3.0 口也兼容。
确认设备识别
插入摄像头后,查看内核日志:
bash
dmesg | grep -i "usb\|uvc" | tail -201
识别成功的输出示例:
text
[ xxx] usb 1-1: new high-speed USB device number X using xhci-hcd
[ xxx] usb 1-1: New USB device found, idVendor=xxxx, idProduct=xxxx
[ xxx] usb 1-1: Product: Integrated Camera
[ xxx] uvcvideo: Found UVC 1.00 device Integrated Camera1
2
3
4
2
3
4
WARNING
如果没有任何 uvcvideo 相关输出,说明摄像头未被识别,请检查物理连接或尝试换一个 USB 口。
查找摄像头设备号
重要提示
RK3576 平台内置了多个视频处理单元(ISP、VPSS 等),会产生 70+ 个 /dev/video* 节点。USB 摄像头通常编号较大(如 73),不要被这些节点吓到。
一行命令获取(推荐)
bash
v4l2-ctl --list-devices | grep -A1 usb | grep /dev/video | head -11
输出如 /dev/video73,则设备号为 73。
v4l2-ctl 完整列表
先安装工具(如未安装):
bash
sudo apt install -y v4l-utils1
列出所有视频设备:
bash
v4l2-ctl --list-devices1
输出示例:
text
rkisp_mainpath (platform:rkisp-vir0):
/dev/video33
/dev/video34
...
Integrated Camera: Integrated C (usb-xhci-hcd.0.auto-1.1):
/dev/video73
/dev/video74
/dev/media91
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
| 标识 | 含义 |
|---|---|
(platform:rkisp-xxx) | RK3576 内置 ISP 节点,不是摄像头 |
(usb-xhci-hcd.x.auto-x.x) | USB 摄像头 |
第一个 /dev/videoX | 视频采集节点(用这个) |
第二个 /dev/videoX | 元数据节点(不用管) |
查看摄像头支持的格式
bash
v4l2-ctl -d /dev/video73 --list-formats-ext1
输出示例:
text
[0]: 'MJPG' (Motion-JPEG, compressed)
Size: Discrete 1280x720
Interval: Discrete 0.040s (25.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
[1]: 'YUYV' (YUYV 4:2:2)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
格式选择建议
- MJPG:压缩格式,带宽低,帧率高,推荐使用
- YUYV:原始格式,带宽高,USB2.0 下高分辨率帧率会很低
GStreamer 快速预览
不需要写代码,一行命令即可在屏幕上看到摄像头画面:
bash
DISPLAY=:0 gst-launch-1.0 \
v4l2src device=/dev/video73 \
! image/jpeg,width=1280,height=720,framerate=25/1 \
! jpegdec ! videoconvert \
! autovideosink sync=false1
2
3
4
5
2
3
4
5
屏幕上会弹出窗口显示实时画面,按 Ctrl+C 退出。
通过 ADB/SSH 运行时
必须在命令前加 DISPLAY=:0,否则报错 cannot open display。
自动检测脚本
创建一个自动检测 USB 摄像头的脚本,后续章节会用到:
bash
mkdir -p ~/opencv-test
cat > ~/opencv-test/find_camera.py << 'EOF'
#!/usr/bin/env python3
"""自动检测 USB 摄像头设备号"""
import subprocess
def find_usb_camera():
try:
result = subprocess.run(['v4l2-ctl', '--list-devices'],
capture_output=True, text=True, timeout=5)
lines = result.stdout.split('\n')
for i, line in enumerate(lines):
if 'usb' in line.lower():
for j in range(i + 1, len(lines)):
dl = lines[j].strip()
if dl.startswith('/dev/video'):
return dl
if dl == '':
break
except Exception:
pass
return None
if __name__ == "__main__":
device = find_usb_camera()
if device:
index = int(device.replace('/dev/video', ''))
print(f"USB Camera: {device} (index={index})")
else:
print("No USB camera found. Check connection.")
EOF
chmod +x ~/opencv-test/find_camera.py1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
运行验证:
bash
~/opencv-env/bin/python3 ~/opencv-test/find_camera.py1
本文档结束说明
- ✅ 通过 GStreamer 命令看到摄像头画面
- ✅ 知道了自己的设备号(如 73)
TIP
后续章节中所有代码的 DEVICE_INDEX = 73 都需要替换为实际设备号。