基于CMOS+ARM的运动图像识别系统设计*

2016-08-11 06:59尹成瑞
计算机与数字工程 2016年4期

尹成瑞

(青海大学 西宁 810016)



基于CMOS+ARM的运动图像识别系统设计*

尹成瑞

(青海大学西宁810016)

摘要嵌入式视频监控系统充分利用ARM技术和网络的科技成果,实现远程监控、体积小巧、功能稳定的监控产品。开发一套基于嵌入式ARM的远程视频监控系统,系统采用USB摄像头作为前端图像采集传感器,图像数据通过USB总线传出给CPU做处理,在此基础上实现图像的背景减除算法的应用通过编写USB摄像头底层驱动来实现图像的传输,通过V4L2接口获取视频图像,将获取的图像经过滤波灰度转换后加以背景减除,实现运动目标的入侵检测了。通过实验测试,检测系统在其运行的24小时内对运动物体的检测效果良好。

关键词CMOS; ARM; 背景减除算法; USB摄像头;V4L2

Class NumberTP391

1 引言

现有的一些基于PC机的视频监控系统,在实际的工程应用过程中,暴露出一些不足,其主要缺点是:价格成本过高,设备体积较大安装不便,系统工作的不稳定性以及无法满足无人监控状态下智能化的要求。本文讨论了嵌入式网络视频监控系统的基本设计方法,设计了基于ARM9的USB摄像头视频采集、图像传输以及运动检测的应用系统。

2 硬件方案

相对于高成本、复杂的CCD图像传感器,CMOS(Complementary Metal-Oxide Semiconductor)图像传感器正在被越来越多的人所接受,由于其工艺简单、便于大规模生产、低功耗低成本的优势导致CMOS将取代CCD成为图像传感器的主流。但是它也有其致命的缺点,就是CMOS器件集成度高,导致相互之间光电磁干扰严重,噪声对成像质量影响很大。近年来,随着CMOS电路消噪技术的发展,为生产高密度优质的CMOS成像器件提供了良好的条件,使得CMOS摄像头成品成为市场的主导。如今市面上的摄像头多采用USB接口,前端采集、A/D转换、图像压缩都集成在一起,通过USB总线能把图像数据完整地传送给CPU做进一步处理。目前采用CMOS+ARM作为处理器的典型系统如图1所示。

图1 基于CMOS+ARM的图像识别系统硬件构成

通过方案分析得出:ARM+CMOS的模块化程度比较高,这样方便系统的集成和系统的测试;ARM处理器对与Linux操作系统有很好的支持,系统移植方面的工作有前人的成果可以参考,而DSP在支持操作系统方面还有大量工作要做。在不需要实现复杂算法的前提下,ARM9处理器的性能可以胜任这些算法流畅的工作。

3 基于V4L2的摄像头图像采集模块实现

图像采集是系统最重要的功能模块之一。本模块完成从USB摄像头采集视频图像的功能,采集的方法是基于videoforlinux2(v4l2)的。V4L2是V4L的升级版本,为Linux下视频设备程序提供了一套接口规范,包括一套数据结构和底层V4L2驱动接口。摄像头硬件驱动必须遵循该标准实现相应的open、write、ioctl等方法,应用程序则通过V4L2标准提供的一套API接口访问摄像头,这种设计方法屏蔽了底层硬件的细节,为上层用户提供了统一的抽象接口,具有很好的通用性和可移植性。

程序流程图如图2所示。

图2 视频采集程序示意图

根据视频采集流程图,具体实现函数格式和函数功能如下所示:

1) 设置视频捕获格式

memset(&vd->fmt, 0, sizeof(struct v4l2_format));

vd->fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

vd->fmt.fmt.pix.width = vd->width;

vd->fmt.fmt.pix.height = vd->height;

vd->fmt.fmt.pix.pixelformat = vd->formatIn;

vd->fmt.fmt.pix.field = V4L2_FIELD_ANY;

ret = ioctl(vd->fd, VIDIOC_S_FMT, &vd->fmt);

}

2) 向驱动申请帧缓存

memset(&vd->rb, 0, sizeof(struct v4l2_requestbuffers));

vd->rb.count = NB_BUFFER;

vd->rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

vd->rb.memory = V4L2_MEMORY_MMAP;

ret = ioctl(vd->fd, VIDIOC_REQBUFS, &vd->rb);

v4l2_requestbuffers结构中定义了缓存的数量,驱动会据此申请对应数量的视频缓存。多个缓存可以用于建立FIFO,来提高视频采集的效率。

3) 获取每个缓存的信息,这里不使用传统的read/write函数来实现数据的传输,考虑到传输效率,使用mmap函数将内核空间映射到用户空间,从而应用程序可以直接访问内核空间。

for (i = 0; i < NB_BUFFER; i++) {

memset(&vd->buf, 0, sizeof(struct v4l2_buffer));

vd->buf.index = i;

vd->buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

vd->buf.memory = V4L2_MEMORY_MMAP;

ret = ioctl(vd->fd, VIDIOC_QUERYBUF, &vd->buf);

}

4) 将帧缓冲加入到FIFO

for (i = 0; i < NB_BUFFER; ++i) {

memset(&vd->buf, 0, sizeof(struct v4l2_buffer));

vd->buf.index = i;

vd->buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

vd->buf.memory = V4L2_MEMORY_MMAP;

ret = ioctl(vd->fd, VIDIOC_QBUF, &vd->buf);

if (ret < 0) {

perror("Unable to queue buffer");

goto fatal;;

}

}

5) 开始采集视频

ret = ioctl(vd->fd, VIDIOC_STREAMON, &type);

6) 取出FIFO缓存中已经采样的帧缓存

memset(&vd->buf, 0, sizeof(struct v4l2_buffer));

vd->buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

vd->buf.memory = V4L2_MEMORY_MMAP;

ret = ioctl(vd->fd, VIDIOC_DQBUF, &vd->buf);

4 基于背景减除算法的模块实现

背景减除法主要由下面四步组成:

1) 图像的二值化

从USB摄像头采集过来的图像一般为RGB图像,为了降低运算量,需要把彩色图像转换为黑白图像,即把RGB图像转换为YUV图像。彩色图像中一般每个像素用需要三个字节表示,而YUV图像只需要一个字节表示,这样就大大降低了数据量,加快了数据的传输速率。它们之间的转换可以用式(1)来表示,每个字节对应着R、G、B分量的亮度,经过转换的YUV图像信号是用一个字节来这个像素点的灰度值,它的大小是0~255之间的,255表示白色,0表示黑色。

Gray(x,y)=0.11*R(x,y)+0.59*G(x,y)

+0.3*B(x,y)

(1)

其中Gray(x,y)是黑白图像在坐标(x,y)处的灰度值,从上式中观察到绿色的权值是最大的,为0.59,因此为了加快图像转换的速率,有时也只选取绿色作为转换灰度的标准。

以上转换的像素点灰度值是介于0~255之间的,对于运动物体的监测一般还要做二值化处理,即选取一个阈值thresh,比较各像素点和这个阈值,如果小于阈值,则为黑色,大于阈值就是白色,具体公式如下

(2)

式中,thresh为二值化阈值。

2) 滤波去噪

考虑到嵌入式平台对算法的高度敏感性,采用均值滤波进行去噪,图像均值滤波就是根据像素点周围8个点取平均值来确定该点像素的值,公式如下:

f(x,y)=1/8*(f((x-1),y)+f((x-1),

(y-1))+f((x-1),(y+1))

+f(x,(y-1)+f(x,(y+1)

+f((x-1),y)+f((x+1),

(y-1))+f((x+1),(y+1))

(3)

3) 背景建模

动态背景法即动态地去实时更新背景图像,不仅解决了静态背景中预先设定图像的麻烦,还弥补了帧差法中的―空心问题,动态背景更新法的公式如下

B(x,y,i)=B(x,y,i-1)+aF(x,y,i)

(4)

其中,B(x,y,i)是更新后的背景帧,B(x,y,i-1)是更新前的背景帧,F(x,y,i)是前景帧,a是更新的权值,当有新的一帧到来时,它将被根据权值a叠加到背景帧上形成新的背景模型。

4) 前景背景相减,与阈值比较

背景差法就是将前景帧和背景帧相减,具体公式如下

f(x,y,i)=F(x,y,i)-B(x,y,m)

(5)

其中f(x,y,i)是差分结果,F(x,y,i)是前景帧,B(x,y,m)是背景帧。这里设定一个阈值T,当f(x,y,i)>T时,该像素点被标记为运动区域,当f(x,y,i)

(6)

流程图如图3所示。

图3 背景减除法流程图

提取图像算法,一般用的是OPENCV图像函数库,但是OPENCV库对GUI有一定的依赖,而且ARM9处理器没有浮点运算器,因此对OPENCV的一些算法的执行效率有影响,所以这里移植Linux下开源软件MOTION的库函数来实现背景减除法。这里将Motion移植到构建的ARM平下运行,背景建模和背景减除算法都在alg.c函数中,其中的算法关键代码如下:

· 背景建模:void alg_update_reference_frame(struct context *cnt, int action)

· 函数参数:cnt是当前线程的环境参数,其中包括当前的背景图,action是更新权值。

· 返回值:无

· 函数功能:计算背景图片是否需要更新,如需要则根据运动区域和更新权值去计算更新后的背景模型。

· 前景检测:int alg_diff_standard(struct context *cnt,unsighed char * new)

· 函数参数:cnt是当前线程的环境参数,其中包括当前的背景图,new是需要处理的前景图片

· 返回值:正常返回0,否则是-1

· 函数功能:标准判断前景图片和背景图片差异的算法。整体思路是将前景图片和背景图片相减,图像中的每个像素都已经灰度化,即它是一个0~255的一个数值,相减后得到结果如果大于阈值,即认为此像素的前景是运动的。

5 系统测试及分析

由于室外光线比较强,会对背景减除法的背景建模造成干扰,因此为了实验的效果,本实验是在室内进行测试的。将摄像机部署在室内的某处,当没有物体进入监测区域时,摄像机不会去拍照,即检测到运动物体。一旦有人进入监测区域内,摄像机就会把整个过程记录下来,保存成JPEG照片。

运动检测的评价指标主要有漏检率和误检率,前者是指有入侵物体,但系统没检测到;后者是指没有入侵物体,但是由于外界的干扰,系统会检测到。经过100次的测试统计如表1所示。

表1 运动物体检测评价

经过分析,漏检的运动物体主要有以下特征:运动物体的颜色和背景颜色相近;运动目标较小并且运动较快;环境光线太暗。

误检的情况主要发生在以下情况下:摄像头出现晃动;有阴影的干扰。

通过实验测试,检测系统在其运行的24小时内对运动物体的检测效果良好,未出现系统跑飞和掉电情况。

6 结语

随着嵌入式处理器的发展和视频检测技术的不断完善,未来的智能视频监控系统将会更加完善,高清智能网络化将是未来的趋势。该系统在部署时,只需外接电源和网线即可,安装成本低,可行性高。本系统区别与一般网络摄像机的优点是具有一定的智能性,能在无人监控的情况下完成对固定区域的检测工作。

参 考 文 献

[1] 雷文华.机器视觉及其应用(系列讲座)第一讲机器视觉发展概述[J].应用光学,2006,27(5):14.

LEI Wenhua. Machinevision and it application(Lecture series) General situating of machine vision[J]. Journal of Applied Optics,2006,27(5):14.

[2] 王永清,何波,王乾,等.Linux下基于ARM920T的USB摄像头图像采集[J].微计算机信息(嵌入式与SOC),2007,23(1-2):176-177.

WANG Yongqing, HE Bo, WANG Qian, et al. Getting image data with USB camera based on Linux and ARM920T[J]. Microcomputer Information(Embedded and SOC),2007,23(1-2):176-177.

[3] 张文杰.戚飞虎.江卓军.实时视屏监控系统中运动目标检测和跟踪的一种实用方法[J].上海交通大学学报,2002,12(36):12.

ZHANG Wenjie, QI Feihua, JIANG Zhuojun. A practical method for detecting and tracking objects in image sequences in a real-time video surveillance and monitoring system[J]. Journal of Shanghai Jiaotong University,2002,12(36):12.

[4] 吴松,王少荣.基于嵌入式Linux的智能机器人设计[J].机电工程技术,2007,36(4):59-61.

WU Song, WANG Shaorong. Design of intelligent robot based on embedded Linux[J]. Mechanical and Electrical Engineering Technology,2007,36(4):59-61.

[5] 桑兴民,王晓明,姚新文,等.基于ARM的最小应用系统设计与开发[J].微计算机信息(嵌入式与SOC),2007,23(2.2):154-155,62.

SANG Xingpin, WANG Xiaoming, YAO Xinwen, et al. A Design and Development of the Least Application System about ARM[J]. Microcomputer Information(Embedded and SOC),2007,23(2.2):154-155.

[6] 吴涛,毕笃验.JPEG2000图像压缩算法研究[J].计算机应用与软件,2007,24(9):155-156.

WU Tao, BI Duyan. JPEG2000 image compression algorithm[J]. Computer Applications and Software,2007,24(9):155-156.

[7] 高迎慧,侯忠霞,马艳南.基于DSP+FPGA的数字视频信号处理系统[J].沈阳航空工业学院学报,2007,24(3):69-71.

GAO Yinghui, HOU Zhongxia, MA Yannan. Based on DSP+FPGA digital video signal processing system[J]. Journal of Shenyang Institute of Aeronautical,2007,24(3):69-71.

[8] 赵永勇,张永健.基予Video4Linux的视频图像采集实现[J].电脑编程技巧岛维护,2006(5):75-77.

ZHAO Yongyong, ZHANG Yongjian. Video image acquisition and Implementation Based on Video4Linux[J]. Computer Programming Skill & Maintenance,2006(5):75-77.

[9] 王滔,季晓勇.在嵌入式Linux平台上使用USB摄像头[J].徽计算机应用,2006(1):52-54.

WANG Tao, JI Xiaoyong. On the embedded Linux platform using USB camera[J]. Microcomputer Applications,2006(1):52-54.

[10] 张倩,尤一鸣.基于嵌入式Linux的视频监控系统[J].天津工业大学学报,2007,26(2):65-68.

ZHANG Qian, YOU Yimin. Video-capturin system based on embedded Linux[J]. Journal of Tianjin Polytechnic University,2007,26(2):65-68.

收稿日期:2015年10月11日,修回日期:2015年12月27日

作者简介:尹成瑞,男,硕士,讲师,研究方向:计算机网络。

中图分类号TP391

DOI:10.3969/j.issn.1672-9722.2016.04.036

Moving Image Recognition System Based on CMOS+ARM

YIN Chengrui

(Qinghai University, Xining810016)

AbstractEmbedded screen monitoring system makes full use scientific and technological achievements of the ARM technology and networks, remote monitoring, compact, stable monitoring product. a set of remote screen monitoring system is developed based on embedded ARM, the system uses the USB camera as the front image acquisition sensor, the image data to the CPU via the USB bus came to do processing, image background subtraction algorithm based on this application by writing USB camera driver to achieve the underlying image transmission, access to screen images via V4L2 interface image acquired after filtering through gradation conversion to background subtraction, intrusion detection of a moving target. Through experimental test, the detection system within 24 hours of its operation good moving object detection results.

Key WordsCMOS, ARM, background subtraction algorithm, USB camera, V4L2