15. 摄像头

本章配套视频介绍:

../../_images/video.png

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

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

15.1. 摄像头支持列表

15.1.1. mipi摄像头

LubanCat-RK3588系列板卡支持mipi摄像头。目前仅适配imx415。

购买链接:

(野火)mipi-imx415

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板卡目前仅支持 imx415摄像头 ,最大支持三个 imx415摄像头 同时运行。

下面以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
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系统进行讲解

CAM0 CAM1 CAM2 CAM3 CAM4 CAM5 均可独立接摄像头 ,摄像头默认关闭,由 /boot/uEnv/uEnv.txt 文件进行配置。

现在以 开启 CAM0 为例子, 其他接口的打开方法类似。

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

LubanCat-5

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

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

LubanCat-5

单摄的摄像头的节点是 /dev/video11

预览摄像头
1
gst-launch-1.0 v4l2src device=/dev/video11 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink

CAM0 CAM1 CAM2 CAM3 CAM4 CAM5 均可独立接摄像头 ,摄像头默认关闭,由 /boot/uEnv/uEnv.txt 文件进行配置

现在以 开启 CAM0CAM1 为例

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

LubanCat-5

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

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

LubanCat-5

双摄摄的摄像头的节点是 /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. 摄像头操作

查看摄像头格式和分辨率
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
v4l2-ctl --list-formats-ext --device=/dev/video11

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

列出硬件所有信息
 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
v4l2-ctl --all --device /dev/video11

# 实际演示
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
使用命令行捕捉图片
1
sudo gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video11 ! jpegenc ! filesink location=picture.jpg
使用命令行录制和播放视频
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
预览摄像头
1
gst-launch-1.0 v4l2src device=/dev/video11 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink