Line 34:
Line 34:
|MV系列
|MV系列
|MV-MIPI-IMX264M
|MV-MIPI-IMX264M
+
|完成
+
|-
+
|MV系列
+
|MV-MIPI-GMAX4002M
|完成
|完成
|-
|-
Line 46:
Line 50:
|RAW系列
|RAW系列
|RAW-MIPI-AR0234M
|RAW-MIPI-AR0234M
+
|完成
+
|-
+
|RAW系列
+
|RAW-MIPI-SC535M
|完成
|完成
|}
|}
+
<br />
+
=== 硬件准备及安装 ===
=== 硬件准备及安装 ===
Line 66:
Line 76:
[[File:ADP-MV1-MV-MIPI-X 07.jpg|center|thumb|800x800px|ADP-MV1 power supply]]
[[File:ADP-MV1-MV-MIPI-X 07.jpg|center|thumb|800x800px|ADP-MV1 power supply]]
<br />
<br />
−
+
===== 树莓派5 =====
+
二者使用15P转22P的FFC同面线连接,注意接触面安装方向。
+
{| class="wikitable"
+
!TOP
+
!BOTTOM
+
|-
+
|[[File:ADP-MV1 to RPI5.jpg|center|thumb|600x600px|ADP-MV1 to RPI5]]
+
|[[File:ADP-MV1 to RPI5 2.jpg|alt=|center|thumb|600x600px|ADP-MV1 to RPI5_2]]
+
|}<br />
===== 树莓派Model B和Model B+ =====
===== 树莓派Model B和Model B+ =====
二者使用1mm间距*15P的FFC异面线连接,注意接触面安装方向。
二者使用1mm间距*15P的FFC异面线连接,注意接触面安装方向。
Line 75:
Line 93:
二者使用15P转22P的FFC同面线连接,注意接触面安装方向。
二者使用15P转22P的FFC同面线连接,注意接触面安装方向。
[[File:MV-MIPI-X-RPI Z 01.jpg|center|thumb|800x800px|MV camera and Raspberry Pi zero connection]]<br />[[File:MV-MIPI-X-RPI IOB 03.jpg|center|thumb|800x800px|MV camera and Raspberry Pi CM4]]
[[File:MV-MIPI-X-RPI Z 01.jpg|center|thumb|800x800px|MV camera and Raspberry Pi zero connection]]<br />[[File:MV-MIPI-X-RPI IOB 03.jpg|center|thumb|800x800px|MV camera and Raspberry Pi CM4]]
+
[[File:CM5-MV-connect.jpg|center|thumb|800x800px|MV camera connect to CM5]]
<br />
<br />
==== RAW系列摄像头连接到树莓派 ====
==== RAW系列摄像头连接到树莓派 ====
+
+
===== 树莓派5 =====
+
RAW-MIPI-SC132M使用15to22pin同面FFC线,其他RAW系列相机使用22pin异面FFC线。
+
[[File:RAW CAM to RPI5.jpg|center|thumb|800x800px|RAW CAM to RPI5]]
+
<br />
===== 树莓派Model B和Model B+ =====
===== 树莓派Model B和Model B+ =====
Line 86:
Line 110:
RAW-MIPI-SC132M使用15to22pin同面FFC线,其他RAW系列相机使用22pin异面FFC线。
RAW-MIPI-SC132M使用15to22pin同面FFC线,其他RAW系列相机使用22pin异面FFC线。
[[File:RAW-MIPI-AR0234-RPI ZERO.jpg|center|thumb|800x800px|RAW-MIPI-AR0234-RPI ZERO]]
[[File:RAW-MIPI-AR0234-RPI ZERO.jpg|center|thumb|800x800px|RAW-MIPI-AR0234-RPI ZERO]]
−
+
[[File:CM5-RAW-connect.jpg|center|thumb|800x800px|RAW-MIPI-SC535M connect to CM5]]
+
<br />
=== piOS的配置 ===
=== piOS的配置 ===
具体安装树莓派系统方法请参考官方文档,详见:[https://www.raspberrypi.org/documentation/installation/ Install raspberrypi guide]。
具体安装树莓派系统方法请参考官方文档,详见:[https://www.raspberrypi.org/documentation/installation/ Install raspberrypi guide]。
Line 97:
Line 122:
建议启用树莓派系统的ssh服务及samba服务,这里不再赘述树莓派系统如何开启ssh和samba服务。
建议启用树莓派系统的ssh服务及samba服务,这里不再赘述树莓派系统如何开启ssh和samba服务。
−
=== Legacy模式和V4L2模式介绍 ===
+
=== V4L2模式和Legacy模式介绍 ===
−
这两个模式的区别,树莓派官网有详细的[https://www.raspberrypi.com/documentation/accessories/camera.html#libcamera-and-the-legacy-raspicam-camera-stack 介绍]。树莓派网站上提到的libcamera-stack模式与我们所说的V4L2模式架构上一致。
+
在最新的树莓派bookworm系统中,已经去掉了对Legacy模式的支持。建议客户使用V4L2模式。
+
+
==== libcamera以及V4L2模式 ====
+
现在piOS已全面切换为libcamera-stack模式。
+
+
libcamera-stack本质上以实现isp功能为核心,这点是MV系列相机不需要的。因此,我们采用了'''V4L2模式''',而不是使用libcamera-stack。
+
+
与libcamera-stack相同,我们的'''V4L2模式''',也实现了linux驱动层标准的V4L2驱动。基于此驱动,应用层可以直接开发程序获取图像并进行进一步处理。
==== Legacy模式 ====
==== Legacy模式 ====
Line 115:
Line 147:
由于两种工作模式不能共存,因此使用V4L2模式时需要关闭Legacy模式。
由于两种工作模式不能共存,因此使用V4L2模式时需要关闭Legacy模式。
+
=== V4L2模式用法 ===
+
我们在这个[https://github.com/veyeimaging/raspberrypi_v4l2 github仓库]保存了v4l2模式的代码。
−
==== libcamera以及V4L2模式 ====
+
====下载驱动包====
−
现在piOS已全面切换为libcamera-stack模式。
+
<code>wget <nowiki>https://github.com/veyeimaging/raspberrypi_v4l2/releases/latest/download/raspberrypi_v4l2.tgz</nowiki></code><code><nowiki/></code>
+
====安装驱动====
+
<code>tar -xzvf raspberrypi_v4l2.tgz</code>
−
libcamera-stack本质上以实现isp功能为核心,这点是MV系列相机不需要的。因此,我们采用了'''V4L2模式''',而不是使用libcamera-stack。
+
<code>cd raspberrypi_v4l2/release/</code>
−
与libcamera-stack相同,我们的'''V4L2模式''',也实现了linux驱动层标准的V4L2驱动。基于此驱动,应用层可以直接开发程序获取图像并进行进一步处理。
+
<code>chmod +x *</code>
−
=== 配置命令行全局变量 ===
+
* 对于树莓派5
−
为了后面描述方便,此处根据sensor尺寸,配置全局变量。
−
*MV-MIPI-IMX178M
+
<code>sudo ./install_driver_rpi5.sh veye_mvcam</code>
−
<code>export WIDTH=3088</code>
+
会在/boot/config.txt中安装CAM1和CAM0两个dtvoerlay。
−
<code>export HEIGHT=2064</code>
+
* 其他树莓派
−
<code>export FPS=22</code>
+
<code>sudo ./install_driver.sh veye_mvcam</code>
−
*MV-MIPI-SC130M
+
然后重启树莓派。
−
<code>export WIDTH=1280</code>
+
备注:如果提示无法找到对应版本的驱动,说明我们没有提供对应您的piOS版本编译后的驱动程序。请尝试从源码编译。
−
<code>export HEIGHT=1024</code>
+
===== mvcam使用4lane模式 =====
+
对于mvcam,默认的dtbo是2lane的,如需使用4lane模式,请先确认你的树莓派主板和相机都支持4lane。然后,请在驱动安装完成后,额外执行:
−
<code>export FPS=108</code>
+
<code>sudo cp driver_bin/$(uname -r)/veye_mvcam_4lane.dtbo /boot/overlays/veye_mvcam.dtbo</code>
+
+
====卸载驱动====
+
如需更换为Legacy模式,或者想要更换成其他摄像头模组型号的驱动,必须要先卸载现在的驱动。
−
* MV-MIPI-IMX296M
+
<code>sudo ./uninstall_driver.sh veye_mvcam</code>
+
====系统状态验证====
+
以MV-MIPI-IMX178M为例:
−
<code>export WIDTH=1440</code>
+
<code>dmesg | grep mvcam</code>
−
<code>export HEIGHT=1088</code>
+
可以看到linux启动阶段probe到的相机型号和以及相机的版本号:
−
<code>export FPS=60</code>
+
<code>camera is: MV-MIPI-IMX178M</code>
−
*MV-MIPI-IMX287M
+
<code>firmware version: 0x1080102</code>
−
<code>export WIDTH=704</code>
+
并且/dev/video0 节点存在,证明摄像头状态正常。
−
<code>export HEIGHT=544</code>
+
==== 状态检测并配置环境变量 ====
+
在[https://github.com/veyeimaging/raspberrypi_v4l2/tree/main/mv_tools_rpi 这里],我们提供了一个<code>mv_probe.sh</code>脚本,用于自动检测识别到的相机并将相机默认的型号、宽、高、帧率等信息配置到环境变量中。
−
<code>export FPS=319</code>
+
使用方法是:
−
*MV-MIPI-IMX265M
+
<code>source ./mv_probe.sh</code>
−
<code>export WIDTH=2048</code>
+
一个典型的输出如下:
−
<code>export HEIGHT=1544</code>
+
<code>$ source ./mv_probe.sh</code>
−
<code>export FPS=45</code>
+
<code>The mvcam driver is loaded on i2c-10, but the camera is not detected!</code>
−
*MV-MIPI-IMX264M
+
<code>Found veye_mvcam camera on i2c-11.</code>
−
<code>export WIDTH=2432</code>
+
<code>Setenv CAMERAMODEL = RAW-MIPI-SC535M</code>
+
+
<code>Setenv FPS = 49</code>
+
+
<code>Setenv WIDTH = 2432</code>
+
+
<code>Setenv HEIGHT = 2048</code>
+
+
可以通过 <code>echo $CAMERAMODEL</code>来验证环境变量的输出结果。注意,此环境变量只对当前会话有效。
−
<code>export HEIGHT=2056</code>
+
注意:此脚本需要mvcam的驱动版本大于等于1.1.06才可以支持。
−
<code>export FPS=28</code>
+
如你使用的驱动版本小于1.1.06,或者你希望使用不同于当前值的宽、高、帧率。请参考相机模组的手册,手动配置如下<code>WIDTH HEIGHT FPS</code>环境变量,否则可能导致后面的程序运行不正常。如:
−
*RAW-MIPI-SC132M
+
<code>export WIDTH=2432</code>
−
<code>export WIDTH=1024</code>
+
<code>export HEIGHT=2048</code>
−
<code>export HEIGHT=1280</code>
+
<code>export FPS=50</code>
+
==== 树莓派5的配置 ====
+
在树莓派5上,驱动程序现在使用media control API,我们必须先正确设置media graph。这包括正确设置media pad的格式并正确链接它们。
−
<code>export FPS=120</code>
+
我们提供了一系列脚本实现这个功能,保存在rpi5_scripts目录。
−
*RAW-MIPI-IMX462M
+
* ./find_entity.sh
−
<code>export WIDTH=1920</code>
+
<code>$ ./find_entity.sh</code>
−
<code>export HEIGHT=1088</code>
+
<code>Found mvcam @ i2c-4 entity on /dev/media3</code>
−
<code>export FPS=60</code>
+
<code>Plese get frame from /dev/video0 and use /dev/v4l-subdev2 for camera setting.</code>
−
*RAW-MIPI-AR0234M
+
<code>Found mvcam @ i2c-6 entity on /dev/media0</code>
−
<code>export WIDTH=1920</code>
+
<code>Plese get frame from /dev/video8 and use /dev/v4l-subdev5 for camera setting.</code>
−
<code>export HEIGHT=1200</code>
+
树莓派5重启之后,相机的media node,video node可能发生变化,因此,建议执行后续操作前执行<code>./find_entity.sh</code>以明确设备节点。
−
<code>export FPS=60</code>
+
上述提示信息中,可以看到系统插入了两个相机,以及每个相机的对应的设备节点。
−
=== V4L2模式用法 ===
+
−
我们在这个[https://github.com/veyeimaging/raspberrypi_v4l2 github仓库]保存了v4l2模式的代码。
+
<code>i2c-4</code>对应板子上的CAM1插口,<code>i2c-6</code>对应板子上的CAM0插口。
−
====下载驱动包====
+
* media_setting_rpi5.sh
−
<code>wget <nowiki>https://github.com/veyeimaging/raspberrypi_v4l2/releases/latest/download/raspberrypi_v4l2.tgz</nowiki></code><code><nowiki/></code>
−
====安装驱动====
−
<code>tar -xzvf raspberrypi_v4l2.tgz</code>
−
<code>cd raspberrypi_v4l2/release/</code>
+
<code>./media_setting_rpi5.sh</code>
−
<code>chmod +x *</code>
+
<code>This is a Raspberry Pi 5.</code>
−
<code>sudo ./install_driver.sh veye_mvcam</code>
+
<code>Kernel version is 6.6.51, do not support unpacked format.</code>
−
然后重启树莓派。
+
<code>Usage: ./media_setting_rpi5.sh veyecam2m/csimx307/cssc132/mvcam -fmt [UYVY/RAW8/RAW10/RAW12] -x [roi_x] -y [roi_y] -w [width] -h [height] -c [cam 0|1]</code>
−
备注:如果提示无法找到对应版本的驱动,说明我们没有提供对应您的piOS版本编译后的驱动程序。请尝试从源码编译。
+
<code>This shell script is designed to detect the connection of a camera on Raspberry Pi 5.</code>
−
====卸载驱动====
−
如需更换为Legacy模式,或者想要更换成其他摄像头模组型号的驱动,必须要先卸载现在的驱动。
−
<code>sudo ./uninstall_driver.sh veye_mvcam</code>
+
<code> It utilizes media-ctl and v4l2-ctl commands to configure the linking relationships and data formats of the media pad.</code>
−
====系统状态验证====
−
以MV-MIPI-IMX178M为例:
−
<code>dmesg | grep mvcam</code>
+
<code> Once completed, you can directly use /dev/video0 or /dev/video8 to obtain image data.</code>
−
可以看到linux启动阶段probe到的相机型号和以及相机的版本号:
+
在进行后续操作前,必须执行此脚本以完成参数的配置。
−
<code>camera is: MV-MIPI-IMX178M</code>
+
举例来说,对于RAW-MIPI-AR0234M:
−
<code>firmware version: 0x1080102</code>
+
<code>./media_setting_rpi5.sh mvcam -fmt RAW8 -x 0 -y 0 -w 1920 -h 1200</code>
−
并且/dev/video0 节点存在,证明摄像头状态正常。
====v4l2-ctl 应用范例====
====v4l2-ctl 应用范例====
=====安装v4l2-utils=====
=====安装v4l2-utils=====
Line 266:
Line 310:
<small><code> Size: Discrete 3088x2064</code></small>
<small><code> Size: Discrete 3088x2064</code></small>
−
<small><code> [5]: 'UYVY' (UYVY 4:2:2)</code></small>
+
注:对于树莓派5,实际支持的图像格式取决于相机能力,而不是此处的列表。
−
−
<small><code> Size: Discrete 3088x2064</code></small>
−
−
需要特别说明的是,MV系列相机提供的UYVY模式仅作调试使用,且图像宽度不能超过2880。
====== 列出驱动中实现的相机的可配置参数 ======
====== 列出驱动中实现的相机的可配置参数 ======
Line 297:
Line 337:
<code>v4l2-ctl --get-ctrl [ctrl_type]</code>
<code>v4l2-ctl --get-ctrl [ctrl_type]</code>
−
以上所有功能,均可使用[[Mv mipi i2c.sh user guide|mv_mipi_i2c.sh]]实现。
+
+
注:对于树莓派5,本节的所有使用v4l2-ctl配置参数的命令需要增加 -d参数来指明配置参数使用的subdev。
+
+
比如执行./media_setting_rpi5.sh或者./find_entity.sh的时候提示使用/dev/v4l-subdev2进行参数配置。
+
+
则<code>v4l2-ctl -L</code>需要变更为<code>v4l2-ctl -L -d /dev/v4l-subdev2</code>。
+
+
注:以上所有功能,均可使用[[Mv mipi i2c.sh user guide|mv_mipi_i2c.sh]]实现。
需要指出的是,以上参数在开始取图的状态均不可修改。下面进行逐个说明:
需要指出的是,以上参数在开始取图的状态均不可修改。下面进行逐个说明:
Line 332:
Line 379:
设置roi后,最大帧率会自动调整。
设置roi后,最大帧率会自动调整。
+
+
注:此方法不适用于树莓派5。
* 方法2,使用自定义roi_x,roi_y配合<code>--set-fmt-video</code>
* 方法2,使用自定义roi_x,roi_y配合<code>--set-fmt-video</code>
Line 340:
Line 389:
<code>v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT</code>
<code>v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT</code>
+
+
备注:对于树莓派5,可以直接使用media_setting_rpi5.sh脚本完成roi的配置,因为media_setting_rpi5.sh脚本中已经包含roi配置。
==== 流模式 ====
==== 流模式 ====
===== 设置ROI =====
===== 设置ROI =====
−
<code>v4l2-ctl --set-selection=target=crop,top=0,left=0,width=$WIDTH,height=$HEIGHT</code>
+
<code>v4l2-ctl --set-ctrl roi_x=0</code>
+
+
<code>v4l2-ctl --set-ctrl roi_y=0</code>
+
+
<code>v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT</code>
===== 设置帧率 =====
===== 设置帧率 =====
Line 349:
Line 404:
===== 可使用如下命令进行帧率统计 =====
===== 可使用如下命令进行帧率统计 =====
−
<code>v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=/dev/null</code>
+
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=/dev/null</code>
===== 保存图片到文件 =====
===== 保存图片到文件 =====
−
======MV-MIPI-IMX178M======
*raw8格式
*raw8格式
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=3088,height=2064,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-3104x2064.raw</code>
+
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-$WIDTHx$HEIGHT.raw</code>
或者
或者
−
<code>./yavta -c1 -Fy8-3104x2064.raw --skip 0 -f Y8 -s 3088x2064 /dev/video0</code>
+
<code>./yavta -c1 -F"y8-${WIDTH}x${HEIGHT}.raw" --skip 0 -f Y8 -s "${WIDTH}x${HEIGHT}" /dev/video0</code>
−
−
由于Raspberry Pi为图像申请的内存,宽度为32对齐,高度为16对齐,所以3088*2064的图像将被保存为3104*2064大小。
*raw10格式
*raw10格式
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=3088,height=2064,pixelformat='Y10 ' --stream-mmap --stream-count=1 --stream-to=y10-3088x2064.raw</code>
+
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat='Y10 ' --stream-mmap --stream-count=1 --stream-to=y10-$WIDTHx$HEIGHT.raw</code>
*raw12格式
*raw12格式
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=3088,height=2064,pixelformat='Y12 ' --stream-mmap --stream-count=1 --stream-to=y12-3088x2064.raw</code>
+
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat='Y12 ' --stream-mmap --stream-count=1 --stream-to=y12-$WIDTHx$HEIGHT.raw</code>
−
======MV-MIPI-SC130M======
−
*raw8格式
+
由于Raspberry Pi为图像申请的内存,宽度为32对齐,高度为16对齐,所以3088*2064的图像将被保存为3104*2064大小。
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=1280,height=1024,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-1280x1024.raw</code>
−
−
*raw10格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=1280,height=1024,pixelformat='Y10 ' --stream-mmap --stream-count=1 --stream-to=y10-1280x1024.raw</code>
−
======MV-MIPI-IMX296M ======
−
−
*raw8格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=1440,height=1088,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-1440x1088.raw</code>
−
−
*raw10格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=1440,height=1088,pixelformat='Y10 ' --stream-mmap --stream-count=1 --stream-to=y10-1440x1088.raw</code>
−
======MV-MIPI-IMX265M======
−
−
*raw8格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=2048,height=1544,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-2048x1544.raw</code>
−
−
*raw10格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=2048,height=1544,pixelformat='Y10 ' --stream-mmap --stream-count=1 --stream-to=y10-2048x1544.raw</code>
−
−
*raw12格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=2048,height=1544,pixelformat='Y12 ' --stream-mmap --stream-count=1 --stream-to=y12-2048x1544.raw</code>
−
======MV-MIPI-IMX264M======
−
−
*raw8格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2056,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-2432x2056.raw</code>
−
−
*raw10格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2056,pixelformat='Y10 ' --stream-mmap --stream-count=1 --stream-to=y10-2432x2056.raw</code>
−
−
*raw12格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2056,pixelformat='Y12 ' --stream-mmap --stream-count=1 --stream-to=y12-2432x2056.raw</code>
−
======RAW-MIPI-SC132M======
−
−
*raw8格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=1024,height=1280,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-1024x1280.raw</code>
−
−
*raw10格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=1024,height=1280,pixelformat='Y10 ' --stream-mmap --stream-count=1 --stream-to=y10-1024x1280.raw</code>
−
======MV-MIPI-IMX287M======
−
−
*raw8格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=704,height=544,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-704x544.raw</code>
−
−
*raw10格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=704,height=544,pixelformat='Y10 ' --stream-mmap --stream-count=1 --stream-to=y10-704x544.raw</code>
−
−
*raw12格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=704,height=544,pixelformat='Y12 ' --stream-mmap --stream-count=1 --stream-to=y12-704x544.raw</code>
−
======RAW-MIPI-IMX462M======
−
−
*raw10格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1088,pixelformat='Y10 ' --stream-mmap --stream-count=1 --stream-to=y10-1920x1088.raw</code>
−
−
*raw12格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1088,pixelformat='Y12 ' --stream-mmap --stream-count=1 --stream-to=y12-1920x1088.raw</code>
−
======RAW-MIPI-AR0234M======
−
−
*raw8格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1200,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-1920x1200.raw</code>
−
−
*raw10格式
−
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1200,pixelformat='Y10 ' --stream-mmap --stream-count=1 --stream-to=y10-1920x1200.raw</code>
图片格式请参考下面:raw data图片格式说明 章节。
图片格式请参考下面:raw data图片格式说明 章节。
===== 实时预览 =====
===== 实时预览 =====
+
在最新版树莓派piOS,vlc进行播放现在有问题,不能使用,请使用qv4l2代替。
====== 使用vlc播放图像 ======
====== 使用vlc播放图像 ======
Line 484:
Line 455:
[[File:Mvcam via qv4l2.png|center|thumb|800x800px|Play mv camera using qv4l2 on RPI]]
[[File:Mvcam via qv4l2.png|center|thumb|800x800px|Play mv camera using qv4l2 on RPI]]
<br />
<br />
−
====== 使用gstreamer预览UYVY格式图像 ======
−
<code>export DISPLAY=:0</code>
−
−
为了方便进行安装和调试,MV系列相机提供了UYVY模式。UYVY模式支持的最大宽度为2880,使用如下命令可以进行实时预览。
−
−
注:为了提高最高帧率和带宽,部分模组升级固件后不再提供UYVY格式。具体请通过脚本的fmtcap指令读取寄存器确认。
−
−
* install gstreamer
−
−
<code>sudo apt-get install gstreamer1.0-tools</code>
−
−
<code>sudo apt-get install libx264-dev libjpeg-dev</code>
−
−
<code>sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-ugly gstreamer1.0-tools gstreamer1.0-gl gstreamer1.0-gtk3</code>
−
−
* MV-MIPI-IMX178M
−
−
<code>v4l2-ctl --set-selection=target=crop,top=0,left=0,width=2816,height=2064</code>
−
−
<code>gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw,format=(string)UYVY, width=(int)2816, height=(int)2064, framerate=(fraction)22/1" ! v4l2convert ! "video/x-raw,format=(string)NV12" ! autovideosink sync=false -v</code>
−
−
* MV-MIPI-SC130M, MV-MIPI-IMX296M, MV-MIPI-IMX265M,MV-MIPI-IMX264M,MV-MIPI-IMX287M
−
−
<code>v4l2-ctl --set-selection=target=crop,top=0,left=0,width=$WIDTH,height=$HEIGHT</code>
−
−
<code>v4l2-ctl --set-ctrl frame_rate=$FPS</code>
−
−
<code>gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw,format=(string)UYVY, width=(int)$WIDTH, height=(int)$HEIGHT,framerate=(fraction)$FPS/1" ! v4l2convert ! "video/x-raw,format=(string)NV12" ! autovideosink sync=false -v</code>
−
−
或者简单的
−
−
<code>gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink</code>
−
====== 使用opencv预览GREY格式图像 ======
====== 使用opencv预览GREY格式图像 ======
Line 528:
Line 466:
<code>python ./v4l2dev_2_opencv_show_grey.py --width 640 --height 480 --fps 30</code>
<code>python ./v4l2dev_2_opencv_show_grey.py --width 640 --height 480 --fps 30</code>
+
+
对于树莓派5,需要增加一个<code>--ctldev /dev/v4l-subdev*</code>参数用于指明配置参数的subdev。
+
+
====== 使用gstreamer预览GREY格式图像 ======
+
<code>export DISPLAY=:0</code>
+
+
<code>gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=GRAY8,width=$WIDTH,height=$HEIGHT,framerate=$FPS/1 ! videoconvert ! autovideosink</code>
==== 触发模式 ====
==== 触发模式 ====
Line 533:
Line 478:
===== 设置ROI和帧率 =====
===== 设置ROI和帧率 =====
−
<code>v4l2-ctl --set-selection=target=crop,top=0,left=0,width=$WIDTH,height=$HEIGHT</code>
+
<code>v4l2-ctl --set-ctrl roi_x=0</code>
+
+
<code>v4l2-ctl --set-ctrl roi_y=0</code>
+
+
<code>v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT</code>
<code>v4l2-ctl --set-ctrl frame_rate=$FPS</code>
<code>v4l2-ctl --set-ctrl frame_rate=$FPS</code>
Line 544:
Line 493:
====== 开始取图 ======
====== 开始取图 ======
−
<code>v4l2-ctl --set-fmt-video=width=3088,height=2064,pixelformat=GREY --stream-mmap --stream-count=5 --stream-to=y8-3104x2064.yuv</code>
+
<code>v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=5 --stream-to=y8-$WIDTHx$HEIGHT.yuv</code>
====== 进行软触发操作 ======
====== 进行软触发操作 ======
Line 566:
Line 515:
====== 开始取图 ======
====== 开始取图 ======
−
<code>v4l2-ctl --set-fmt-video=width=3088,height=2064,pixelformat=GREY --stream-mmap --stream-count=5 --stream-to=y8-3104x2064.raw</code>
+
<code>v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=5 --stream-to=y8-$WIDTHx$HEIGHT.raw</code>
====== 进行硬触发操作 ======
====== 进行硬触发操作 ======
+
在其他的shell终端,可以多次执行下面命令进行多次触发。
+
<code>python gpio_trigger.py</code>
<code>python gpio_trigger.py</code>
Line 772:
Line 723:
Y8文件可以用这个播放器: [https://yuv-player-deluxe.software.informer.com/2.6/ YUV Displayer Deluxe]。
Y8文件可以用这个播放器: [https://yuv-player-deluxe.software.informer.com/2.6/ YUV Displayer Deluxe]。
+
+
==== 树莓派官方对于Packed format和Unpacked format的解释 ====
+
+
===== Packed format details =====
+
The packed format uses less storage for pixel data.
+
+
''On Raspberry Pi 4 and earlier devices'', the packed format packs pixels using the MIPI CSI-2 standard. This means:
+
+
* 10-bit camera modes pack 4 pixels into 5 bytes. The first 4 bytes contain the 8 most significant bits (MSBs) of each pixel, and the final byte contains the 4 pairs of least significant bits (LSBs).
+
* 12-bit camera modes pack 2 pixels into 3 bytes. The first 2 bytes contain the 8 most significant bits (MSBs) of each pixel, and the final byte contains the 4 least significant bits (LSBs) of both pixels.
+
+
''On Raspberry Pi 5 and later devices'', the packed format compresses pixel values with a visually lossless compression scheme into 8 bits (1 byte) per pixel.
+
+
===== Unpacked format details =====
+
The unpacked format provides pixel values that are much easier to manually manipulate, at the expense of using more storage for pixel data.
+
+
On all devices, the unpacked format uses 2 bytes per pixel.
+
+
''On Raspberry Pi 4 and earlier devices'', applications apply zero padding at the '''most significant end'''. In the unpacked format, a pixel from a 10-bit camera mode cannot exceed the value 1023.
+
+
''On Raspberry Pi 5 and later devices'', applications apply zero padding at the '''least significant end''', so images use the full 16-bit dynamic range of the pixel depth delivered by the sensor.
=== shell脚本进行参数配置 ===
=== shell脚本进行参数配置 ===
我们提供了shell脚本来配置参数。
我们提供了shell脚本来配置参数。
+
+
https://github.com/veyeimaging/raspberrypi_v4l2/tree/main/mv_tools_rpi
[[mv_mipi_i2c.sh user guide]]
[[mv_mipi_i2c.sh user guide]]
Line 788:
Line 762:
=== 本文修改记录 ===
=== 本文修改记录 ===
+
+
* 2025-03-23
+
+
增加对MV-MIPI-GMAX4002M的支持。
+
+
增加mv_probe.sh脚本的使用描述。
+
+
去掉使用gstreamer预览UYVY格式的描述。
+
+
*2024-07-08
+
+
增加对RAW-MIPI-SC535M的支持。
+
+
* 2024-01-01
+
+
增加对树莓派5的相关说明。
*2023-08-16
*2023-08-16
Line 801:
Line 791:
配合新版本驱动,去掉了翻转操作,增加了一种roi配置方法。
配合新版本驱动,去掉了翻转操作,增加了一种roi配置方法。
−
* 20230329
+
* 2023-03-29
增加opencv sample。
增加opencv sample。
−
*20230326
+
*2023-03-26
增加MV-MIPI-IMX287M的支持。
增加MV-MIPI-IMX287M的支持。
−
*20230304
+
*2023-03-04
增加Bullseye系统中CM4的相关说明。
增加Bullseye系统中CM4的相关说明。
−
* 20230210
+
* 2023-02-10
V4L2模式下增加了CM4的说明。
V4L2模式下增加了CM4的说明。
−
*20221208
+
*2022-12-08
增加了MV-MIPI-IMX264M的支持。
增加了MV-MIPI-IMX264M的支持。
−
* 20221102
+
* 2022-11-02
增加了IMX265和SC132新型号的支持。
增加了IMX265和SC132新型号的支持。