目前魔方派3已经兼容树莓派官方的三款摄像头。下表显示了每个摄像头模块支持的分辨率:
分辨率 | 宽高比 | IMX477 | IMX708 | IMX219 |
---|---|---|---|---|
4056 x 3040 | 4:3 | 是 | 否 | 否 |
4608 x 2592 | 16:9 | 否 | 是 | 否 |
3280 x 2464 | 4:3 | 否 | 否 | 是 |
1920 x 1080 | 16:9 | 是 | 否 | 否 |
1632 x 1224 | 4:3 | 否 | 否 | 是 |
-
Raspberry Pi High Quality Camera(IMX477/M12 Mount)购买链接
在 魔方派3 QIM 官方演示中,IMX477 摄像头使用了 WS1053516 镜头。
-
Raspberry Pi Camera Module 2 (IMX219) 购买链接
备注
目前魔方派3暂时只支持标准版 Module 2 摄像头,不支持广角(Wide)、夜光(NoIR)版本。
-
Raspberry Pi Camera Module 3 (IMX708) 购买链接
备注
目前魔方派3暂时只支持标准版 Module 3 摄像头,不支持广角(Wide)、夜光(NoIR)版本。当前软件版本暂不支持 Module 3 摄像头的 AF 自动对焦功能。
1 摄像头排线安装
魔方派3支持的摄像头 FPC 为 22 pin,0.5mm 间距,厚度 0.3±0.05mm。可以兼容 树莓派 5 同规格摄像头FPC。
-
向上拉开连接器的锁扣部分:
-
插入 FPC,注意接触面朝向板内:
-
按下锁扣,确认 FPC 稳定没有松动:
2 摄像头使用方法
在魔方派3中可使用 gstreamer
命令对摄像头进行操作,操作前需输入下面命令对摄像头进行设置:
echo multiCameraLogicalXMLFile=kodiak_dc.xml > /var/cache/camera/camxoverridesettings.txt
echo enableNCSService=FALSE >> /var/cache/camera/camxoverridesettings.txt
可使用下面的命令关闭或打开摄像头相关的日志,执行完命令后重启设备生效
默认值:
logWarningMask:0xFFFFFFFFFFFFFFFF
logCoreCfgMask:0xFFFFFFFFFFFFFFFF
echo logWarningMask=0x00 >> /var/cache/camera/camxoverridesettings.txt
echo logCoreCfgMask=0x00 >> /var/cache/camera/camxoverridesettings.txt
可将摄像头插入,下图 13 和 14 处
如下为实物连接图:
注意
暂时无法支持两个 IMX708 4608x2592同时运行。
-
在魔方派3中使用下面命令测试单个摄像头全屏预览:
export XDG_RUNTIME_DIR=/dev/socket/weston export WAYLAND_DISPLAY=wayland-1 setprop persist.overlay.use_c2d_blit 2 gst-launch-1.0 -e qtiqmmfsrc camera=0 name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1,compression=ubwc ! queue ! waylandsink fullscreen=true async=true
预览结果如下图所示:
-
在魔方派3中使用下面命令测试两摄像头并发预览:
# 终端1 export XDG_RUNTIME_DIR=/dev/socket/weston export WAYLAND_DISPLAY=wayland-1 setprop persist.overlay.use_c2d_blit 2 gst-launch-1.0 -e qtiqmmfsrc camera=0 name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1,compression=ubwc ! queue ! waylandsink sync=false x=0 y=0 width=960 height=540 enable-last-sample=false # 终端2 export XDG_RUNTIME_DIR=/dev/socket/weston export WAYLAND_DISPLAY=wayland-1 setprop persist.overlay.use_c2d_blit 2 gst-launch-1.0 -e qtiqmmfsrc camera=1 name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1,compression=ubwc ! queue ! waylandsink sync=false x=960 y=540 width=960 height=540 enable-last-sample=false
预览结果如下图所示:
-
在魔方派3中使用下面命令测试两摄像头并发录像:
# 终端1: echo multiCameraLogicalXMLFile=kodiak_dc.xml > /var/cache/camera/camxoverridesettings.txt export XDG_RUNTIME_DIR=/dev/socket/weston export WAYLAND_DISPLAY=wayland-1 setprop persist.overlay.use_c2d_blit 2 gst-launch-1.0 -e qtiqmmfsrc camera=0 name=camsrc video_0::type=preview ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1,compression=ubwc,interlace-mode=progressive,colorimetry=bt601 ! queue ! v4l2h264enc capture-io-mode=5 output-io-mode=5 ! queue ! h264parse ! mp4mux ! queue ! filesink location="/opt/mux0.mp4" # 终端2: export XDG_RUNTIME_DIR=/dev/socket/weston export WAYLAND_DISPLAY=wayland-1 setprop persist.overlay.use_c2d_blit 2 gst-launch-1.0 -e qtiqmmfsrc camera=1 name=camsrc video_0::type=preview ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1,compression=ubwc,interlace-mode=progressive,colorimetry=bt601 ! queue ! v4l2h264enc capture-io-mode=5 output-io-mode=5 ! queue ! h264parse ! mp4mux ! queue ! filesink location="/opt/mux1.mp4"
录制完成后在 /opt 目录下有录制的视频文件,如下图:
-
在魔方派3中使用下面命令测试两摄像头并发录像加预览:
# 终端1 export XDG_RUNTIME_DIR=/dev/socket/weston export WAYLAND_DISPLAY=wayland-1 setprop persist.overlay.use_c2d_blit 2 gst-launch-1.0 -e qtiqmmfsrc camera=0 name=camsrc video_0::type=preview ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1,compression=ubwc,interlace-mode=progressive,colorimetry=bt601 ! queue ! v4l2h264enc capture-io-mode=5 output-io-mode=5 ! queue ! h264parse ! mp4mux ! queue ! filesink location="/opt/mux0.mp4" camsrc. ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1,compression=ubwc ! waylandsink sync=false x=0 y=0 width=960 height=540 enable-last-sample=false # 终端2 export XDG_RUNTIME_DIR=/dev/socket/weston export WAYLAND_DISPLAY=wayland-1 setprop persist.overlay.use_c2d_blit 2 gst-launch-1.0 -e qtiqmmfsrc camera=1 name=camsrc video_0::type=preview ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1,compression=ubwc,interlace-mode=progressive,colorimetry=bt601 ! queue ! v4l2h264enc capture-io-mode=5 output-io-mode=5 ! queue ! h264parse ! mp4mux ! queue ! filesink location="/opt/mux1.mp4" camsrc. ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1,compression=ubwc ! waylandsink sync=false x=960 y=540 width=960 height=540 enable-last-sample=false
录制完成后在 /opt 目录下有录制的视频文件:
预览结果如下:
-
在魔方派3中使用下面命令测试摄像头拍照:
export XDG_RUNTIME_DIR=/dev/socket/weston export WAYLAND_DISPLAY=wayland-1 setprop persist.overlay.use_c2d_blit 2 gst-pipeline-app -e qtiqmmfsrc name=camsrc camera=0 ! "image/jpeg,width=1920,height=1080,framerate=30/1" ! multifilesink location=/opt/0_frame%d.jpg max-files=1
执行上述命令后,会在终端输出如下 MENU,在 MENU 中输入 3,并按下 Enter 执行拍照指令。
##################################### MENU ##################################### ============================== Pipeline Controls ============================== (0) NULL : Set the pipeline into NULL state (1) READY : Set the pipeline into READY state (2) PAUSED : Set the pipeline into PAUSED state (3) PLAYING : Set the pipeline into PLAYING state ==================================== Other ==================================== (p) Plugin Mode : Choose a plugin which to control (q) Quit : Exit the application Choose an option: # 按下CTRL+C结束拍照
拍照完成后在 /opt 目录下有对应的 jpg 文件:
3 摄像头故障排除
如果摄像头无法显示或捕捉图像,请检查以下内容:
-
检查摄像头模块连接
请参阅 2.4.1 摄像头排线安装。
-
运行单流预览用例
export XDG_RUNTIME_DIR=/dev/socket/weston export WAYLAND_DISPLAY=wayland-1 setprop persist.overlay.use_c2d_blit 2 gst-launch-1.0 -e qtiqmmfsrc camera=0 name=camsrc ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1,compression=ubwc ! queue ! waylandsink sync=false x=1000 y=1000 width=960 height=540 enable-last-sample=false
-
使用以下命令收集日志
journalctl -f > /opt/log.txt
在日志中搜索 "probe success" 。Probe success 意味着摄像头模块已通电并响应 I2C 控制。如果特定传感器没有 "probe success" 日志,则可能是柔性电缆连接或摄像头模块的问题。
以下日志指示探测到一个 IMX477:
[ 80.645992] CAM_INFO: CAM-SENSOR: cam_sensor_driver_cmd: 939: Probe success,slot:7,slave_addr:0x34,sensor_id:0x477, is always on: 0
-
检查摄像头传感器驱动程序命令
使用
journalctl -f > /opt/log.txt
命令收集日志并搜索 "cam_sensor_driver_cmd" 。"CAM_START_DEV Success" 表示摄像头传感器流式传输开始。"CAM_STOP_DEV Success" 表示摄像头传感器流式传输停止。例如:start: [ 81.172814] CAM_INFO: CAM-SENSOR: cam_sensor_driver_cmd: 1129: CAM_START_DEV Success, sensor_id:0x477,sensor_slave_addr:0x34 stop: [ 88.905241] CAM_INFO: CAM-SENSOR: cam_sensor_driver_cmd: 1157: CAM_STOP_DEV Success, sensor_id:0x477,sensor_slave_addr:0x34
-
检查传感器流式传输
启用 CSID SOF/EOF IRQ 日志,随后执行摄像头出流命令
mount -o rw,remount /usr mount -t debugfs none /sys/kernel/debug/ echo 0x8 > /sys/module/camera/parameters/debug_mdl echo 3 >/sys/kernel/debug/camera_ife/ife_csid_debug echo 1 > /sys/kernel/tracing/tracing_on echo 1 > /sys/kernel/tracing/events/camera/cam_log_debug/enable echo 2 > /sys/module/camera/parameters/debug_type cat /sys/kernel/tracing/trace_pipe > trace.txt
捕获的日志有助于提供有关 SOF 和 EOF 的详细信息。在日志 "trace.txt" 中搜索 "irq_status_ipp"。BIT12(0x1000)表示 SOF 数据包,BIT9(0x200)表示 EOF 数据包。日志如下所示:
<idle>-0 [000] d.h1. 19287.546764: cam_log_debug: CAM_DBG: CAM-ISP: cam_ife_csid_irq: 4996: irq_status_ipp = 0x1110 cam-server-25604 [000] dNH.. 19287.561705: cam_log_debug: CAM_DBG: CAM-ISP: cam_ife_csid_irq: 4996: irq_status_ipp = 0xee8