跳转至

摄像测试

摄像头是开发板的重要输入设备。通过本次测试,您可以快速确认:

  • 图像采集功能是否可用(拍照、预览、录像)
  • 基础图像质量是否合格(清晰度、色彩、光线适应)

MIPI 摄像头

硬件安装

摄像测试章节采用K7 作为操作示例,仅展示MIPI 摄像头接线细节,不同型号主板 MIPI 摄像接口位置不同,请根据规格书找到对应MIPI 摄像接口。

Warning

1. 禁止在通电状态下安装/拆卸摄像头!
2. 为更好展示接线细节,摄像头采用此摆放方式,实际使用中,请勿参考此摆放方式。

  • FPC 立式上拉接口:请勿直接将排线插入FPC接口,将接口处黑色模块向上拉动后接入排线,再次将黑色模块按下。

image-20260120162028182

  • FPC 翻盖式接口 : 请勿直接将排线插入FPC接口,将接口处黑色模块向上翻起后接入排线,再次将黑色模块按下。

image-20260526103427719

命令行测试

在Linux系统中,安装 v4l2-ctlGStreamer 进行摄像功能验证,v4l2-ctl 是 Linux 系统下专门用于控制和管理摄像头设备的命令行工具(快速检查摄像头是否被系统识别、调试图像参数、获取设备能力信息)。GStreamer 是一个多媒体处理框架,可以构建灵活的多媒体处理流水线(适用于视频功能测试、录像性能评估、流媒体应用开发验证)。

v4l2-ctl

v4l2-ctl 是 Linux 系统中控制 V4L2(Video4Linux2)视频设备的命令行工具,核心用于配置和查询摄像头、视频采集卡等设备参数。

安装工具

sudo apt update
sudo apt install v4l-utils

摄像头节点

  • 列举摄像头设备:
sudo v4l2-ctl --list-devices

操作示例:通过 rkisp_mainpath 可知有两个摄像头,一般操作对应的第一个设备 /dev/video33 和 /dev/video42。

root@linaro-alip:/#sudo v4l2-ctl --list-devices
...
rkisp_mainpath (platform:rkisp-vir0):
        /dev/video33
        /dev/video34
        /dev/video35
        /dev/video36
        /dev/video37
        /dev/video38
        /dev/video41
        /dev/media3

rkisp_mainpath (platform:rkisp-vir1):
        /dev/video42
        /dev/video43
        /dev/video44
        /dev/video45
        /dev/video46
        /dev/video47
        /dev/video50
        /dev/media4
...

摄像头信息

  • 查询制定摄像头节点支持的详细格式:
sudo v4l2-ctl --list-formats-ext --device=/dev/video*

操作示例:查看 /dev/video33 节点摄像头信息。

root@linaro-alip:/#sudo v4l2-ctl --list-formats-ext --device=/dev/video33
ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture Multiplanar

        [0]: 'UYVY' (UYVY 4:2:2)
                Size: Stepwise 32x32 - 3840x2160 with step 8/8
        [1]: 'NV16' (Y/UV 4:2:2)
                Size: Stepwise 32x32 - 3840x2160 with step 8/8
        [2]: 'NV61' (Y/VU 4:2:2)
                Size: Stepwise 32x32 - 3840x2160 with step 8/8
        [3]: 'NV21' (Y/VU 4:2:0)
                Size: Stepwise 32x32 - 3840x2160 with step 8/8
        [4]: 'NV12' (Y/UV 4:2:0)
                Size: Stepwise 32x32 - 3840x2160 with step 8/8
        [5]: 'NM21' (Y/VU 4:2:0 (N-C))
                Size: Stepwise 32x32 - 3840x2160 with step 8/8
        [6]: 'NM12' (Y/UV 4:2:0 (N-C))
                Size: Stepwise 32x32 - 3840x2160 with step 8/8

摄像头帧率

sudo v4l2-ctl -d /dev/video* \
 --set-fmt-video=width=1920,height=1080,pixelformat='MJPG' \
 --stream-mmap=4 \
 --set-selection=target=crop,flags=0,top=0,left=0,width=1920,height=1080 \
 --stream-count=500

操作示例:

root@linaro-alip:/#sudo v4l2-ctl -d /dev/video33 \
 --set-fmt-video=width=3840,height=2160\
 --stream-mmap=4 \
 --set-selection=target=crop,flags=0,top=0,left=0,width=3840,height=2160 \
 --stream-count=500
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<^C
root@linaro-alip:/#

Note

命令解析
1. v4l2-ctl -d /dev/video33
v4l2-ctl:Video4Linux2 控制工具,用于配置和控制 V4L2 兼容的视频设备。
-d /dev/video33:指定操作的视频设备为 /dev/video33
2. --set-fmt-video=width=1920,height=1080,pixelformat='MJPG':配置视频输出格式。
width=1920,height=1080:设置视频分辨率为 1920x1080(1080P)
pixelformat='MJPG':设置像素格式为 MJPEG( Motion JPEG,一种压缩格式)
3. --stream-mmap=4:启用内存映射(mmap)方式捕获视频流,=4 表示分配 4 个缓冲区用于流捕获(多缓冲区可以减少帧丢失)。
4. --set-selection=target=crop,flags=0,top=0,left=0,width=1920,height=1080 :设置视频裁剪区域。
target=crop:指定操作对象为裁剪区域。
flags=0:无特殊标志(默认)。
top=0,left=0,width=1920,height=1080:设置裁剪区域从左上角 (0,0) 开始,大小为 1920x1080(即使用完整画面,不裁剪)。
5. --stream-count=500:指定捕获的视频帧数为 500 帧,捕获完成后自动停止。

GStreamer

GStreamer 是一个跨平台、开源的多媒体框架,核心定位是「多媒体处理的 “管道(Pipeline)” 引擎」—— 它能将音频 / 视频的采集、编码、解码、过滤、传输、渲染等功能拆分成独立的「插件(Plugin)」,再通过灵活的 “管道” 组合,快速实现复杂的多媒体应用(比如视频播放、直播推流、音视频转码、摄像头采集等)。

安装工具

sudo apt update
sudo apt install gstreamer1.0-tools
sudo apt install gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly
sudo usermod -aG video $USER

命令行捕获图片

sudo gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video* ! jpegenc ! filesink location=picture.jpg

命令行预览

  • autovideosink 方式:
sudo gst-launch-1.0 v4l2src device=/dev/video* ! video/x-raw,format=NV12,width=800,height=600,framerate=30/1 ! videoconvert ! autovideosink
  • waylandsink 方式(gnome wayland 架构桌面使用该方式进行预览):
sudo gst-launch-1.0 v4l2src device=/dev/video* ! video/x-raw,width=1280,height=720,framerate=30/1 ! videoconvert ! waylandsink

操作示例

sudo gst-launch-1.0 v4l2src device=/dev/video33 ! video/x-raw,width=800,height=600,framerate=30/1 ! videoconvert ! waylandsink

Note

命令解析:
1. gst-launch-1.0:GStreamer 的命令行工具,用于快速构建和运行 GStreamer 管道。
2. v4l2src device=/dev/video33
v4l2src:视频 4Linux2 源元件,用于从符合 V4L2 标准的视频设备(如摄像头)捕获数据。
device=/dev/video33:指定要使用的视频设备文件,这里是 /dev/video33(不同设备的摄像头编号可能不同)。
3. video/x-raw,format=NV12,width=800,height=600,framerate=30/1:用于指定视频格式。
video/x-raw:表示原始未压缩视频。
format=NV12:视频像素格式为 NV12(一种常见的 YUV 格式,适合硬件加速)。
width=800,height=600:视频分辨率为 800x600。
framerate=30/1:帧率为 30 帧 / 秒。
4. videoconvert:视频格式转换元件,用于将输入视频格式转换为后续元件支持的格式(这里主要是为了适配显示元件的需求)。
5. autovideosink:自动选择合适的视频输出元件,会根据系统环境自动选择最佳的视频显示方式(如 X11、Wayland 或直接渲染等)。

USB 摄像头

  • 检查USB摄像头设备结点
ls /dev/video*
/dev/video-dec0  /dev/video-enc0  /dev/video0  /dev/video1  /dev/video2
  • 使用ffmpeg 打开摄像头
sudo apt install ffmpeg 
ffplay -f v4l2 -i /dev/video* 

操作示例:

ffplay -f v4l2 -i /dev/video1