CS-MIPI-X for Raspberry Pi/zh

From wiki_veye
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

English

如何在树莓派平台使用CS-MIPI-X系列摄像头模组

1 概述

CS-MIPI-X 摄像头模组理论上支持树莓派的所有型号,出于性能最优考虑,建议使用树莓派3以后的版本。本篇文章以树莓派4为例讲解CS-MIPI-X系列摄像头模组接入树莓派的方法。此外介绍了接入树莓派Computer Module与树莓派Zero应用中的特殊之处。

2 关于piOS版本---Bullseye

The latest system of Raspberry Pi - bullseye has removed the support of raspicam by default. But we still have 2 ways to use it.

最新版本的piOS——Bullseye默认去掉了raspicam的支持。但是我们依然有两种方法来使用。

  • 1, 使用 legacy 版本的 piOS,也就是说,不升级到Bullseye。

https://www.raspberrypi.com/software/operating-systems/

  • 2, 在Bullseye版本上,打开Open legacy camera的支持。我们已经升级了程序以适应这种应用。

If you want to add the legacy camera interfaces to Bullseye, please click your update icon in the taskbar to update. Then open a terminal (Ctrl-Alt-T) and type ‘sudo raspi-config’, go to ‘Interface Options’ and then ‘Legacy Camera’, and reboot. These camera interfaces are deprecated, and we are not supporting them going forwards.

https://www.raspberrypi.com/news/new-old-functionality-with-raspberry-pi-os-legacy/

使用如下命令查看当前系统版本:

lsb_release -a

3 硬件准备及安装

原材料:树莓派4,网线,Micro SD卡,树莓派电源线,HDMI显示器,FFC线,杜邦线,镜头,摄像头主板。

  • 如图所示,摄像头主板通过FFC异面线及图中的杜邦黑红线连接到树莓派上,黑线连接GND接口,红线连接5V接口。
  • 树莓派接好摄像头模组后,将烧录好树莓派系统的MicroSD卡插入卡槽,网线插入网线接口,HDMI显示器接入树莓派,电源线插入power接口,为树莓派接通电源。
  • CS-MIPI-SC132、CS-MIPI-IMX307默认供电方式为FFC排线3.3V供电,无需插红黑电源线。
connect CS-MIPI-X to Raspberry Pi 001 (CS-MIPI-IMX307 as an example)
connect CS-MIPI-X to Raspberry Pi 002 (CS-MIPI-IMX307 as an example)
connect CS-MIPI-X to Raspberry Pi 003 (CS-MIPI-IMX307 as an example)
connect CS-MIPI-X to Raspberry Pi 004 (CS-MIPI-IMX307 as an example)
connect CS-MIPI-X to Raspberry Pi 005 (CS-MIPI-IMX307 as an example)
connect CS-MIPI-SC132 to Raspberry Pi
connect CS-MIPI-SC132 to Raspberry Pi


4 树莓派系统安装及配置

具体安装树莓派系统方法请参考官方文档,详见:Install raspberrypi guide

接通电源后,树莓派系统启动,初始树莓派系统中Camera 和 I2C都处于未启用状态。开机后我们需要将其手动打开,执行命令

sudo raspi-config

进入选项5,启用Camera 和 I2C,然后重启。

建议启用树莓派系统的ssh服务及samba服务,这里不再赘述树莓派系统如何开启ssh和samba服务。

5 软件包下载与介绍

5.1 有两种方式下载及传输软件包到树莓派

  • 执行命令行

git clone https://github.com/veyeimaging/raspberrypi.git

直接将文件复制到树莓派系统中。

利用samba将软件包文件传输至树莓派系统中,也可用U盘将软件包文件拷贝至树莓派系统中。

5.2 软件包介绍

github 软件包概览
  • 软件包包括视频流软件包和视频控制软件包。i2c_cmd为视频控制接口软件包。视频流接口软件包有两个,veye_raspcam为raspcam type工具集。D_mipi_rpi为D-SDK软件包,提供了C语言的SDK并由C语言和python语言的demo。
  • 视频流软件包提供实时显示、抓拍、录像等功能,视频控制软件包通过I2C协议控制摄像机模组,提供主要的ISP参数配置等功能。

这两部分都是开源的。

6 视频流软件包使用

6.1 视频码流模式的说明

veye type工具集支持多种码流模式,如1080p@30fps,720p@60fps等。

请先使用cs_mipi_i2c.sh 的videofmtcap和videofmt指令配置和确认当前模式。

6.1.1 方式1:-md选项指明模式

-md 选项用以指明使用的模式,默认为0。

模组模式说明
md 值 模式类型
0 1080p@30fps
1 720p@60fps
2 VGA@130fps
6.1.2 方式2:-w -h选项指明模式

-w选项指明当前模式的宽,-h选项指明当前模式的高。

6.2 raspicam type工具集

首先增加可执行权限

cd raspberrypi/veye_raspcam/bin/

chmod +x *

6.2.1 veye_raspipreview 实时预览

./veye_raspipreview -t 20000 -md 1 -p '0,0,1280,720'

实现20s(即20000毫秒)的720p@60视频实时显示到HDMI输出,输出窗口为1280*720,可以自行调节t的大小和输出窗口。

./veye_raspipreview -t -1

将t调节成 -1,可以实现视频持续输出显示到HDMI输出,全屏显示。

6.2.2 veye_raspivid 录像

./veye_raspivid -t 5000 -w 1280 -h 720 -fps 60 -stm -o ~/test.h264

实现录像5s,码流模式为720p@60, 录像文件保存到~/test.h264。可以自行调节t的大小来选择录制时间的长短。

与此同时,实现视频实时显示到HDMI输出。(如不需要preview功能,可以添加 -n 选项)

6.2.3 veye_raspivid 网络传输(gstreamer,推荐使用)

树莓派一侧执行

./veye_raspivid -b 4000000 -t 0 -o -  | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=x.x.x.x port=5000

码流带宽为4Mbps,持续传输,监听端口为5000。

电脑一侧,如为windows系统,建议使用powershell。

电脑一侧使用gstreamer

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地址

gstreamer的windows版本下载地址。只安装runtime files即可。

6.2.4 veye_raspivid 网络传输(direct tcp stream with netcat)

树莓派一侧执行

./veye_raspivid -b 4000000 -t 0 -o - | nc -l -p 5000

码流带宽为4Mbps,持续传输,监听端口为5000。

电脑一侧,如为windows系统,建议使用powershell。

电脑一侧使用gstreamer

./gst-launch-1.0 -v tcpclientsrc host=x.x.x.x port=5000 ! decodebin ! autovideosink

电脑一侧使用mplayer

./mplayer -x 1280 -y 720 -geometry 0:0 -fps 200 -demuxer h264es -noborder ffmpeg://tcp://x.x.x.x:5000

其中x.x.x.x为树莓派的IP地址

mplayer for windows 下载地址

6.2.5 veye_raspividyuv YUV图片连续存储

./veye_raspividyuv -t 200 -o /dev/shm/test.yuv

实现录像yuv格式数据200ms,录像文件保存到/dev/shm/test.yuv,存储格式为YUV420 I420 格式。可以自行调节t的大小来选择录制时间的长短。

6.2.6 veye_raspstillyuv YUV图片单张抓拍

./veye_raspistillyuv -md 1 -o /dev/shm/test.yuv

实现抓拍一张图片存储到/dev/shm目录(内存文件系统),图片为720p大小。 然后客户可以导出并查看。文件格式为1920*1080大小的yuv数据。存储格式为YUV420 I420 格式。

./veye_raspistillyuv -tl 50 -t 1000 -o /dev/shm/test%d.yuv

实现间隔50ms抓拍一张图片存储到/dev/shm目录(内存文件系统),持续1秒,然后客户可以导出并查看。文件格式为1920*1080大小的yuv数据。存储格式为YUV420 I420 格式。

6.2.7 veye_raspistill 抓拍(JPG,bmp)

./veye_raspistill -md 0 -o ~/test.jpg

实现抓拍一张图片,图片为1920*1080,并保存,文件格式为jpg。

./veye_raspistill -e bmp -tl 50 -t 1000  -o /dev/shm/test%d.bmp

实现间隔50ms抓拍一张bmp图片存储到/dev/shm目录(内存文件系统),持续1秒,然后客户可以导出并查看。

./veye_raspistill -k -o ~/test%d.jpg -t 0

实现视频预览,同时通过键盘控制抓拍,Enter键抓拍一张,X Enter退出。

veye_raspistill命令支持preview,-n可以取消preview。

6.3 D-SDK软件包

提供了一个C语言的SDK库libdmipicam.so,以及基于这个库的C语言sample和python语言sample。

6.3.1 安装底层支持库

sudo apt-get update && sudo apt-get install libopencv-dev

sudo apt-get install python-opencv

sudo apt-get install libzbar-dev

6.3.2 分辨率模式说明

D-SDK并不对模组做任何参数配置,对模组的参数配置参考:Video Control Toolkits Manual : CS-MIPI-X i2c

D_init_camera_ex 函数的pvideofmt参数需要与当前模组分辨率模式一致。

./cs_mipi_i2c.sh -r -f videofmt

6.3.3 SDK
  • 接口:

开放源码,详见D_mipicam.h

  • 编译:

./buildme

  • 安装:

sudo install -m 644 ./libdmipicam.so /usr/lib/

6.3.4 C sample
  • preview

实现实时视频预览

  • preview-dualcam

实现两路摄像头同时视频预览(RPI CM)

  • video

视频压缩为H.264并保存为文件

  • capture

抓拍一张jpeg图片

  • video2stdout

视频压缩并输出到stdout为管道应用服务,如下命令,可达到与veye_raspivid命令类似的效果。

./video2stdout | nc -l -p 5000

  • capture_yuv

抓拍一张YUV图片

  • capture-dualcam

两路摄像头同时抓拍jpeg图片

  • yuv_stream

导出yuv格式的原始数据

  • capture2opencv

连续获取YUV数据并转为opencv格式,显示。

  • qrcode_detection

连续抓拍YUV数据并转为opencv格式,显示,并进行二维码检测。

6.3.5 Python sample
  • preview.py

实现实时视频预览

  • capture.py

抓拍一张jpeg图片

  • capture_yuv.py

抓拍一张yuv图片

  • video.py

视频压缩为H.264并保存为文件

  • capture2opencv.py

连续获取YUV数据并转为opencv格式,显示。

7 视频控制软件包使用

视频控制软件包实际上是一个i2c命令的shell脚本,在i2c_cmd目录下。

对于树莓派,我们使用I2C-0作为控制总线。我们提供了一个脚本camera_i2c_config进行总线的管脚复用配置。

具体使用说明请见:I2C脚本使用说明

PS:新版本PiOS需要使用i2c-10,如果i2c-0不通,请尝试 -b 10。

8 关于树莓派Computer Module 和树莓派Zero使用的补充说明

请参考关于树莓派Computer Module 和树莓派Zero使用的补充说明