树莓派IMX462 2MP Starlight Camera教程

简介

产品介绍

IMX462 2MP Starlight Camera是一款星光级摄像头,搭载1/2.8英寸索尼星光级传感器,IMX462 采用Sony被找背照式像素技术,在可见光和近红外段有高质量的成像效果。IXM462 2MP Starlight Camera最大分辨率为1920*1080,板载IR-CUT,可以自由切换日夜模式。摄像头板载ISP处理电路从而进一步增强摄像头成像效果。提供99°和127°两种视场角选项,用户可以根据自己的需求选择。

产品规格

IMX462-99IMX462-127
图像传感器
感光芯片SONY IMX462LQR-C STARVIS
像素2.07MP
分辨率1920×1080
像素尺寸2.9um×2.9um
快门方式卷帘快门
ISP图像处理
帧率1080p@25fps、1080p@30fps
曝光AE(自动曝光)/手动
白平衡AWB(自动白平衡), 手动
快门1/25(1/30)s to 1/50,000s (支持慢快门)
降噪2D/3D降噪
图像设置亮度、对比度、锐度、饱和度、GAMMA可调、图像翻转、图像镜像
图像增强背光补偿、DOL-WDR、去雾
日夜切换外触发同步转换,手动强制彩色、黑白
镜头
视场角(FOV)99.1°(D) / 83.5°(H) / 44.6°(V)127.9°(D) / 106.9°(H) / 56.9°(V)
光圈F1.0F1.61
焦距4.0mm3.18mm
畸变-33.8%-51%
对焦方式手动
工作参数
工作温度-10℃~60℃
工作湿度<=95%无凝结

尺寸图


树莓派使用说明

使用说明

由于IMX462不是树莓派默认支持的摄像头型号,因此无法使用树莓派自带的libcamera或者raspicam库。需要另外安装驱动和控制脚本使用。
提供的驱动仅支持树莓派Raspberry PI OS系统,暂时未对其他系统做支持。

配置i2c

打开树莓派终端,输入指令

sudo raspi-config

选择Interface Options -> I2c -> Yes

下载安装驱动

下载驱动前,请确保已经正常烧写最新的树莓派系统,连接好摄像头,并完成开机配置。
打开树莓派终端,并输入以下指令进行安装

wget https://github.com/veyeimaging/raspberrypi_v4l2/releases/latest/download/raspberrypi_v4l2.tgz
tar -xzvf raspberrypi_v4l2.tgz
cd raspberrypi_v4l2/release/
chmod +x *
sudo ./install_driver.sh veyecam2m

卸载驱动(可选)

如果需要更换其他摄像头型号的额驱动,可以卸载现在的驱动

sudo ./uninstall_driver.sh veyecam2m

测试摄像头

注:如果你是通过远程终端操作摄像头,在使用预览指令前请先输入export DISPLAY=:0指令指定一下屏幕输出。

使用VLC预览图像

  • 树莓派主菜单打开VLC软件或者终端输入vlc
  • 点击▶按钮打开窗口
  • 选择Capture Device -> Device Selection -> Video device name. 选择摄像头节点,如果直接入一个摄像头,节点是/dev/video0
  • 点击 Advanced Option...按钮
  • 选择 Video input chroma format的型号为UYUV
  • 在width和height选择输入分辨率大小为1920和1080
  • 最后 OK 保存设置并播放


使用Gstreamer预览

安装Gstreamer

打开树莓派终端,并输入以下指令进行安装:

sudo apt-get install gstreamer1.0-tools
sudo apt-get install libx264-dev libjpeg-dev
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 gstreamer1.0-plugins-good gstreamer1.0-plugins-bad

抓拍图片

gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video0 ! 'video/x-raw, format=(string)UYVY, width=1920,height=1080' ! jpegenc ! filesink location=test_image.jpg

视频预览

gst-launch-1.0 v4l2src io-mode=dmabuf device=/dev/video0 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080,framerate=(fraction)30/1" ! v4l2convert capture-io-mode=dmabuf output-io-mode=dmabuf ! autovideosink sync=false -v

视频预览(加时间戳显示)

gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080,framerate=(fraction)30/1"  ! videoconvert ! videoscale ! clockoverlay time-format="%D %H:%M:%S" ! video/x-raw, width=640, height=360 ! autovideosink sync=false -v

录制视频 (mkv文件)

gst-launch-1.0 -e v4l2src io-mode=dmabuf device=/dev/video0 num-buffers=300 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080,framerate=(fraction)30/1" ! v4l2h264enc capture-io-mode=dmabuf output-io-mode=dmabuf extra-controls="controls, h264_profile=4, video_bitrate=6200000" ! 'video/x-h264, profile=high, level=(string)4' ! h264parse ! matroskamux ! filesink location=output.mkv

录制视频(mp4文件

gst-launch-1.0 -e v4l2src io-mode=dmabuf device=/dev/video0  num-buffers=300 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080,framerate=(fraction)30/1" ! v4l2h264enc capture-io-mode=dmabuf output-io-mode=dmabuf extra-controls="controls, h264_profile=4, video_bitrate=6200000" ! 'video/x-h264, profile=high, level=(string)4' ! h264parse ! mp4mux ! filesink location=video.mp4

TCP视频流传输

树莓派端, 监听端口为5000
gst-launch-1.0 -v v4l2src device=/dev/video0 num-buffers=-1 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080,framerate=(fraction)30/1" ! v4l2h264enc extra-controls="controls, h264_profile=4, video_bitrate=4000000" ! 'video/x-h264, profile=high, level=(string)4' ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink  host=x.x.x.x port=5000
从机端获取
gst-launch-1.0 -v tcpclientsrc host=x.x.x.x port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! autovideosink sync=false

注意:x.x.x.x需要根据实际的树莓派IP地址更换,比如gst-launch-1.0 -v tcpclientsrc host=192.168.1.10 port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! autovideosink sync=false

使用Opencv获取视频

gst-launch-1.0 v4l2src device=/dev/video0  ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080,framerate=(fraction)30/1" ! videoscale ! "video/x-raw,width=640,height=480" ! videoconvert ! "video/x-raw, format=(string)BGR" ! appsink

注意:这里不是直接在树莓派中单运行的,而是最为video.Capture(str)str的参数做调用。

使用Compute Module 计算模块

如果用户使用的是树莓派的CM3或者CM4计算模块,需要安装dtb和设备树文件。

加载设备树

sudo wget https://datasheets.raspberrypi.com/cmio/dt-blob-dualcam.bin -O /boot/dt-blob.bin
sudo cp ~/raspberrypi_v4l2/release/driver_bin/$(uname -r)/veyecam2m.dtbo /boot/overlays/veyecam2m.dtbo
sudo reboot

设备说明

CM4采用两路i2c分别与两个摄像头通信,分别是i2c-0和i2c-10。
如果同时接入两路摄像头,会在系统成识别成video0和video2两个节点。

CAM0预览

gst-launch-1.0 v4l2src io-mode=dmabuf device=/dev/video0 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080,framerate=(fraction)30/1" ! v4l2convert capture-io-mode=dmabuf output-io-mode=dmabuf ! autovideosink sync=false -v

CAM1预览

gst-launch-1.0 v4l2src io-mode=dmabuf device=/dev/video2 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080,framerate=(fraction)30/1" ! v4l2convert capture-io-mode=dmabuf output-io-mode=dmabuf ! autovideosink sync=false -v

参数调节

由于IMX462 摄像头板载ISP电路,用户可以通过提供的脚本对摄像头参数进行配置。

下载并配置脚本

下载脚本
git clone https://github.com/veyeimaging/raspberrypi.git
cd raspberrypi/i2c_cmd/bin/
配置脚本
cd raspberrypi/i2c_cmd/bin/
./enable_i2c_vc.sh
  • 如果是树莓派主板
./camera_i2c_config
  • 如果是树莓派计算模块
./camera_i2c_config 0 #CAM0
./camera_i2c_config 1 #CAM1

配置摄像头

设置wdrmode

  • 读取当前的wdrmode
./veye_mipi_i2c.sh -r -f wdrmode
  • 修改当前的wdrmode
./veye_mipi_i2c.sh -w -f wdrmode -p1 [value]

[value]的数值可以为:

0x00: 背光模式关闭
0x01: 低背光模式
0x02: 高背光模式
0x03: 使能DOL WDR宽动态模式

videoformat

  • 读取当前视频格式
./veye_mipi_i2c.sh -r -f videoformat
  • 设置视频格式
./veye_mipi_i2c.sh -w -f videoformat -p1 [value]

[value]参数:

PAL : 设置为PAL(50Hz)模式,该模式下, 帧率为25fps
NTSC: 设置为NTSC(60Hz)模式,该模式下,帧率为30fps

mirrormode

  • 读取镜像模式
./veye_mipi_i2c.sh -r -f mirrormode
  • 设置镜像模式
./veye_mipi_i2c.sh -w -f mirrormode -p1 [value]

[value]参数:

0x00: 正常
0x01: 镜像
0x02: 竖直翻转(旋转180度)
0x03: 镜像并做竖直翻转(旋转180度)

denoise

  • 读取降噪模式
./veye_mipi_i2c.sh -r -f denoise
  • 设置降噪模式
./veye_mipi_i2c.sh -w -f denoise -p1 [value]

[value]参数:

0x00: NR 2D Mode = OFF; NR 3D Mode = OFF
0x01: NR 2D Mode = OFF; NR 3D Mode = LOW
0x02: NR 2D Mode = OFF; NR 3D Mode = MIDDLE
0x03: NR 2D Mode = OFF; NR 3D Mode = HIGH
0x04: NR 2D Mode = LOW; NR 3D Mode = OFF
0x05: NR 2D Mode = LOW; NR 3D Mode = LOW
0x06: NR 2D Mode = LOW; NR 3D Mode = MIDDLE
0x07: NR 2D Mode = LOW; NR 3D Mode = HIGH
0x08: NR 2D Mode =MIDDLE; NR 3D Mode = OFF
0x09: NR 2D Mode =MIDDLE; NR 3D Mode = LOW
0x0A: NR 2D Mode = MIDDLE; NR 3D Mode = MIDDLE
0x0B: NR 2D Mode = MIDDLE; NR 3D Mode = HIGH
0x0C: NR 2D Mode =HIGH; NR 3D Mode = OFF
0x0D: NR 2D Mode =HIGH; NR 3D Mode = LOW
0x0E: NR 2D Mode = HIGH; NR 3D Mode = MIDDLE
0x0F: NR 2D Mode = HIGH; NR 3D Mode = HIGH

agc

  • 读取agc参数
./veye_mipi_i2c.sh -r -f agc
  • 设置agc (增益上限)
./veye_mipi_i2c.sh -w -f agc -p1 [value]

[value]参数:

0x00 ~ 0x0F : AGC强度

lowlight

  • 读取低照度模式参数
./veye_mipi_i2c.sh -r -f lowlight
  • 设置低照度模式

在低照度模式下,可以通过配置改参数来延长摄像头曝光时间,降低帧率,从而获得更高的低照度成像效果

./veye_mipi_i2c.sh -w -f lowlight -p1 [value]

[value]参数;

0x01: 1/2*(帧率)
0x03: 1/4*(帧率)
0x05: 1/6*(帧率)
0x07: 1/8*(帧率)
0x09: 1/10*(帧率)
0x0B: 1/15*(帧率)
0x0D: 1/20*(帧率)
0x0F: 1/25*(帧率)
0x11: 1/30*(帧率)
0x00: 固定帧率(25/30)

daynightmode

  • 读取日夜模式
./veye_mipi_i2c.sh -r -f daynightmode
  • 设置日夜模式
./veye_mipi_i2c.sh -w -f daynightmode -p1 [value]

[value]参数:

0xFF: 彩色模式,该模式下,摄像头为彩色模式,切IR-CUT 阻隔红外波段
0xFE: 黑白模式,该模式下,摄像头为彩色模式,同时IR-CUT 可以通过红外光
0xFC: 外触发模式, 该模式下,用户可以通过板载控制引脚 切换摄像头为彩色模式或者黑白模式。

ircutdir

  • 读取IR-CUT控制引脚电平方向
./veye_mipi_i2c.sh -r -f ircutdir
  • 设置IR-CUT控制电平
./veye_mipi_i2c.sh -w -f ircutdir -p1 [value]

设置IR-CUT控制电平,[value]可以是0或者1

irtrigger

  • 读取日夜切换外触发模式引脚的极性设置
./veye_mipi_i2c.sh -r -f irtrigger
  • 设置日夜切换外触发模式引脚的极性设置
./veye_mipi_i2c.sh -w -f irtrigger -p1 [value]

[value]参数:

0x00: 默认
0x01: 反转

mshutter

  • 读取曝光模式
./veye_mipi_i2c.sh -r -f mshutter
  • 设置曝光时间 (关闭自动曝光)
./veye_mipi_i2c.sh -w -f mshutter -p1 [value]

[value]的单位为s, value大于0x4B的时候摄像头进入低帧率模式

Value说明
NTSC (PAL)
0x40自动曝光
0x411/30(25)
0x421/60(50)
0x431/120(100)
0x441/240(200)
0x451/480(400)
0x461/1000
0x471/2000
0x481/5000
0x491/10000
0x4A1/50000
0x4B1/30(25)*2
0x4C1/30(25)*4
0x4D1/30(25)*6
0x4E1/30(25)*8
0x4F1/30(25)*10
0x501/30(25)*15
0x511/30(25)*20
0x521/30(25)*25
0x531/30(25)*30

cameramode

  • 读取摄像头模式
./veye_mipi_i2c.sh -r -f cameramode
  • 设置摄像头模式 需要hdver >=0x03
./veye_mipi_i2c.sh -w -f cameramode -p1 [value]

[value]参数:

0x0: stream模式
0x01: capture 模式