VEYE MIPI 290/327 for Raspberry Pi/zh

From wiki_veye
Jump to navigation Jump to search

English

如何在树莓派平台使用VEYE-MIPI-X系列摄像头模组(legacy mode)

1 概述

VEYE-MIPI-X系列摄像头模组,包括VEYE-MIPI-327E,VEYE-MIPI-IMX327S,VEYE-MIPI-IMX462,VEYE-MIPI-IMX385。摄像头模组理论上支持树莓派的所有型号,出于性能最优考虑,建议使用树莓派3以后的版本。本篇文章以树莓派3B为例讲解VEYE-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 硬件准备及安装

原材料:树莓派3B,网线,Micro SD卡,树莓派电源线,HDMI显示器,FFC线,杜邦线,镜头,摄像头主板,转接板。(树莓派转接板包括mini转接板与增强版转接板,其中mini转接板用来对接树莓派标准版型,增强版转接板可以额外用来对接Computer Module系列和Zero系列版型,两种版本详情请见Mini Adapter BoardAdapter Board

  • 如图所示,摄像头主板连接mini转接板,mini转接板通过FFC异面线及图中的杜邦黑红线连接到树莓派上,黑线连接GND接口,红线连接5V接口。
  • 树莓派接好摄像头模组后,将烧录好树莓派系统的MicroSD卡插入卡槽,网线插入网线接口,HDMI显示器接入树莓派,电源线插入power接口,为树莓派接通电源。

3.1 供电模式

VEYE-MIPI-IMX327S,VEYE-MIPI-IMX462,VEYE-MIPI-IMX385均支持杜邦线5V供电和FFC排线供电,并可以自动适应模式。

VEYE-MIPI-IMX327S与树莓派接线图

VEYE-MIPI-IMX462与树莓派接线图

VEYE-MIPI-IMX385与树莓派接线图

VEYE-MIPI-IMX327S FPC连接方式

VEYE-MIPI-IMX462 FPC连接方式

VEYE-MIPI-IMX385 FPC连接方式


VEYE-MIPI-327E与树莓派接线图 VEYE-MIPI-327E FPC连接方式


树莓派与摄像头模组VEYE-MIPI-327B连接示意图 摄像头模组VEYE-MIPI-327B插接示意图

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 raspicam type工具集

首先增加可执行权限

cd raspberrypi/veye_raspcam/bin/

chmod +x *

  • veye_raspipreview

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

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

./veye_raspipreview -t -1

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

  • veye_raspivid 录像

./veye_raspivid -t 5000 -o ~/test.h264

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

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

  • veye_raspivid 网络传输(gstreamer tcp)

树莓派一侧执行

./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即可。

  • veye_raspivid 网络传输(gstreamer udp)

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

电脑一侧使用gstreamer

gst-launch-1.0.exe -v udpsrc port=5321 ! gdpdepay ! rtph264depay ! avdec_h264 ! autovideosink sync=false

树莓派一侧执行

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

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

其中x.x.x.x为HOST PC的IP地址,需要先运行pc端程序,再运行树莓派端程序。

  • 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 下载地址

  • veye_raspividyuv

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

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

  • veye_raspiraw

./veye_raspiraw -md 2 -t 200 -o /dev/shm/out.%04d.yuv

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

  • veye_raspstillyuv

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

实现抓拍一张图片存储到/dev/shm目录(内存文件系统),然后客户可以导出并查看。文件格式为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 格式。

  • veye_raspistill

./veye_raspistill -o ~/test.jpg

实现抓拍一张图片并保存,文件格式为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.2 D-SDK软件包

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

6.2.1 安装底层支持库

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

sudo apt-get install python-opencv

sudo apt-get install python3-opencv

sudo apt-get install  libzbar-dev

6.2.2 SDK
  • 接口:

开放源码,详见D_mipicam.h

  • 编译:

./buildme

  • 安装:

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

6.2.3 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.2.4 Python sample
  • preview.py

实现实时视频预览

  • capture.py

抓拍一张jpeg图片

  • capture_yuv.py

抓拍一张yuv图片

  • video.py

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

  • capture2opencv.py

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

7 视频控制软件包使用

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

我们提供了一个脚本camera_i2c_config进行总线的管脚复用配置。

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

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

8.1 概述

树莓派Computer Module 和树莓派Zero的MIPI CSI-2 接口为22pin,对于VEYE-MIPI-327E,可直连,其他型号使用15转22pin的FPC线连接。硬件连接方法与树莓派经典版本不同,软件使用方法与上类似。

注:对于CM3,我们使用的是深圳市微雪电子有限公司生产的Computer Module IO Board Plus for raspberry pi 底板。树莓派官方CMIO板用法与此类似。

对于CM4,我们使用的是官方CMIO底板。

8.2 硬件连接

8.2.1 CM3连接

树莓派官方CMIO板接线方法请参见链接

我们使用的深圳市微雪电子有限公司生产的Computer Module IO Board Plus for raspberry pi 底板接线方法如下:

  • 当使用CAM1时:

连接 CD1_SDA到 GPIO2 .

连接 CD1_SCL 到 GPIO3 .

  • 当使用CAM0时:

连接 CD0_SDA 到 GPIO44 .

连接 CD0_SCL 到 GPIO45 .

如图所示

树莓派增强款正面图
树莓派增强款背面图


树莓派Computer Module与摄像头模组连接示意图
摄像头模组插接示意图
树莓派Computer Module 主板插接示意图


利用USB网线转换器帮助Computer Module 连接网络,HDMI接口接入显示器,电源线连接power接口提供电源。

8.2.2 CM4接口连接
Raspberry Pi CM4 system connec


8.3 树莓派Computer Module系统安装

树莓派官方CMIO板安装树莓派系统方法请参见链接

我们所用的深圳市微雪电子有限公司生产的Computer Module IO Board Plus for raspberry pi 底板安装树莓派系统具体方法请参见官方说明用户手册第七页。

8.4 视频流软件包使用

选项 -cs 0/1 可以支持同时连接两路camera到CM3,0 表示接到CAM0,1表示接到CAM1,其余选项见4.2。示例如下:

  • veye_raspipreview

./veye_raspipreview -cs 0 -t 20000

利用CAM0所连接的摄像头实现20s(即20000毫秒)的视频实时显示到HDMI输出,可以自行调节t的大小。

  • veye_raspivid

./veye_raspivid -cs 1 -t 5000 -o ~/test.h264

利用CAM1所连接的摄像头实现录像5s,录像文件保存到~/test.h264。可以自行调节t的大小来选择录制时间的长短。

8.5 视频控制软件包使用

点击链接下载dt-blob-dualcam.bin,改名为dt-blob.bin文件,将文件放在/boot下,然后执行命令:

其余选项具体使用说明详见:I2C脚本使用说明

9 FFC线备注

树莓派经典版型硬件连接所使用的为FFC异面线,如右图所示

树莓派Computer Module硬件连接所使用的为FFC同面线,如右图所示


FFC异面线
FFC同面线

10 常见问题和解决方法

  • could not find component 'vc.ril.rawcam'

mmal: mmal_component_create_core: could not find component 'vc.ril.rawcam'

mmal: Failed to create camera component

mmal: main: Failed to create camera component

由于树莓派的piOS版本繁多,在有一些版本中,预编译好的程序可能在运行时遇到此问题。此时,请重新编译一下veye_raspcam程序。具体方法是:进入source目录,运行buildme脚本。