胡跃辉 石珩臻 金韬 谢凌锐 康吴伟 方勇
摘要:多通道同步视频采集技术在机器视觉领域有着重要的应用,论文给出了一种基于全志H5的8通道视频同步采集设计和实现,结果表明,这种设计能够以不超过10微秒的同步延迟,实现约90帧/秒的640X480彩色视频的8通道高速采集,具有性价比高、实现简单、外设接口丰富且具备一定的视频数据后处理能力的特点。
关键词:多通道同步视频采集;嵌入式操作系统;UVC摄像头;GPIO
中图分类号: TP391 文献标识码:A 文章编号:1009-3044(2018)18-0020-04
High Speed Synchronous Acquisition of 8 Channel Video Based on ARM
HU Yao-hui1,SHI Heng-zhen1,2,JIN Tao1,2,XIE Ling-rui1,3,KANG Wu-wei1,2,FANG Yong1
(1.Academy of Photoelectric Technology,Hefei University of Technology,Hefei 230009,China; 2.School of Computer & Information, Hefei University of Technology,Hefei 230009,China; 3.School of Instrument Science & Opto-electronics Engineering, Hefei University of Technology,Hefei 230009,China)
Abstract: Multi channel synchronous video acquisition technology has an important application in the field of machine vision. The design scheme and implementation of 8 channel video synchronization acquisition based on ALLWINNER H5 were presented in this paper. The result shows that the design can achieve 8 channels high speed acquisition of 640X480 color video at a rate of about 90 fps, with a synchronization delay less than 10 microseconds. It has the characteristics of high cost performance, simple implementation, rich peripheral interface and certain post-processing ability of video data.
Key words: multi-channel synchronous video acquisition; embedded operating system; UVC camera; GPIO
1 引言
為了实现基于视觉的实时目标的三维重建及复现[1],绝大多数情况下都需要对目标进行多个不同方位的视频采集。如果条件允许,则设置的图像传感器越多,同步采集的速率越快,则目标三维重建时的所能达到的精度才可能越高。
本文介绍了一种8通道的同步实时视频采集子系统,该系统作为实时视频源应用在一个8视点柱镜式立体显示系统中。该采集系统要求实现以不低于60FPS(frame per second FPS 帧/秒)VGA(640X480)高速同步采集,同时还要具有成本低、便携性好、现场容易配置和部署的特点。
2 设计
2.1图像传感器及接口总线
图像传感器模组的接口总线[2-3]可以大致分为两类,一类是专用总线CSI,一类是通用总线比如UVC(USB video class)。
采用专用总线的图像采集系统,采集速度最快,能够充分挖掘出图像传感器本身的全部性能,但是往往具有总线长度太短,不适合长距离现场部署,以及兼容性差,需要专门设计,移植性不好的缺点。
采用通用总线,则有可能受限于总线的带宽,并且要和总线上其他的设备竞争带宽资源,所以每秒采集的像素点数是受限的,并且多个设备特别是同类设备同时接入的人情况下,同步性难以预测和控制。
通过上述讨论分析,我们选择了支持UVC协议的基于USB总线的图像传感器模块(以下称摄像头),以便实现低成本、便于现场部署和配置的要求,同时省略了专门总线设计从而还解决了兼容性、移植性的问题。摄像头的图像传感器芯片为OV2710[4],这是一款获得广泛应用的高速CMOS廉价彩色图像传感器,理论上在VGA模式下具有120FPS的采集速率。
但是,受限于摄像头的图像处理芯片及方案,不一定能够实现图像传感器数据手册中的全部功能和模式,所能实现的采集模式需要进行实际测试才能确定。比如我们所采用的这款基于OV2710的摄像头,在VGA下可以实现的模式为120FPS@MJPEG,或60FPS@YUV422。另外,后期实测表明,在较低速度的YUV模式下,其图像质量明显比MJPEG编码模式要好。
2.2处理机及操作系统
当确定摄像头采用UVC协议之后,由于各大主流操作系统均提供了设备驱动支持,包括微软操作系统、Linux操作系统、Mac OS和Android等等,所以平台兼容性是非常好的,UVC摄像头甚至因此被称为“免驱摄像头”。
但是,尽管目前UVC1.5协议已支持到USB3.0总线,但目前廉价的UVC摄像头大都还是只支持到USB2.0,所以只要是所有的摄像头最终都连接在一个USB HOST上再进入主机进行处理,则在考虑到USB2.0的实际运行有效总线带宽和各挂载USB设备带宽竞争的情况下,目前支持到2路 VGA@100FPS采集就已经是非常不错了,但远远不能满足我们系统所要求的8路采集要求。
所以我们采用了ARM+摄像头的结构方式来实现每一路视频采集,这里的ARM为基于全志H5(64位,4核Cortex A53)的廉价开发板NanoPi NEO Plus2(长X宽=52mmX40mm,以下简称NEO+2)[5],主要技术参数为1GB DDR3 RAM、8GB eMMC、USB2.0X3、千兆以太有线网口X1以及WIFI和蓝牙等模块各一。相比购买IP摄像头来实现每一路图像采集通道,自行配置的ARM+摄像头,本身就可以作为处理器进行更为自由的视频后处理工作。
进一步的,我们采用了开源操作系统Ubuntu来运行视频采集系统,实验中采用了每块H5开发板各配置一个摄像头的方式。这是因为,虽然如前所述,在USB 2.0总线下可以支持2路 100FPS@VGA,但是未来如果分辨率从VGA提升到1024X768,甚至更高,则存在实际传输带宽不能满足的可能性;并且,视频采集同时都伴随着海量视频图像实时处理任务,单板对单路视频采集算力更为充裕,对于NEO+2而言,也是非常廉价的。
此外,采用Ubuntu系统不仅可以支持上述H5视频采集子系统的并行协同计算,对于采用Linux系统的上位机,也可以同样支持异构协同计算[6-7]。这里的各子系统的互联互通可以基于千兆网或者无线协议,NEO+2也都是直接支持的。
2.3同步设计
不采用IP摄像头的方式的另一个主要原因是以太网的网络延迟问题,这个延迟量不仅是随机的,而且平均值也在1ms以上,廉价的解决方案几乎无可能降低到1ms以下。所以如果可能的话,还是尽量避免采用IP方式来同步各互联采集通道。
采用ARM+摄像头的方式,则可以利用开发板上GPIO端口资源,来实现硬件触发同步,从而实现微秒级的同步。
当需要同步的摄像头是8个时,可以将一路摄像头所在的NEO+2 开发板设为主机Host,另外7路设为从机Slavei(i=0,1,…,6)。如果设置一个信号线为命令线CMDline,从Host输出连接至各从机,再设置一根信号线为状态线STATline,由各从机发出由Host接收,则通过设计并实现主从机之间命令线、状态线的交互时序,就可以实现同步的视频采集。
3 实现
3.1同步总线
NEO+2 提供了WiringPi函数库[5],可以很方便地实现对GPIO的操作访问,在root模式下,利用gpio readall 命令就可以获得可用的如图1(a)所示的 GPIO端口列表。参考图1(a)及文献[5],可以得到符合上述总线要求的一种配置如图1(b)所示,图1(b)中Out表示对应的GPIO管脚被设置为输出信号,In则表示设置为输入信号。
图2给出了主从机状态线、命令线的时序逻辑。由于各采集通道异步运行,所以在启动后进入循环前首先需要进行等待以便完成首次同步,即主机启动后命令线置高,各从机启动后状态线置低,主机检测到所有从机状态线均为低之后,置命令线为低,而后再进入采集同步循环。
从机在检测到主机命令线为低之后,开始进行一帧图像的同步采集和处理,处理完毕后设置状态线为高,并等待命令线由低变高。主机在完成一帧图像的采集和处理之后设置命令线为高,然后进行状态线检测,如此循环,直至按照要求完成视频采集和处理任务。
3.2高速采集
如前所述可知,在Ubuntu下UVC摄像头的开发是基于V4L(video for linux)框架的USB摄像头来实现的,目前采用的V4l2则是V4l的改进版本,这个版本克服了早期V4l版本的很多缺陷,不仅向前兼容V4l,而且还支持更多的硬件设备。相关V4l开发的文献有很多[8-10],这里就不再赘述,为了捕获程序的可靠高速运行,我们需要注意以下几个方面问题:
1)利用open函数打开设备fd时,需要设置为非阻塞工作模式即应包含O_NONBLOCK参数。
2)捕获数据的访问方式应采用MMAP方式即内存映射模式。
3)对设备fd,建议采用select函数实现非阻塞监听模式。
上述三个方面可以很大程度上避免对摄像头访问因各种原因造成的死机阻塞现象。
4 结果与讨论
图3(a)为本文所用搭建的8个NEO+2 ARM处理器阵列,用于实现8通道视频同步采集与处理,其中1元硬币作为尺寸参照物,ARM的操作系统为Ubuntu16.04,同步信号利用GPIO实现。图3(b)为基于OV2710的8摄像头阵列,采用USB2.0接口和分别与对应的处理器阵列相连接,目标为仿真半身塑胶人像。所选UVC协议摄像头,在VGA模式下,具有120FPS@MJPEG的标称采样速度。
首先利用V4L实现了单通道的120FPS@MJPEG VGA视频的捕获,连续采集100帧(不做其他任务)时获得实际采集速率为98.7FPS,结果可以接受。
然后利用示波器觀察测量了最快情况下的GPIO读写操作,读写操作利用WiringPi实现,测量结果表明利用WiringPi实现的GPIO的信号转换速度不超过1微秒。结合图2可以看出,在进入循环周期之后,每个周期需要的状态翻转次数最多为3次,因此同步信号引发的同步延迟仅为3微秒以内。其他的延迟可以认为都来自各通道的各自采集周期的时间上差异性。
最后,测试了连续1000帧同步条件下8通道采集实验,采集参数为120FPS@MJPEG VGA,在采集数据不做转储的条件下,同步采集速度达到了91.7FPS,如图4所示,图中上半部的红框部分为运行的摄像头及系统的基本状态。下半部黄框部分为运行统计结果,可以看到,进入同步状态需要一定的时间,不到2秒。
相比I2C(Inter-Integrated Circuit 集成电路总线)等总线方式的同步,这种方式显然也具有一定的不足性,这是因为本方案实际上是采用硬件总线握手方式(利用GPIO)来实现的,因为只有2根总线(指主机和单个从机之间),所以对更复杂一些運行机制缺乏足够的协议支持。
而I2C总线虽然表现为硬件总线方式通讯,但是实际上却可以建立起足够的命令寄存器、状态寄存器,实现完备的软件同步通讯协议,从而可靠的完成高速同步任务,但I2C从模式驱动需要自行实现,开发难度相对较大。并且如果是基于寄存器方式实现同步,即使是命令和状态寄存器各为8位寄存器,由于是串行通信,最少需要16个时钟周期(指GPIO平均读写周期,约1微秒),才能完成一次数据通讯(8位地址+8位寄存器)。
所以,如果是8通道情况即每通道都有一个8同步寄存器,则完成1次同步信息交互最少需要16*8=128个时钟周期,相比本文方案的最多需要3个时钟周期3微秒,I2C方案的同步开销要在130微秒以上。
因此,从开发难度和同步延迟而言,本文方案仍然相较I2C为优。而且试验也表明,这种GPIO信号线硬同步方式,稳定性也是很好的,整个试验过程中未发现同步故障,能够满足短时应用要求。
5 结论
本文讨论了一种便于实现的廉价高速同步高速视频采集方案,该方案基于UVC摄像头及NEO+2 开发板,实现了90FPS以上同步视频采集(@VGA)。方案所选取的NEO+2本身具有的64位多核处理能力和丰富外设接口,可以满足需要采用多通道高速视频采集系统的现场应用和工程评估场合,特别是对机器视觉和三维重建研究。利用类似的方案,特别适合于需要快捷实现高速多通道同步视频采集系统搭建和配置,而不需要了解更多的设备驱动细节,从而使得工程研究人员更加聚焦视觉算法本身研究的场合。
参考文献:
[1] 佟帅,徐晓刚,易成涛,邵承永.基于视觉的三维重建技术综述[J].计算机应用研究, 2011,28(07):2411-2417.
[2] MIPI Alliance, Inc. MIPI Alliance Specification for Camera Serial Interface 2[EB/OL]. [2009-12-15].https://www.mipi.org.
[3] USB-IF. USB Device Class Definition for Video Devices,Revision1.5 [EB/OL]. [2012-08-09]. https://www.usb.org/developers/docs/devclass_docs.
[4] Omni Vision Technologies Inc.. OV2710数据手册,version 2.03[EB/OL].[2011-04-06]. https://wenku.baidu.com/view/9072d680770bf78a652954d4.html.
[5] FriendlyARM. NanoPi NEO Plus2, [EB/OL]. [2018-04-24].http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO_Plus2.
[6] 卢风顺, 宋君强, 银福康,等. CPU/GPU协同并行计算研究综述[J]. 计算机科学, 2011, 38(3):5-9.
[7] 杨洪余, 李成明, 王小平,等. CPU/GPU异构环境下图像协同并行处理模型[J]. 集成技术, 2017, 6(5):8-18.
[8] 涂继辉, 余厚全, 佘新平. 基于ARM的视频监控系统的设计与实现[J]. 长江大学学报(自科版), 2010, 07(2):89-91.
[9]王元伟, 刘国秀. 基于V4L的视频采集系统的设计[J]. 铁路计 算机应用, 2010, 19(7):30-34.
[10] Mei D. Web Camera Design Based On Embedded Linux[J]. Microcomputer Information, 2007.