Mv series camera appnotes 4 jetson/zh
1 概述
MV系列相机是为工业领域的AI应用推出的相机。其使用MIPI CSI-2接口,尤其适合嵌入式运算平台使用。它具备丰富的数据格式和触发特性,极低的延时,极高的带宽和可靠的稳定性。
本文介绍了如何在英伟达Jetson平台使用MV系列相机。
1.1 支持的摄像机模组
系列 | 型号 | 状态 |
---|---|---|
MV系列 | MV-MIPI-IMX178M | 完成 |
MV系列 | MV-MIPI-SC130M | 完成 |
MV系列 | MV-MIPI-IMX296M | 完成 |
MV系列 | MV-MIPI-IMX287M | 完成 |
MV系列 | MV-MIPI-IMX265M | 完成 |
MV系列 | MV-MIPI-IMX264M | 完成 |
RAW系列 | RAW-MIPI-SC132M | 完成 |
RAW系列 | RAW-MIPI-AR0234M | 完成 |
RAW系列 | RAW-MIPI-IMX462M | 完成 |
RAW系列 | RAW-MIPI-SC535M | 完成 |
此外,已经调通V-by-One HS连接模式的驱动。
1.2 支持的Jetson Board
Jetson型号 | 状态 |
---|---|
Nano A02 | 完成 |
Nano B01 | 完成 |
Nano 2GB | 完成 |
TX2 NX | 完成 |
XAVIER NX | 完成 |
TX2 Devkit | 完成 |
AGX Xavier | 完成 |
AGX Orin | 完成 |
Orin NX | 完成 |
Orin Nano | 完成 |
1.3 支持的L4T版本
- Jetpack4.6.1,L4T版本r32.7.1
- Jetpack4.6.3,L4T版本r32.7.3
- Jetpack4.6.4,L4T版本r32.7.4
- Jetpack5.0.2,L4T版本r35.1
- Jetpack5.1,L4T版本r35.2.1
- Jetpack5.1.1,L4T版本r35.3.1
- Jetpack5.1.2,L4T版本r35.4.1
- Jetpack5.1.3,L4T版本r35.5
- Jetpack6.0,L4T版本r36.3
1.3.1 怎样查看当前L4T版本
在jetson板子上,查看当前L4T版本,尽量使用同一版本进行替换。
cat /etc/nv_tegra_release
如显示:
# R32 (release), REVISION: 7.1......
则表示当前L4T版本为32.7.1,对应的Jetpack版本是Jetpack32.6.1。
2 硬件准备以及安装
MV系列相机需要转接板才可以接入Jetson平台。支持情况如下表:
Camera型号 | Jetson型号 | 转接板 | FFC线(to 转接板) | FFC线(to Jetson主板) | 摄像机数量 | 额外供电 |
---|---|---|---|---|---|---|
MV系列 | Nano A02 | ADP-MV1 | 30pin异面FFC | 15pin异面FFC | 1 | 5V DC(必须) |
Nano B01 | ADP-MV1 | 30pin异面FFC | 15pin异面FFC | 2 | 5V DC(必须) | |
Nano 2GB | ADP-MV1 | 30pin异面FFC | 15pin异面FFC | 1 | 5V DC(必须) | |
TX2 NX | ADP-MV1 | 30pin异面FFC | 15pin异面FFC | 2 | 5V DC(必须) | |
XAVIER NX | ADP-MV1 | 30pin异面FFC | 15pin异面FFC | 2 | 5V DC(必须) | |
Orin Nano | ADP-MV1 | 30pin异面FFC | 15to22 pin 同面FFC | 2 | 5V DC(必须) | |
Orin NX | ADP-MV1 | 30pin异面FFC | 15to22 pin 同面FFC | 2 | 5V DC(必须) | |
TX2 Devkit | ADP-N4 | 30pin异面FFC | B2B连接器 | 6 | 5V或12V DC (必须) | |
AGX Xavier | ADP-N4 | 30pin异面FFC | B2B连接器 | 6 | 5V或12V DC (必须) | |
AGX Orin | ADP-N4 | 30pin异面FFC | B2B连接器 | 6 | 5V或12V DC (必须) | |
RAW-MIPI-SC132M | Nano A02 | N/A | N/A | 15pin异面FFC | 1 | N/A |
Nano B01 | N/A | N/A | 15pin异面FFC | 2 | N/A | |
Nano 2GB | N/A | N/A | 15pin异面FFC | 1 | N/A | |
TX2 NX | N/A | N/A | 15pin异面FFC | 2 | N/A | |
XAVIER NX | N/A | N/A | 15pin异面FFC | 2 | N/A | |
Orin Nano | N/A | N/A | 15to22 pin 同面FFC | 2 | N/A | |
Orin NX | N/A | N/A | 15to22 pin 同面FFC | 2 | N/A | |
TX2 Devkit | ADP-N5 | 15pin异面FFC | B2B连接器 | 6 | N/A | |
AGX Xavier | ADP-N5 | 15pin异面FFC | B2B连接器 | 6 | N/A | |
AGX Orin | ADP-N5 | 15pin异面FFC | B2B连接器 | 6 | N/A | |
RAW系列(RAW-MIPI-SC132M除外) | Nano A02 | N/A | N/A | 15to22 pin 同面FFC | 1 | N/A |
Nano B01 | N/A | N/A | 15to22 pin 同面FFC | 2 | N/A | |
Nano 2GB | N/A | N/A | 15to22 pin 同面FFC | 1 | N/A | |
TX2 NX | N/A | N/A | 15to22 pin 同面FFC | 2 | N/A | |
XAVIER NX | N/A | N/A | 15to22 pin 同面FFC | 2 | N/A | |
Orin Nano | N/A | N/A | 22pin 异面FFC | 2 | N/A | |
Orin NX | N/A | N/A | 22pin 异面FFC | 2 | N/A | |
TX2 Devkit | ADP-N5 | 15to22 pin 同面FFC | B2B连接器 | 6 | N/A | |
AGX Xavier | ADP-N5 | 15to22 pin 同面FFC | B2B连接器 | 6 | N/A | |
AGX Orin | ADP-N5 | 15to22 pin 同面FFC | B2B连接器 | 6 | N/A |
2.1 MV系列摄像头使用ADP-MV1的连接方式
2.1.1 MV系列摄像头与ADP-MV1的连接
二者使用0.5mm间距*30P的FFC异面线连接,注意接触面向外。
TOP | BOTTOM |
---|---|
2.1.2 供电
ADP-MV1需要独立的5V供电,可以使用杜邦线直接从Jetson主板取电。
2.1.3 使用ADP-MV1连接到Nano和Xavier NX
Nano系列和NX系列采用这种连接方式。
2.1.4 使用ADP-MV1连接到Orin Nano和 Orin NX
二者使用15P转22Pin的FFC同面线连接,注意接触面方向。
2.2 MV系列摄像头使用ADP-N4的连接方式
2.2.1 MV系列摄像头与ADP-N4的连接
二者使用0.5mm间距*30P的FFC同面线连接,注意接触面向外。
2.2.2 供电
ADP-N4需要独立的供电。它支持两种供电方式,二选其一即可。
- 5V DC 接到 J19-9。可以使用杜邦线直接从Jetson主板取电。
- 12V DC 接到J11。需使用外置适配器供电。
2.2.3 使用ADP-N4的连接到TX2和AGX
2.3 RAW系列摄像头直接连接到Jetson主板
2.3.1 RAW系列摄像头连接到Nano和Xavier NX
RAW-MIPI-SC132M使用15pin异面FFC线,其他RAW系列相机使用15to22pin同面FFC线。注意相机端,FPC排线银色接触面向外。
2.3.2 RAW系列摄像头连接到Orin Nano和 Orin NX
RAW-MIPI-SC132M使用15to22pin同面FFC线,其他RAW系列相机使用22pin异面FFC线。注意相机端,FPC排线银色接触面向外。
2.4 RAW系列摄像头使用ADP-N5的连接方式
2.4.1 RAW系列摄像头与ADP-N5的连接
RAW-MIPI-SC132M使用15pin异面FFC线,其他RAW系列相机使用15to22pin同面FFC线。
2.4.2 使用ADP-N5连接到TX2和AGX
2.5 V-by-One-HS-KIT摄像机连接示意图
3 更新Jetson系统
本章节描述怎样更新Jetson的L4T系统以支持MV摄像头模组。操作系统更新方法,请参考更新Jetson操作系统。
特别的,对于MV系列相机,除了在linux系统中增加了摄像头的驱动,我们还增加了一个内核补丁——veye_mv_l4t_<verion>.patch,并提供编译好的Image文件。
这个patch具备两个功能:
- 增加了黑白相机的Y10和Y12两种数据格式的支持。
- 增加了trigger模式的支持。
4 raw data图片格式说明
在TX2和XAVIER上,10 bit depth和12 bit depth的raw data在内存中的存储格式是不符合V4L2标准的。我们扩展了linux内核中的定义以支持这种情况。
TY10、TY12、XY10和XY12是我们新增的类型。
4.1 Nano
Depth | Bit order | FourCC | Enumerator |
---|---|---|---|
8 | B7 B6 B5 B4 B3 B2 B1 B0 | GREY | V4L2_PIX_FMT_GREY |
10 | 0 0 0 0 0 0 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 | 'Y10 ' | V4L2_PIX_FMT_Y10 |
12 | 0 0 0 0 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 | 'Y12 ' | V4L2_PIX_FMT_Y12 |
4.2 TX2
Depth | Bit order (X is undefined) | FourCC | Enumerator |
---|---|---|---|
8 | B7 B6 B5 B4 B3 B2 B1 B0 | GREY | V4L2_PIX_FMT_GREY |
10 | 0 0 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 X X X X | TY10 | V4L2_PIX_FMT_TX2_Y10 |
12 | 0 0 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 X X | TY12 | V4L2_PIX_FMT_TX2_Y12 |
4.3 XAVIER and Orin
Depth | Bit order (X is undefined) | FourCC | Enumerator |
---|---|---|---|
8 | B7 B6 B5 B4 B3 B2 B1 B0 | GREY | V4L2_PIX_FMT_GREY |
10 | 0 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 X X X X X | XY10 | V4L2_PIX_FMT_XAVIER_Y10 |
12 | 0 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 X X X | XY12 | V4L2_PIX_FMT_XAVIER_Y12 |
同时,我们提供了工具软件,以便将特殊的数据格式转为标准格式。https://github.com/veyeimaging/pixel_layer_convert。
推荐使用vooya作为播放器。
4.4 Trigger模式的支持
Jetson系统的默认驱动只支持视频流模式。在其VI驱动中,数据接收功能具有超时机制。我们增加了一个可设的vi_time_out_disable选项,可以动态打开和关闭这个超时机制。
具体应用参考下面的应用范例。
5 系统状态检测
完成系统更新后,重启Jetson主板。
Jetson系统启动过程中,会检测所有i2c bus上摄像头是否存在,如果存在则生成/dev/videoX设备节点。
在Jetson板端执行以下命令来检测是否正确连接摄像头。
dmesg | grep mvcam
可以看到linux启动阶段probe到的相机型号和以及相机的版本号:
比如下面这个提示,表示在i2c-10总线上检测到了MV-MIPI-IMX178M摄像机。
mvcam 10-003b: camera is: MV-MIPI-IMX178M
mvcam 10-003b: firmware version: 0x1080103
5.1 /dev/videoX设备节点
摄像头模组在Jetson系统中映射为/dev/videoX设备节点。
操作系统启动过程中,按照i2c bus从小到大的顺序探测摄像头。X值是按照探测的逻辑顺序从0开始递增的。
举例说,如果只接入一个摄像头,无论硬件连接到哪个位置,X都为0。如果接入5个,则按照i2c bus从小到大,X为[0-4]。
v4l2-ctl命令中,使用-d /dev/videoX
来访问不同的摄像头。
gstreamer中,v4l2src可以通过指明device=/dev/videoX
来访问不同的摄像头。
6 配置命令行全局变量
为了后面描述方便,此处根据sensor尺寸,配置全局变量。
- MV-MIPI-IMX178M
export WIDTH=3088
export HEIGHT=2064
export FPS=22
- MV-MIPI-SC130M
export WIDTH=1280
export HEIGHT=1024
export FPS=108
- MV-MIPI-IMX296M
export WIDTH=1440
export HEIGHT=1088
export FPS=60
- MV-MIPI-IMX265M
export WIDTH=2048
export HEIGHT=1544
export FPS=45
- MV-MIPI-IMX264M
export WIDTH=2432
export HEIGHT=2056
export FPS=28
- MV-MIPI-IMX287M
export WIDTH=704
export HEIGHT=544
export FPS=319
- RAW-MIPI-SC132M
export WIDTH=1080
export HEIGHT=1280
export FPS=120
- RAW-MIPI-IMX462M
export WIDTH=1920
export HEIGHT=1080
export FPS=60
- RAW-MIPI-AR0234M
export WIDTH=1920
export HEIGHT=1200
export FPS=60
- RAW-MIPI-SC535M
export WIDTH=2432
export HEIGHT=2048
export FPS=50
7 v4l2-ctl 应用范例
7.1 安装v4l2-utils
sudo apt-get install v4l-utils
7.2 使用v4l2-ctl配置参数
7.2.1 列出相机支持的数据格式
v4l2-ctl --list-formats-ext
下面是在XAVIER系统下,MV-MIPI-IMX178M的例子:
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'UYVY'
Name : UYVY 4:2:2
Size: Discrete 3088x2064
Interval: Discrete 0.045s (22.000 fps)
Index : 1
Type : Video Capture
Pixel Format: 'NV16'
Name : Y/CbCr 4:2:2
Size: Discrete 3088x2064
Interval: Discrete 0.045s (22.000 fps)
Index : 2
Type : Video Capture
Pixel Format: 'GREY'
Name : 8-bit Greyscale
Size: Discrete 3088x2064
Interval: Discrete 0.045s (22.000 fps)
Index : 3
Type : Video Capture
Pixel Format: 'XY10'
Name : XAVIER 10-bit/16-bit Greyscale
Size: Discrete 3088x2064
Interval: Discrete 0.045s (22.000 fps)
Index : 4
Type : Video Capture
Pixel Format: 'XY12'
Name : XAVIER 12-bit/16-bit Greyscale
Size: Discrete 3088x2064
Interval: Discrete 0.045s (22.000 fps)
需要特别说明的是,MV系列相机提供的UYVY和NV16模式仅作调试使用,且最大宽度不能超过2880。
7.2.2 列出驱动中实现的相机的可配置参数
v4l2-ctl -L
User Controls
trigger_mode 0x00981901 (int) : min=0 max=2 step=1 default=0 value=0 flags=volatile, execute-on-write
trigger_src 0x00981902 (int) : min=0 max=1 step=1 default=1 value=1 flags=volatile, execute-on-write
soft_trgone 0x00981903 (button) : flags=write-only, execute-on-write
frame_rate 0x00981904 (int) : min=1 max=22 step=1 default=22 value=22 flags=volatile, execute-on-write
roi_x 0x00981905 (int) : min=0 max=2712 step=8 default=0 value=0
roi_y 0x00981906 (int) : min=0 max=1744 step=4 default=0 value=0
Camera Controls
low_latency_mode 0x009a206d (bool) : default=0 value=0
preferred_stride 0x009a206e (int) : min=0 max=65535 step=1 default=0 value=0
vi_time_out_disable 0x009a2078 (bool) : default=0 value=0
可以使用下面的方法设置和获取参数。
v4l2-ctl --set-ctrl [ctrl_type]=[val]
v4l2-ctl --get-ctrl [ctrl_type]
以上所有功能,均可使用mv_mipi_i2c.sh实现。
需要指出的是,以上参数在开始取图的状态均不可修改。下面进行逐个说明:
7.2.3 配置触发模式
v4l2-ctl --set-ctrl trigger_mode=[0-2]
0:流模式
1:普通触发模式
2:快速连续触发模式
7.2.4 配置触发源
v4l2-ctl --set-ctrl trigger_src=[0-1]
0: 软触发
1: 硬触发
7.2.5 软触发一次
v4l2-ctl --set-ctrl soft_trgone=1
7.2.6 设置帧率
v4l2-ctl --set-ctrl frame_rate=[1-max]
随分辨率的调整,最大帧率会自动更新。
7.2.7 设置ROI和数据格式
举例:
v4l2-ctl --set-ctrl roi_x=0
v4l2-ctl --set-ctrl roi_y=0
v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY
设置roi后,最大帧率会自动调整。请注意,摄像机roi参数需要符合摄像机手册中的要求。
7.2.8 preferred_stride
preferred_stride指一行图像数据需要的内存大小。Jetson平台的图像数据是unpacked存储的,即10bit depth和12 bit depth的数据格式下,一个像素占用两个字节。
- 普通情况下,buffer需要64字节对齐。
preferred_stride= ALIGN_UP(width*bytes_per_pixel,64)
比如宽度为3088时:
8bit depth,preferred_stride=3136。
10bit depth,preferred_stride=6208。
12bit depth,preferred_stride=6208。
- 如果使用VIC buffer,则需要256字节对齐。
preferred_stride= ALIGN_UP(width*bytes_per_pixel,256)
7.3 流模式
7.3.1 设置图像格式
以最大画面为例:
v4l2-ctl --set-ctrl roi_x=0
v4l2-ctl --set-ctrl roi_y=0
v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY
v4l2-ctl --set-ctrl frame_rate=$FPS
7.3.2 帧率统计
v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=/dev/null
7.3.3 保存图片到文件
7.3.3.1 MV-MIPI-IMX178M
- raw8格式
v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=3136
v4l2-ctl -d /dev/video0 --set-fmt-video=width=3088,height=2064,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-3136x2064.raw
- raw10格式
v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=6208
v4l2-ctl -d /dev/video0 --set-fmt-video=width=3088,height=2064,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-3104x2064.raw
- raw12格式
v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=6208
v4l2-ctl -d /dev/video0 --set-fmt-video=width=3088,height=2064,pixelformat=XY12 --stream-mmap --stream-count=1 --stream-to=y12-3104x2064.raw
7.3.3.2 MV-MIPI-SC130M
由于宽度1280是64和256的整数倍,不需要设置preferred_stride。
- raw8格式
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1280,height=1024,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-1280x1024.raw
- raw10格式
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1280,height=1024,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-1280x1024.raw
7.3.3.3 MV-MIPI-IMX296M
- raw8格式
v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=1472
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1440,height=1088,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-1472x1088.raw
- raw10格式
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1440,height=1088,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-1440x1088.raw
7.3.3.4 MV-MIPI-IMX265M
- raw8格式
v4l2-ctl -d /dev/video0 --set-fmt-video=width=2048,height=1544,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-2048x1544.raw
- raw10格式
v4l2-ctl -d /dev/video0 --set-fmt-video=width=2048,height=1544,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-2048x1544.raw
- raw12格式
v4l2-ctl -d /dev/video0 --set-fmt-video=width=2048,height=1544,pixelformat=XY12 --stream-mmap --stream-count=1 --stream-to=y12-2048x1544.raw
7.3.3.5 MV-MIPI-IMX264M
- raw8
v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2056,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-2432x2056.raw
- raw10
v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2056,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-2432x2056.raw
- raw12
v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2056,pixelformat=XY12 --stream-mmap --stream-count=1 --stream-to=y12-2432x2056.raw
7.3.3.6 RAW-MIPI-SC132M
- raw8格式
v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=1088
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1080,height=1280,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-1088x1280.raw
- raw10格式
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1080,height=1280,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-1080x1280.raw
7.3.3.7 MV-MIPI-IMX287M
- raw8
v4l2-ctl -d /dev/video0 --set-fmt-video=width=704,height=544,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-704x544.raw
- raw10
v4l2-ctl -d /dev/video0 --set-fmt-video=width=704,height=544,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-704x544.raw
- raw12
v4l2-ctl -d /dev/video0 --set-fmt-video=width=704,height=544,pixelformat=XY12 --stream-mmap --stream-count=1 --stream-to=y12-704x544.raw
7.3.3.8 RAW-MIPI-AR0234M
- raw8格式
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1200,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-1920x1200.raw
- raw10格式
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1200,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-1920x1200.raw
7.3.3.9 RAW-MIPI-IMX462M
- raw10格式
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1088,pixelformat=XY10 --stream-mmap --stream-count=1 --stream-to=y10-1920x1088.raw
- raw12格式
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1088,pixelformat=XY12 --stream-mmap --stream-count=1 --stream-to=y12-1920x1088.raw
图片格式请参考上面:raw data图片格式说明 章节。
7.3.3.10 RAW-MIPI-SC535M
- raw8格式
v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2048,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-2432x2048.raw
7.3.4 实时预览
对于支持GREY格式的摄像头,可以使用qv4l2或者vlc进行视频预览。
7.3.4.1 使用qv4l2预览画面
Install qv4l2,
sudo apt install qv4l2
1. Open VLC with command line vlc
to launch.
2. Hit the ▶
(Play) button to call the open media window.
7.3.4.2 使用VLC预览画面
Install vlc,
sudo apt-get install vlc
1. Open VLC with command line vlc
, or click the icon to launch.
2. Hit the ▶
(Play) button to call the open media window.
3. In Capture Device
>> Device Selection
>> Video device name
, select the camera video node.
4. Hit Advanced Options...
button
5. Type in the width
and height
, for example, 1280 and 1024.
6. Hit OK
to save the settings and see the video feed.
7.3.4.3 使用gstreamer预览UYVY格式图像
注:为了提高最高帧率和带宽,部分模组升级固件后不再提供UYVY格式。具体请通过脚本的fmtcap指令读取寄存器确认。
export DISPLAY=:0
UYVY模式支持的最大宽度为2880,使用如下命令可以进行实时预览。
- MV-MIPI-IMX178M
v4l2-ctl -d /dev/video0 --set-fmt-video=width=2816,height=2064,pixelformat=UYVY
gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw,format=(string)UYVY, width=(int)2816, height=(int)2064, framerate=(fraction)22/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nv3dsink sync=false
- MV-MIPI-SC130M, MV-MIPI-IMX296M, MV-MIPI-IMX265M,MV-MIPI-IMX264M,MV-MIPI-IMX287M
v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=UYVY
v4l2-ctl -d /dev/video0 --set-ctrl frame_rate=$FPS
gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw,format=(string)UYVY, width=(int)$WIDTH, height=(int)$HEIGHT, framerate=(fraction)$FPS/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nv3dsink sync=false
7.3.4.4 使用opencv预览GREY格式图像
sudo apt install python3-opencv
- 我们提供了一个简单的sample实现此功能:
python3 ./v4l2dev_2_opencv_show_grey.py --roix 0 --roiy 0 --width 640 --height 480 --fps 30
7.4 触发模式
7.4.1 准备工作
v4l2-ctl --set-ctrl roi_x=0
v4l2-ctl --set-ctrl roi_y=0
v4l2-ctl --set-ctrl low_latency_mode=1
v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY
v4l2-ctl --set-ctrl frame_rate=$FPS
如有必要,设置合适的preferred_stride.
比如,MV-MIPI-IMX178M,3088*2064:
v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=3136
比如,MV-MIPI-IMX296M,1440*1088:
v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=1472
7.4.2 软触发
7.4.2.1 设置模式
v4l2-ctl --set-ctrl trigger_mode=1
v4l2-ctl --set-ctrl trigger_src=0
v4l2-ctl --set-ctrl vi_time_out_disable=1
7.4.2.2 开始取图
- MV-MIPI-IMX178M
v4l2-ctl --set-fmt-video=width=3088,height=2064,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-3104x2064.raw
- MV-MIPI-SC130M
v4l2-ctl --set-fmt-video=width=1280,height=1024,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-1280x1024.raw
- MV-MIPI-IMX296M
v4l2-ctl --set-fmt-video=width=1440,height=1088,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-1472x1088.raw
- MV-MIPI-IMX265M
v4l2-ctl -d /dev/video0 --set-fmt-video=width=2048,height=1544,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-2048x1544.raw
- MV-MIPI-IMX264M
v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2048,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-2432x2048.raw
- RAW-MIPI-SC132M
v4l2-ctl --set-fmt-video=width=1080,height=1280,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-1080x1280.raw
- MV-MIPI-IMX287M
v4l2-ctl -d /dev/video0 --set-fmt-video=width=704,height=544,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-704x544.raw
- RAW-MIPI-AR0234M
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1200,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-1920x1200.raw
- RAW-MIPI-IMX462M
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1088,pixelformat=XY10 --stream-mmap --stream-count=-1 --stream-to=y8-1920x1088.raw
- RAW-MIPI-SC535M
v4l2-ctl -d /dev/video0 --set-fmt-video=width=2432,height=2048,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-2432x2048.raw
7.4.2.3 进行软触发操作
在其他的shell终端,可以多次执行下面命令进行多次触发。
v4l2-ctl --set-ctrl soft_trgone=1
7.4.2.4 停止触发和采集
由于内核驱动中,死循环等待新图片,因此需要先取消vi_time_out_disable,然后再退出采集操作。
v4l2-ctl --set-ctrl vi_time_out_disable=0
在取图命令的终端中,按Ctrl+C退出采集操作。
7.4.3 硬触发
使用jetson-gpio进行触发操作,首先请安装并配置好jetson-gpio。
下面以使用jetson GPIO40(Board num)为模拟触发源,上升沿触发为例。
可以使用mv_mipi_i2c.sh脚本进行丰富的触发参数设置。
7.4.3.1 硬件连接
- 使用ADP-MV1时
- 使用ADP-N4时
如采用公共触发源连接,则首先将J7成对短接,然后将jetson GPIO40接到J19-1。
如采用独立触发源连接,则直接将 GPIO40接到J7-1---J7-11。
7.4.3.2 设置模式
v4l2-ctl --set-ctrl trigger_mode=1
v4l2-ctl --set-ctrl trigger_src=1
v4l2-ctl --set-ctrl vi_time_out_disable=1
7.4.3.3 开始取图
- MV-MIPI-IMX178M
v4l2-ctl --set-fmt-video=width=3088,height=2064,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-3104x2064.raw
- MV-MIPI-SC130M
v4l2-ctl --set-fmt-video=width=1280,height=1024,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=y8-1280x1024.raw
7.4.3.4 进行硬触发操作
python gpio_trigger_jetson.py
Note:触发脚本链接。
7.4.3.5 停止触发和采集
由于内核驱动中,死循环等待新图片,因此需要先取消vi_time_out_disable,然后再退出采集操作。
v4l2-ctl --set-ctrl vi_time_out_disable=0
在取图命令的终端中,按Ctrl+C退出采集操作。
8 Application demo
8.1 v4l2grab_mvcam_jetson
v4l2grab_mvcam是一个C语言开发的sample,支持流模式和触发模式。
8.2 yavta(仅支持流模式)
8.2.1 yavta安装
git clone https://github.com/veyeimaging/yavta.git
cd yavta;make
8.2.2 设置图像格式
v4l2-ctl --set-ctrl roi_x=0
v4l2-ctl --set-ctrl roi_y=0
v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY
8.2.3 保存图片到文件
8.2.3.1 MV-MIPI-IMX178M
- raw8格式
v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=3136
./yavta -c1 -Fy8-3136x2064.raw --skip 0 -f Y8 -s 3088x2064 /dev/video0
- raw10格式
以XAVIER平台为例
v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=6208
./yavta -c1 -Fy10-3104x2064.raw --skip 0 -f XY10 -s 3088x2064 /dev/video0
- raw12格式
以XAVIER平台为例
v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=6208
./yavta -c1 -Fy12-3104x2064.raw --skip 0 -f XY12 -s 3088x2064 /dev/video0
8.2.3.2 MV-MIPI-SC130M
- raw8格式
./yavta -c1 -Fy8-1280x1024.raw --skip 0 -f Y8 -s 1280x1024 /dev/video0
- raw10格式
以XAVIER平台为例
./yavta -c1 -Fy10-1280x1024.raw --skip 0 -f XY10 -s 1280x1024 /dev/video0
8.2.3.3 MV-MIPI-IMX296M
- raw8格式
v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=1472
./yavta -c1 -Fy8-1472x1024.raw --skip 0 -f Y8 -s 1440x1088 /dev/video0
- raw10格式
以XAVIER平台为例
./yavta -c1 -Fy10-1440x1024.raw --skip 0 -f XY10 -s 1440x1088 /dev/video0
8.2.3.4 MV-MIPI-IMX265M
- raw8格式
./yavta -c1 -Fy8-2048x1544.raw --skip 0 -f Y8 -s 2048x1544 /dev/video0
- raw10格式
以XAVIER平台为例
./yavta -c1 -Fy10-2048x1544.raw --skip 0 -f XY10 -s 2048x1544 /dev/video0
- raw12格式
以XAVIER平台为例
./yavta -c1 -Fy12-2048x1544.raw --skip 0 -f XY12 -s 2048x1544 /dev/video0
8.2.3.5 MV-MIPI-IMX264M
- raw8格式
./yavta -c1 -Fy8-2432x2048.raw --skip 0 -f Y8 -s 2432x2048 /dev/video0
- raw10格式
以XAVIER平台为例
./yavta -c1 -Fy10-2432x2048.raw --skip 0 -f XY10 -s 2432x2048 /dev/video0
- raw12格式
以XAVIER平台为例
./yavta -c1 -Fy12-2432x2048.raw --skip 0 -f XY12 -s 2432x2048 /dev/video0
8.2.3.6 RAW-MIPI-SC132M
- raw8
./yavta -c1 -Fy8-1080x1280.raw --skip 0 -f Y8 -s 1080x1280 /dev/video0
- raw10
以XAVIER平台为例.
./yavta -c1 -Fy10-1080x1280.raw --skip 0 -f XY10 -s 1080x1280 /dev/video0
8.2.3.7 MV-MIPI-IMX287M
- raw8格式
./yavta -c1 -Fy8-704x544.raw --skip 0 -f Y8 -s 704x544 /dev/video0
- raw10格式
以XAVIER平台为例
./yavta -c1 -Fy10-704x544.raw --skip 0 -f XY10 -s 704x544 /dev/video0
- raw12格式
以XAVIER平台为例
./yavta -c1 -Fy12-704x544.raw --skip 0 -f XY12 -s 704x544 /dev/video0
8.2.3.8 RAW-MIPI-AR0234M
- raw8
./yavta -c1 -Fy8-1920x1200.raw --skip 0 -f Y8 -s 1920x1200 /dev/video0
- raw10
以XAVIER平台为例.
./yavta -c1 -Fy10-1920x1200.raw --skip 0 -f XY10 -s 1920x1200 /dev/video0
8.2.3.9 RAW-MIPI-IMX462M
以XAVIER平台为例.
- raw12
./yavta -c1 -Fy12-1920x1088.raw --skip 0 -f XY12 -s 1920x1088 /dev/video0
- raw10
./yavta -c1 -Fy10-1920x1088.raw --skip 0 -f XY10 -s 1920x1088 /dev/video0
图片格式请参考上面:raw data图片格式说明 章节。
8.2.3.10 RAW-MIPI-SC535M
- raw8
./yavta -c1 -Fy8-2432x2048.raw --skip 0 -f Y8 -s 2432x2048 /dev/video0
9 i2c脚本使用说明
我们提供了shell脚本来配置参数。
10 参考资料
11 本文修改记录
- 2024-08-13
增加Jetpack6.0的支持。
- 2024-05-22
增加对RAW-MIPI-SC535M的支持。
增加Jetpack5.1.3的支持。
- 2023-08-29
增加对RAW-MIPI-IMX462M和RAW-MIPI-AR0234M的支持。
- 2023-07-31
调通V-by-One连接的驱动。
- 2023-06-07
增加使用qv4l2和VLC预览画面的方法。
- 2023-04-27
支持Jetpack5.1.1.
- 2023-04-16
去掉flip和mirror的ioctl功能。
- 2023-03-29
增加opencv sample。
- 2023-03-37
增加MV-MIPI-IMX287M的相关描述。
- 2023-02-22
支持Jetpack5.1
- 2022-12-11
增加MV-MIPI-IMX264M的相关描述。
- 2022-10-14
增加MV-MIPI-IMX296M和MV-MIPI-IMX265M的相关描述。
- 2022-08-31
支持Jetpack5.0.2
- 2022-06-23
增加ADP-N4的相关描述
- 2022-05-20
第一个发布版本