为了在车位检测系统中不使用DSP的情况下,达到实时处理和节约成本的目的,在嵌入式Linux系统中使用了CORTEX-A系列的NEON协处理器技术来优化一种车位图像检测算法的代码。
在CORTEX-A8平台上使用该图像处理算法进行了大量的处理测试,图像算法处理速度得到很大提升。最后在多个平台下使用该图像处理算法进行测试对比,使用了NEON技术后其算法处理速度提升明显,能够满足实时要求。
0 引言
随着城市越来越多家庭拥有汽车,相应的停车场建设数目也越来越多,停车场管理系统也越来越重要。
而国内城市车多人多,空间拥挤给停车厂管理带来诸多不便。车位检测系统设计成嵌入式终端是一个好的选择。图像检测算法的复杂度给实时检测带来难题,一般的图像处理都是基于DSP完成,这带来了成本的上升。
ARM 公司CORTEX-A 系列处理器的出现,极大地缓解了这个难题。
ARM 平台能够很好地支持Linux 系统,Linux 系统具有强大的网络通讯功能,也给程序移植等带来便利。本文的检测算法在ARM平台基于NEON技术进行了优化,在保证检测精度的同时,处理速度提升明显,与使用DSP相比,大大节约了成本,为停车场管理系统的研究提供新的方向。
1 ARM NEON技术介绍
ARM 的NEON 通用SIMD 引擎可有效处理当前和将来的多媒体格式,从而改善用户体验。NEON 技术是通过清晰方式构建的,并可无缝用于其本身的独立流水线和寄存器文件。NEON 技术是ARM Cortex-A系列处理器的128 位SIMD(单指令多数据)体系结构扩展,旨在为多媒体应用提供更加强大的加速功能,从而明显改善程序性能。它具有32 个寄存器,64 位宽(是16 个寄存器,128 位宽的双倍视图)NEON 指令特点如下:
(1)寄存器被视为同一数据类型的元素的矢量;
(2)数据类型可为:有符号/无符号的8 位、16 位、32 位、64 位单精度浮点;
(3)指令在所有通道中执行同一操作。
NEON 寄存器可在多个通道内进行并行运算,如图1所示。
NEON 的指令都是以v 字母开头的,例如:vadd.i16q0,q1,q2,这就是一个NEON 的指令了,很明显的特点就是v 开头,i 主要用来表明是一个整型(int),16 表示一个16 位的型,q0,q1,q2 都是128 位的寄存器(q 打头的寄存器都是128 位的)。这个指令就是让q1,q2 中装载8 个16位的数据,然后执行加法操作,最后放到q0中去。这么一个指令就完成了8次加法运算,这也就是性能的提升,对于其他运算也是如此。
2 系统设计和算法介绍
本系统基于CORTEX-A8平台实现,车位检测系统架构如图2所示。
采集通过模拟摄像头,由TVP5150解码后输出8位Y∶Cb∶Cr=4∶2∶2的数据传送的A8平台,TVP5150驱动基于VIDEO FOR LINUX2(V4L2)开发,因此视频采集程序调用V4L2相关API函数即可完成。然后调用相关图像处理程序,提取多个图像特征,与背景图像对比,进行有车无车检测,然后TCP/IP网络 将图像和有车位车情况发送到上位机。
车位检测算法流程如图3所示。
本系统目前在一处地下停车场进行测试验证,如图4在停车中采集到的背景和待测图像,通过对100幅采集到800×600 分辨率的现场图像,在CORTEX-A8 平台上进行测试,平均检测时间为538 ms,该算法在地下停车场中准确率97%.表1 中给出了处理一幅待测图像CORTEX-A8 和ARM11 平台优化前平均时间的测试对比结果(均使用GCC交叉编译)。