15. 摄像头

本章配套视频介绍:

../../_images/video.png

《40-在鲁班猫上使用摄像头》

https://www.bilibili.com/video/BV1q14y1275u/

15.2. 摄像头接口

鲁班猫4摄像头接口规格为2*15Pin 0.4mm的BTB插座,鲁班猫5摄像头接口规格为24Pin 0.5mm间距的FPC插座

1.鲁班猫4与摄像头模块的连接如下图所示:

can not find

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

正面:

can not find

背面:

can not find

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 的设备树插件,将设备树插件前面的 # 删除,保存文件,然后重启即可生效,文件改动如下图

LubanCat-2

15.3.1.2. 关闭方法

现在以关闭 CAM0 为例子, CAM1 CAM2 的关闭方法类似

1
2
# 打开配置文件
vi /boot/uEnv/uEnv.txt
  • 找到 CAM0 的设备树插件,将设备树插件前面添加 # ,保存文件,然后重启即可生效,文件改动如下图

LubanCat-2

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 文件进行配置

双摄可以任意搭配使用

  • CAM0CAM1

  • CAM0CAM2

  • CAM1CAM2

15.3.2.1. 开启方法

现在以 开启 CAM0CAM1 为例子,另外两种方法也是类似

1
2
# 打开配置文件
vi /boot/uEnv/uEnv.txt
  • 找到 CAM0CAM1 的设备树插件,将设备树插件前面的 # 删除,保存文件,然后重启即可生效,文件改动如下图

LubanCat-2

15.3.2.2. 关闭方法

现在以关闭 CAM0CAM1 为例子,另外两种方法也是类似

1
2
# 打开配置文件
vi /boot/uEnv/uEnv.txt
  • 找到 CAM0 CAM1 的设备树插件,将设备树插件前面添加 # ,保存文件,然后重启即可生效,文件改动如下图

LubanCat-2

15.3.2.3. 摄像头节点

双摄摄的摄像头的节点是 /dev/video22/dev/video31

如果开启的是 CAM0CAM1 对应的节点分别是 /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. 开启方法

现在以 开启 CAM0CAM1 为例子,另外两种方法也是类似

1
2
# 打开配置文件
vi /boot/uEnv/uEnv.txt
  • 找到 CAM0 CAM1 CAM2 的设备树插件,将设备树插件前面的 # 删除,保存文件,然后重启即可生效,文件改动如下图

LubanCat-2

15.3.3.2. 关闭方法

现在以关闭 CAM0CAM1 为例子,另外两种方法也是类似

1
2
# 打开配置文件
vi /boot/uEnv/uEnv.txt
  • 找到 CAM0 CAM1 CAM2 的设备树插件,将设备树插件前面添加 # ,保存文件,然后重启即可生效,文件改动如下图

LubanCat-2

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 的设备树插件,将设备树插件前面的 # 删除,保存文件,然后重启即可生效,文件改动如下图

LubanCat-5

15.4.1.2. 关闭方法

现在以关闭 CAM0 为例子, 其它接口的关闭方法类似

1
2
# 打开配置文件
vi /boot/uEnv/uEnv.txt
  • 找到 cam 下面带有 cam0 的设备树插件,将设备树插件前面添加 # ,保存文件,然后重启即可生效,文件改动如下图

LubanCat-5

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. 开启方法

现在以 开启 CAM0CAM1 为例

1
2
# 打开配置文件
vi /boot/uEnv/uEnv.txt
  • 找到 cam 下面带有 cam0 cam1 的设备树插件,将设备树插件前面的 # 删除,保存文件,然后重启即可生效,文件改动如下图

LubanCat-5

15.4.2.2. 关闭方法

现在以关闭 CAM0CAM1 为例子,其他方法也是类似

1
2
# 打开配置文件
vi /boot/uEnv/uEnv.txt
  • 找到 cam 下面带有 cam0 cam1 的设备树插件,将设备树插件前面添加 # ,保存文件,然后重启即可生效,文件改动如下图

LubanCat-5

15.4.2.3. 摄像头节点

双摄摄的摄像头的节点是 /dev/video22/dev/video31

如果开启的是 CAM0CAM1 对应的节点分别是 /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