车载后视场景分布式视频监控系统※

2015-07-03 03:33曾礼马忠梅刘佳伟赵旭强
单片机与嵌入式系统应用 2015年2期
关键词:车载分布式传输

曾礼,马忠梅,刘佳伟,赵旭强

(北京理工大学 计算机学院,北京100081)

引 言

据报道,我国由于后视镜盲区造成的交通事故约占30%。目前,市场上已经出现了一些数字化的汽车监控系统,常见的有分屏显示监控系统、有缝拼接监控系统和第8代“卫星”全景行车安全系统。分屏显示监控系统只是对图像进行简单的分屏显示,不能实时地将车辆周围的景象显示在屏幕上;有缝拼接监控系统不是将图像简单地叠加,而是对图像拼接处理,形成中间是汽车,周围是图像的全景图,缺点在于4个图像拼接之处存在明显的拼接缝;第8代“卫星”全景行车安全系统采用超广角摄像头,能够很好地消除图像拼接之处的拼接缝,形成汽车全景俯视图。

Android系统具有平台开放性,而且谷歌的“开放汽车联盟(OAA)”[1]致力于实现汽车与Android设备的无缝连接以及直接在汽车上内置Android车载系统;DM3730[2]集成了1 GHz的 ARM Cortex-A8内核和800 MHz的TMS320C64x+DSP内核。因此,基于Android和DM3730设计的车载分布式视频监控系统有着广阔的应用前景。

1 系统整体设计

车载分布式视频监控系统由视频采集模块、视频传输模块、视频拼接模块和视频显示模块4个模块组成。系统的整体设计示意图如图1所示。系统各模块之间的硬件接口框图如图2所示。

图1 车载分布式视频监控系统整体设计示意图

①视频采集模块:AM3715开发板通过USB-HOST接口外接USB摄像头,用Android操作系统的Java本地调用接口[3](JNI)和 V4L2(Video 4 Linux 2)视频驱动框架实时采集视频并显示。

图2 系统各模块之间硬件接口框图

②视频传输模块:两个(或多个)AM3715和DM3730开发板之间通过以太网相连,利用RTP组播协议和自定义同步机制将USB摄像头采集的图像实时传输至DM3730开发板的ARM端。

③视频拼接模块:DM3730开发板的ARM端运行嵌入式Linux(或Android)操作系统,通过TI公司提供的Codec Engine模块同时在ARM端和DSP端映射共享内存,使同步接收的两幅(或多幅)图像能够被ARM和DSP同时访问[4]。针对车载应用扩充嵌入式计算视觉库[5](EMCV),并移植和优化SURF开源项目 OpenSURF[6],DSP端能够实时拼接两幅(或多幅)图像,最后将拼接结果由共享内存返回ARM端。

④视频显示模块:视频显示是通过跨平台多媒体库SDL(Simple Direct Media Layer)来 完 成 的。其 中,AM3715开发板显示分离的USB摄像头图像,DM3730开发板LCD屏显示拼接完成的图像。

2 视频采集、传输和显示

2.1 Android V4L2视频采集模块

V4L2从Linux 2.5.x版本的内核开始出现,利用V4L2进行USB摄像头视频采集的流程[7]包括:①打开视频设备文件;②检查设备属性;③设置视频格式;④帧缓冲区管理;⑤循环采集视频;⑥关闭视频设备。

V4L2介于应用程序和硬件设备之间,应用程序可以通过3种方式访问内核层的数据:直接读/写方式、内存映射方式和用户指针方式。直接读/写方式需要在用户空间和内核空间不断拷贝数据,效率低下;内存映射方式将内核地址映射到用户地址空间,进程可以直接读写内存,避免了数据的拷贝,具有较高的效率;用户指针方式的内存片段是由应用程序自己分配的。车载分布式视频监控系统采用效率较高的内存映射方式。

2.2 RTP视频传输模块

鉴于以太网具有高速的传输能力和良好的可扩展性能,车载分布式视频监控系统通过RTP组播的方式在Android系统与嵌入式Linux系统之间传输USB摄像头采集的图像。参考文献[7]描述了利用RTP库JRTPLIB实现视频实时传输的过程。为了确保两个AM3715开发板与DM3730开发板之间图像传输的同步性,车载分布式视频监控系统设计了同步传输协议,协议描述如下:

(1)发送端

①每个发送端等待来自接收端的视频帧请求命令“R”,否则不执行发送操作。

②收到帧请求命令后,发送端首先向组播地址发送视频帧传输开始标识0x FE,以标识一帧视频传输的开始。

③将YUY2格式的图像依次向组播地址传输,每次传输m行,传输n次,并在每个RTP数据包的首字节位置添加RTP包传输序号(序号从0开始,依次增1)。假设YUY2图像宽度为width,高度为height,由于平均一个像素占2字节,所以每次传输的RTP包数据大小为(2m×width+1)B,传输次数n=height/m。

④传输结束时,向组播地址发送视频帧传输结束标识0x FF,以标志一帧视频传输的结束。

(2)接收端

①接收端向组播地址发送帧请求命令“R”,然后启动软件电子狗,并处于阻塞等待状态。

②若软件电子狗计时结束时仍未被喂狗,说明网络通信出现故障,则重新向组播地址发送帧请求命令“R”,并重启软件电子狗。

③依次接收来自每个发送端的RTP数据包,并根据IP地址和RTP包传输序号还原每帧视频,直至收到视频帧传输结束标识0x FF。

2.3 SDL视频显示模块

YUV格式在存储方式上分为打包格式(Packed Format)和平面格式(Planner Format),打包格式的 Y、U、V三个分量连续交叉存储,而平面格式的Y、U、V三个分量分开存储。实验中USB摄像头采集的图像格式是YUY2格式,而经过拼接完成的图像是YV12格式。YUY2格式是一种打包格式,以4∶2∶2方式打包,每个像素保留Y分量,而UV分量在水平方向上的采样率仅为Y分量的1/2,即存储顺序为[Y0U0Y1V0][Y2U2Y3V2]……[Y2nU2nY2n+1V2n]。YV12是一种平面格式,UV 分量在水平方向和垂直方向上的采样率均为Y分量的1/2。特殊地,YV12格式在UV提取时,需先将图像划分为若干个2×2的方阵,然后在每个方阵上提取一个U分量和一个V分量。例如,对于6×4的图像,YV12的采样方式如图3所示,其存储顺序为[Y0Y1Y2Y3Y4Y5Y6Y7Y8Y9Y10Y11Y12Y13Y14Y15Y16Y17Y18Y19Y20Y21Y22Y23][U0U1U2U3U4U5][V0V1V2V3V4V5]。

SDL支持Frame-Buffer,利用SDL可以在Android和Linux上直接显示YUY2和YV12格式的图像,不需要经过YUV到RGB格式的转换。不同的是,标准Linux的Frame-Buffer设备文件为/dev/fb0,而 Android Linux的Frame-Buffer设 备 文 件 是/dev/graphics/fb0。 利 用 SDL 显 示YUV格式图像的流程包括:①初始化视频设备;②设置视频显示模式;③创建YUV覆盖层;④轮询事件处理;⑤绘制YUV覆盖层;⑥显示YUV覆盖层;⑦释放YUV覆盖层;⑧退出SDL。

图3 YV12采样方式示意图

3 ARM+DSP双核视频拼接模块

3.1 Codec Engine双核通信设计

Codec Engine是ARM和DSP通信的桥梁,采用远程过程调用(RPC)的思想。ARM端作为客户端,DSP端作为服务器端,ARM和DSP之间的通信链路是共享内存,通信协议是DSP Link。Codec Engine有专门的内存管理驱动CMEM来管理ARM和DSP之间的共享内存,CMEM以内存池或内存堆的方式管理一个或者多个连续的物理块内存,并提供地址转换(虚拟地址和物理地址之间的转换)功能。

Codec Engine有核心引擎接口和VISA接口。核心引擎接口包括引擎的初始化接口、引擎运行状态的控制接口和内存的系统抽象层接口;VISA接口包括视频编/解码接口、音频编/解码接口、图像编/解码接口和语音编/解码接口。VISA接口的使用分为VISA创建、VISA控制、VISA处理和VISA删除4部分,通过VISA控制/处理的流程略——编者注。

Codec Engine的使用分为创建应用程序、实现Codec算法和集成Codec Server三部分。应用程序运行在ARM端,通过调用核心引擎接口和VISA接口与DSP进行通信;对于符合 XDM(eXpressDSP Digital Media)规范的Codec算法,Codec Engine的VISA接口不需要附加条件就能支持远端运行,对于符合XDAIS(eXpressDSP Algorithm Interface Standard)规范的非XDM算法,必须提供Codec Engine的存根和骨架中间件才能支持远端运行;Codec Server运行在DSP端,负责管理调度不同的Codec算法。

车载分布式视频监控系统接收端使用视频编码接口(VIDENC_)实现ARM端调用DSP端基于SURF(Speeded-up Robust Features)的图像拼接算法。应用程序的执行流程略——编者注。

3.2 基于SURF的视频拼接

系统采用SURF[7]算法检测和描述特征点。针对本系统,可以对算法进一步优化,提高系统的实时性。由于系统中摄像头的位置相对固定,因而可以预先计算图像之间的重叠位置,无需检测完全没有图像重叠的区域;同时,由于摄像头相对位置不变,图像之间的透视变化矩阵也不会变化,因此可以只计算一次透视变化矩阵,后续拼接使用第一次的透视变化矩阵,可进一步提高实时性。

(1)SURF特征点检测

SURF特征点检测是在尺度空间中进行的,使用Hessian矩阵行列式值检测特征点,尺度为σ的点X(x,y)的 Hessian矩阵 H(X,σ)定义为:

其中,Lxx(X,σ),Lxy(X,σ),Lyy(X,σ)为在尺度σ下的高斯函数的二阶偏导数在图像点X处的卷积。

SURF使用基于积分图的盒型滤波器(box filter)近似此高斯卷积过程,图4所示为9×9盒型滤波器分别对x,y,xy方向二维高斯滤波的近似。通过近似,将在点X(x,y)的二维高斯卷积转化为对其周围的加权计算过程,在此加权计算过程中,使用积分图计算图4中灰色矩形区域和白色矩形区域灰度值之和,将高斯滤波中大量的乘法运算转换为简单的加减运算。

图4 9×9的x方向,y方向,xy方向盒型滤波器

设对x,y,xy方向的二维高斯卷积的近似分别用Dxx,Dyy,Dxy表示,则可以通过 Det(H(X,σ))≈Dxx×Dyy-(W×Dxy)2近似 Hessian矩阵 H(X,σ)行列式值,其中 W 通常取0.9。当Det(H(X,σ))>0时,Dxx>0,点 X(x,y)为局部极小值点;Dxx<0,X(x,y)为局部极大值点。找到极值点后,在3×3×3空间中判断点X(x,y)是否比它周围的26个点都大或者小。如果是,则该点被视作候选特征点,然后对候选特征点在尺度空间中进行亚像素级插值,得到特征点的坐标。

(2)SURF特征点描述

特征点描述主要分两步:第一步是获取特征点的主方向,第二步是生成64维的特征点描述符。

为了获取特征点的主方向,计算以特征点为中心,半径为6σ(σ为特征点所在的尺度)内的所有点在x,y方向的Harr小波响应。选取一个大小为60°的扇形窗口旋转整个圆形区域,将窗口内所有x,y方向的响应值相加得到一个新矢量,以最长的矢量所在的方向作为特征点的主方向。

特征点描述需要将坐标轴旋转到主方向上,并将以特征点为中心的边长为20σ的区域划分为4×4个子窗口,每个子窗口分为5×5个采样点,计算每个采样点的沿主方向和垂直主方向的Harr小波响应,记为dx和dy,最终生成一个4维矢量v=(∑dx,∑dy,∑|dx|,∑|dy|),并将其归一化。总共4×4个子窗口,生成64维的描述符。

3.3 SURF在DM3730上的移植和优化

(1)SURF的移植

SURF算法实现基于OpenCV1.0,OpenCV库针对x86架构作了许多优化,但在DSP上的执行效率难以得到保证。EMCV是一个可运行在DSP上的OpenCV库,但只实现了部分OpenCV的数据结构和库函数。因此,车载分布式视频监控系统需要扩充EMCV库,以支持SURF在DM3730上的运行。扩充的库函数包括:cv Add、cv Add Weighted、cvConvertScale、cvCvtColor、cvGEMM、cvInvert、cv Merge、cvResetImageROI、cvResize、cvSVD、cvSetImageROI、cvSplit、cvWarpPerspective。为了便于 EMCV 库的扩充和优化,EMCV库通过CCS(Code Composer Studio)软件以lib静态库的形式提供给Codec算法使用,程序略——编者注。

此外,为了消除SURF对C++标准模板库的依赖,车载分布式视频监控系统设计了专门的容器结构和相应的操作,主要代码略——编者注。

(2)SURF在DM3730上的优化

SURF在DM3730上的优化分为项目级优化、指令级优化和缓存优化3个方面。项目级优化是通过合理地选择和配置相关的编译器优化选项,主要包括:调试模式选项(Debugging Model)、优化等级选项(opt_level)、代码大小选项(opt_for_sapce)、代码速度选项(opt_for_speed)、程序级优化(-op)等。为了最大限度地提高代码的执行效率,车载分布式视频监控系统选择的编译器优化选项为-o3、-ms0、-mf5、-op2、-mt、-mh、-mw。指令级优化包括选择合适的数据类型,消除指令和数据之间的相关性,使用内联(intrinsic)函数以及改善软件流水等。缓存优化是将CPU近期访问过的数据或者程序放置在Cache中,以提高CPU的执行速度。

4 测试结果及分析

图5展示了车载分布式视频监控系统的拼接效果,可以看出,图中的两幅待拼接的图像存在明显的旋转特性,拼接完成的图像有一定的缩放效果。

图5 视频监控系统的拼接效果图

结 语

从测试结果看,车载分布式视频监控系统基本能实现实时采集、实时传输、实时显示,经过优化后,图像拼接的效率基本能满足实时性要求,但系统整体性能还有待提高。

编者注:本文为期刊缩略版,全文见本刊网站www.mesnet.com.cn。

[1]Google launches the Android-based Open Automotive Alliance with Audi,Honda,GM,and more[EB/OL].[2014-08].http://www.theverge. com/2014/1/6/5279116/googleopen-automotive-alliance-android-car-announcement.

[2]TI Instruments.DM3730,DM3725 Digital Media Processors[EB/OL].[2014-08].http://www.timll.com/chinese/uploadFile/TIOP/DM3730_Datasheet.pdf.

[3]Lee Y H,Chandrian P,Li B.Efficient Java NativeInterface for Android Based Mobile Devices[C]//Trust,Security and Privacy in Computing and Communications (TrustCom),2011 IEEE 10th International Conference on.IEEE,2011:1202-1209.

[4]龚泽挚,蓝晓柯,郑雅羽.基于Android和DM3730的视频编码软件开发[J].电视技术,2013,37(17):76-79.

[5]胡楠.EMCV库扩充及车辆检测系统的嵌入式实现[D].大连:大连海事大学,2011.

[6]于海.OpenSURF在 TI DM642上的移植[J].电子科技,2012,25(5):133-136.

[7]王飞,孔聪.基于V4L2的Linux摄像头驱动的实现[J].电子科技,2012,25(2):86-87.

[8]赵学良.基于Android的流媒体引擎设计与实现[D].成都:电子科技大学,2012.

[9]Bay H,Tuytelaars T,Van Gool L.Surf:Speeded up robust features[M]//Computer Vision – ECCV 2006.Springer Berlin Heidelberg,2006:404-417.

[10]杨小辉,王敏.基于ASIFT的无缝图像拼接方法[J].计算机工程,2013,39(2):241-244.

[11]刘旭.多图像全景拼接技术研究[D].武汉:武汉理工大学,2012.

猜你喜欢
车载分布式传输
一种车载可折叠宿营住房
混合型随机微分方程的传输不等式
牵引8K超高清传输时代 FIBBR Pure38K
高速磁浮车载运行控制系统综述
奔驰S级48V车载电气系统(下)
关于无线电力传输的探究
分布式光伏热钱汹涌
分布式光伏:爆发还是徘徊
智能互联势不可挡 车载存储需求爆发
支持长距离4K HDR传输 AudioQuest Pearl、 Forest、 Cinnamon HDMI线