15. 摄像头¶
本章配套视频介绍:

《40-在鲁班猫上使用摄像头》
https://www.bilibili.com/video/BV1q14y1275u/
15.1. 摄像头支持列表¶
15.2. 摄像头接口¶
鲁班猫4摄像头接口规格为2*15Pin 0.4mm的BTB插座,鲁班猫5摄像头接口规格为24Pin 0.5mm间距的FPC插座
1.鲁班猫4与摄像头模块的连接如下图所示:

2.鲁班猫5与摄像头模块的连接如下图所示:
正面:

背面:

15.3. LubanCat-4¶
LubanCat-4板卡最大支持三个摄像头同时运行。
下面以debian11系统进行讲解:
15.3.1. 单摄¶
CAM0
CAM1
CAM2
均可独立接摄像头 ,摄像头默认关闭,由 /boot/uEnv/uEnv.txt
文件进行配置
15.3.1.1. 开启方法¶
现在以 开启 CAM0
为例子, CAM1
CAM2
的打开方法类似
1 2 | # 打开配置文件
vi /boot/uEnv/uEnv.txt
|
找到带有
CAM0
的设备树插件,将设备树插件前面的#
删除,保存文件,然后重启即可生效,文件改动如下图

15.3.1.2. 关闭方法¶
现在以关闭 CAM0
为例子, CAM1
CAM2
的关闭方法类似
1 2 | # 打开配置文件
vi /boot/uEnv/uEnv.txt
|
找到
CAM0
的设备树插件,将设备树插件前面添加#
,保存文件,然后重启即可生效,文件改动如下图

15.3.1.3. 摄像头节点¶
单摄的摄像头的默认节点是 /dev/video11
,以下命令格式、分辨率和帧率可根据实际进行修改:
1 2 3 4 5 | #预览摄像头
gst-launch-1.0 -v v4l2src device=/dev/video11 ! "video/x-raw, format=(string)UYVY, width=1920, height=1080" ! videoconvert ! ximagesink sync=false
#预览摄像头
gst-launch-1.0 v4l2src device=/dev/video11 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink
|
15.3.2. 双摄¶
CAM0
CAM1
CAM2
均可独立接摄像头 ,摄像头默认关闭,由 /boot/uEnv/uEnv.txt
文件进行配置
双摄可以任意搭配使用
CAM0
和CAM1
CAM0
和CAM2
CAM1
和CAM2
15.3.2.1. 开启方法¶
现在以 开启 CAM0
和 CAM1
为例子,另外两种方法也是类似
1 2 | # 打开配置文件
vi /boot/uEnv/uEnv.txt
|
找到
CAM0
和CAM1
的设备树插件,将设备树插件前面的#
删除,保存文件,然后重启即可生效,文件改动如下图

15.3.2.2. 关闭方法¶
现在以关闭 CAM0
和 CAM1
为例子,另外两种方法也是类似
1 2 | # 打开配置文件
vi /boot/uEnv/uEnv.txt
|
找到
CAM0
CAM1
的设备树插件,将设备树插件前面添加#
,保存文件,然后重启即可生效,文件改动如下图

15.3.2.3. 摄像头节点¶
双摄摄的摄像头的节点是 /dev/video22
和 /dev/video31
如果开启的是 CAM0
和 CAM1
对应的节点分别是 /dev/video22
和 /dev/video31
1 2 | gst-launch-1.0 v4l2src device=/dev/video22 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink &
gst-launch-1.0 v4l2src device=/dev/video31 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink &
|
15.3.3. 三摄¶
CAM0
CAM1
CAM2
均可独立接摄像头 ,摄像头默认关闭,由 /boot/uEnv/uEnv.txt
文件进行配置
15.3.3.1. 开启方法¶
现在以 开启 CAM0
和 CAM1
为例子,另外两种方法也是类似
1 2 | # 打开配置文件
vi /boot/uEnv/uEnv.txt
|
找到
CAM0
CAM1
CAM2
的设备树插件,将设备树插件前面的#
删除,保存文件,然后重启即可生效,文件改动如下图

15.3.3.2. 关闭方法¶
现在以关闭 CAM0
和 CAM1
为例子,另外两种方法也是类似
1 2 | # 打开配置文件
vi /boot/uEnv/uEnv.txt
|
找到
CAM0
CAM1
CAM2
的设备树插件,将设备树插件前面添加#
,保存文件,然后重启即可生效,文件改动如下图

15.3.3.3. 摄像头节点¶
双摄摄的摄像头的节点是 /dev/video33
/dev/video42
/dev/video51
如果开启的是 CAM0
CAM1
CAM2
对应的节点分别是 /dev/video33
/dev/video42
/dev/video51
1 2 3 | gst-launch-1.0 v4l2src device=/dev/video33 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink &
gst-launch-1.0 v4l2src device=/dev/video42 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink &
gst-launch-1.0 v4l2src device=/dev/video51 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink &
|
15.4. LubanCat-5¶
注意
鲁班猫5的cam0、cam1为4lane接口,imx415插件可以满足 4K@30fps
& 1080P@60fps
的分辨率配置,而cam2~cam5是2lane接口,所以仅能支持 4K@15fps
& 1080P@60fps
的分辨率配置。
LubanCat-5板卡支持 imx415摄像头
,最大支持六个 imx415摄像头
同时运行。
其中imx415摄像头支持两种分辨率,分别是4K、1080P。在设备树配置文件上也有做区分,详情可以看下面的配置展示图片。
下面以Debian 11系统进行讲解
15.4.1. 单摄¶
CAM0
CAM1
CAM2
CAM3
CAM4
CAM5
均可独立接摄像头 ,摄像头默认关闭,由 /boot/uEnv/uEnv.txt
文件进行配置。
15.4.1.1. 开启方法¶
现在以 开启 CAM0
为例子, 其他接口的打开方法类似。
1 2 | # 打开配置文件
vi /boot/uEnv/uEnv.txt
|
找到
cam
下面带有cam0
的设备树插件,将设备树插件前面的#
删除,保存文件,然后重启即可生效,文件改动如下图

15.4.1.2. 关闭方法¶
现在以关闭 CAM0
为例子, 其它接口的关闭方法类似
1 2 | # 打开配置文件
vi /boot/uEnv/uEnv.txt
|
找到
cam
下面带有cam0
的设备树插件,将设备树插件前面添加#
,保存文件,然后重启即可生效,文件改动如下图

15.4.1.3. 摄像头节点¶
单摄的摄像头的节点是 /dev/video11
,以下命令格式、分辨率和帧率可根据实际进行修改:
1 2 3 4 5 | #预览摄像头
gst-launch-1.0 -v v4l2src device=/dev/video11 ! "video/x-raw, format=(string)UYVY, width=1920, height=1080" ! videoconvert ! ximagesink sync=false
#预览摄像头
gst-launch-1.0 v4l2src device=/dev/video11 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink
|
15.4.2. 多摄¶
CAM0
CAM1
CAM2
CAM3
CAM4
CAM5
均可独立接摄像头 ,摄像头默认关闭,由 /boot/uEnv/uEnv.txt
文件进行配置
15.4.2.1. 开启方法¶
现在以 开启 CAM0
和 CAM1
为例
1 2 | # 打开配置文件
vi /boot/uEnv/uEnv.txt
|
找到
cam
下面带有cam0
cam1
的设备树插件,将设备树插件前面的#
删除,保存文件,然后重启即可生效,文件改动如下图

15.4.2.2. 关闭方法¶
现在以关闭 CAM0
和 CAM1
为例子,其他方法也是类似
1 2 | # 打开配置文件
vi /boot/uEnv/uEnv.txt
|
找到
cam
下面带有cam0
cam1
的设备树插件,将设备树插件前面添加#
,保存文件,然后重启即可生效,文件改动如下图

15.4.2.3. 摄像头节点¶
双摄摄的摄像头的节点是 /dev/video22
和 /dev/video31
如果开启的是 CAM0
和 CAM1
对应的节点分别是 /dev/video22
和 /dev/video31
1 2 | gst-launch-1.0 v4l2src device=/dev/video22 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink &
gst-launch-1.0 v4l2src device=/dev/video31 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink &
|
15.5. 摄像头操作¶
15.5.1. 查看摄像头节点¶
查看摄像头节点,以鲁班猫5IO只开启CAM0对应的设备树插件为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #查看摄像头设备
v4l2-ctl --list-devices
#信息输出如下
root@lubancat:~# v4l2-ctl --list-devices
rk_hdmirx (fdee0000.hdmirx-controller):
/dev/video20
rkisp-statistics (platform: rkisp):
/dev/video18
/dev/video19
rkcif-mipi-lvds (platform:rkcif-mipi-lvds):
/dev/media0
rkisp_mainpath (platform:rkisp0-vir0):
/dev/video11
/dev/video12
/dev/video13
/dev/video14
/dev/video15
/dev/video16
/dev/video17
/dev/media1
|
一般操作rkisp_mainpath对应的第一个设备,因此以上 /dev/video11
对应CAM0的摄像头节点。
查看摄像头节点,以鲁班猫5IO同时开启CAM0和CAM1对应的设备树插件为例:
1 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 33 34 35 36 37 38 39 | #查看摄像头设备
v4l2-ctl --list-devices
#信息输出如下
root@lubancat:~# v4l2-ctl --list-devices
rk_hdmirx (fdee0000.hdmirx-controller):
/dev/video40
rkisp-statistics (platform: rkisp):
/dev/video29
/dev/video30
/dev/video38
/dev/video39
rkcif-mipi-lvds (platform:rkcif-mipi-lvds):
/dev/media0
rkcif-mipi-lvds1 (platform:rkcif-mipi-lvds1):
/dev/media1
rkisp_mainpath (platform:rkisp0-vir0):
/dev/video22
/dev/video23
/dev/video24
/dev/video25
/dev/video26
/dev/video27
/dev/video28
/dev/media2
rkisp_mainpath (platform:rkisp0-vir1):
/dev/video31
/dev/video32
/dev/video33
/dev/video34
/dev/video35
/dev/video36
/dev/video37
/dev/media3
|
一般操作rkisp_mainpath对应的第一个设备,又因为摄像头是顺序注册的,因此以上 /dev/video22
对应CAM0的摄像头节点, /dev/video31
对应CAM1的摄像头节点。
15.5.2. 查看摄像头格式和分辨率¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #查看摄像头格式和分辨率
v4l2-ctl --list-formats-ext --device=/dev/video11
#imx415摄像头实际演示
root@lubancat:~# v4l2-ctl --list-formats-ext --device=/dev/video11
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/CbCr 4:2:2)
Size: Stepwise 32x32 - 3840x2160 with step 8/8
[2]: 'NV61' (Y/CrCb 4:2:2)
Size: Stepwise 32x32 - 3840x2160 with step 8/8
[3]: 'NV21' (Y/CrCb 4:2:0)
Size: Stepwise 32x32 - 3840x2160 with step 8/8
[4]: 'NV12' (Y/CbCr 4:2:0)
Size: Stepwise 32x32 - 3840x2160 with step 8/8
[5]: 'NM21' (Y/CrCb 4:2:0 (N-C))
Size: Stepwise 32x32 - 3840x2160 with step 8/8
[6]: 'NM12' (Y/CbCr 4:2:0 (N-C))
Size: Stepwise 32x32 - 3840x2160 with step 8/8
root@lubancat:~#
|
可以看到当前摄像头支持UYVY、NV12、NV16等格式,支持的最大分辨率为3840x2160
15.5.3. 查看摄像头帧率¶
以下命令分辨率可根据实际最大分辨率进行修改:
1 2 3 4 5 6 7 8 9 10 11 | #查看摄像头帧率
v4l2-ctl -d /dev/video11 \
--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
#使用imx415 1080p设备树插件获取帧率对应信息输出如下
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 60.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 60.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 60.00 fps
|
15.5.4. 列出摄像头所有信息¶
1 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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #列出摄像头所有信息
v4l2-ctl --all --device /dev/video11
#imx415摄像头实际演示
cat@lubancat:~$ v4l2-ctl --all --device /dev/video11
Driver Info:
Driver name : rkisp_v6
Card type : rkisp_mainpath
Bus info : platform:rkisp0-vir0
Driver version : 2.2.1
Capabilities : 0x84201000
Video Capture Multiplanar
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04201000
Video Capture Multiplanar
Streaming
Extended Pix Format
Media Driver Info:
Driver name : rkisp0-vir0
Model : rkisp0
Serial :
Bus info :
Media version : 5.10.160
Hardware revision: 0x00000000 (0)
Driver version : 5.10.160
Interface Info:
ID : 0x03000007
Type : V4L Video
Entity Info:
ID : 0x00000006 (6)
Name : rkisp_mainpath
Function : V4L2 I/O
Pad 0x01000009 : 0: Sink
Link 0x0200000a: from remote pad 0x1000004 of entity 'rkisp-isp-subdev': Data, Enabled
Priority: 2
Format Video Capture Multiplanar:
Width/Height : 3840/2160
Pixel Format : 'UYVY' (UYVY 4:2:2)
Field : None
Number of planes : 1
Flags :
Colorspace : BT.2020
Transfer Function : Rec. 709
YCbCr/HSV Encoding: BT.2020
Quantization : Full Range
Plane 0 :
Bytes per Line : 7680
Size Image : 16588800
Selection Video Capture: crop, Left 0, Top 0, Width 3840, Height 2160, Flags:
Selection Video Capture: crop_bounds, Left 0, Top 0, Width 3840, Height 2160, Flags:
Selection Video Output: crop, Left 0, Top 0, Width 3840, Height 2160, Flags:
Selection Video Output: crop_bounds, Left 0, Top 0, Width 3840, Height 2160, Flags:
Image Processing Controls
pixel_rate 0x009f0902 (int64) : min=0 max=1000000000 step=1 default=1000000000 value=356800000 flags=read-only, volatile
|
15.5.5. 命令行拍摄照片¶
1 2 | #命令行拍摄照片
sudo gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video11 ! jpegenc ! filesink location=picture.jpg
|
15.5.6. 命令行拍摄视频¶
1 2 3 4 5 | # 录制视频
v4l2-ctl --verbose -d /dev/video11 --set-fmt-video=width=3840,height=2160,pixelformat='NV12' --stream-mmap=4 --set-selection=target=crop,flags=0,top=0,left=0,width=3840,height=2160 --stream-to=out.yuv
# 播放视频
ffplay -f rawvideo -video_size 3840x2160 -pixel_format nv12 out.yuv
|
15.5.7. 预览摄像头¶
以下命令格式、分辨率和帧率可根据实际进行修改:
1 2 3 4 5 | #预览摄像头
gst-launch-1.0 -v v4l2src device=/dev/video11 ! "video/x-raw, format=(string)UYVY, width=1920, height=1080" ! videoconvert ! ximagesink sync=false
#预览摄像头
gst-launch-1.0 v4l2src device=/dev/video11 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink
|