尹成瑞
(青海大學 西寧 810016)
?
基于CMOS+ARM的運動圖像識別系統(tǒng)設計*
尹成瑞
(青海大學西寧810016)
摘要嵌入式視頻監(jiān)控系統(tǒng)充分利用ARM技術和網(wǎng)絡的科技成果,實現(xiàn)遠程監(jiān)控、體積小巧、功能穩(wěn)定的監(jiān)控產(chǎn)品。開發(fā)一套基于嵌入式ARM的遠程視頻監(jiān)控系統(tǒng),系統(tǒng)采用USB攝像頭作為前端圖像采集傳感器,圖像數(shù)據(jù)通過USB總線傳出給CPU做處理,在此基礎上實現(xiàn)圖像的背景減除算法的應用通過編寫USB攝像頭底層驅動來實現(xiàn)圖像的傳輸,通過V4L2接口獲取視頻圖像,將獲取的圖像經(jīng)過濾波灰度轉換后加以背景減除,實現(xiàn)運動目標的入侵檢測了。通過實驗測試,檢測系統(tǒng)在其運行的24小時內對運動物體的檢測效果良好。
關鍵詞CMOS; ARM; 背景減除算法; USB攝像頭;V4L2
Class NumberTP391
現(xiàn)有的一些基于PC機的視頻監(jiān)控系統(tǒng),在實際的工程應用過程中,暴露出一些不足,其主要缺點是:價格成本過高,設備體積較大安裝不便,系統(tǒng)工作的不穩(wěn)定性以及無法滿足無人監(jiān)控狀態(tài)下智能化的要求。本文討論了嵌入式網(wǎng)絡視頻監(jiān)控系統(tǒng)的基本設計方法,設計了基于ARM9的USB攝像頭視頻采集、圖像傳輸以及運動檢測的應用系統(tǒng)。
相對于高成本、復雜的CCD圖像傳感器,CMOS(Complementary Metal-Oxide Semiconductor)圖像傳感器正在被越來越多的人所接受,由于其工藝簡單、便于大規(guī)模生產(chǎn)、低功耗低成本的優(yōu)勢導致CMOS將取代CCD成為圖像傳感器的主流。但是它也有其致命的缺點,就是CMOS器件集成度高,導致相互之間光電磁干擾嚴重,噪聲對成像質量影響很大。近年來,隨著CMOS電路消噪技術的發(fā)展,為生產(chǎn)高密度優(yōu)質的CMOS成像器件提供了良好的條件,使得CMOS攝像頭成品成為市場的主導。如今市面上的攝像頭多采用USB接口,前端采集、A/D轉換、圖像壓縮都集成在一起,通過USB總線能把圖像數(shù)據(jù)完整地傳送給CPU做進一步處理。目前采用CMOS+ARM作為處理器的典型系統(tǒng)如圖1所示。
圖1 基于CMOS+ARM的圖像識別系統(tǒng)硬件構成
通過方案分析得出:ARM+CMOS的模塊化程度比較高,這樣方便系統(tǒng)的集成和系統(tǒng)的測試;ARM處理器對與Linux操作系統(tǒng)有很好的支持,系統(tǒng)移植方面的工作有前人的成果可以參考,而DSP在支持操作系統(tǒng)方面還有大量工作要做。在不需要實現(xiàn)復雜算法的前提下,ARM9處理器的性能可以勝任這些算法流暢的工作。
圖像采集是系統(tǒng)最重要的功能模塊之一。本模塊完成從USB攝像頭采集視頻圖像的功能,采集的方法是基于videoforlinux2(v4l2)的。V4L2是V4L的升級版本,為Linux下視頻設備程序提供了一套接口規(guī)范,包括一套數(shù)據(jù)結構和底層V4L2驅動接口。攝像頭硬件驅動必須遵循該標準實現(xiàn)相應的open、write、ioctl等方法,應用程序則通過V4L2標準提供的一套API接口訪問攝像頭,這種設計方法屏蔽了底層硬件的細節(jié),為上層用戶提供了統(tǒng)一的抽象接口,具有很好的通用性和可移植性。
程序流程圖如圖2所示。
圖2 視頻采集程序示意圖
根據(jù)視頻采集流程圖,具體實現(xiàn)函數(shù)格式和函數(shù)功能如下所示:
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結構中定義了緩存的數(shù)量,驅動會據(jù)此申請對應數(shù)量的視頻緩存。多個緩存可以用于建立FIFO,來提高視頻采集的效率。
3) 獲取每個緩存的信息,這里不使用傳統(tǒng)的read/write函數(shù)來實現(xiàn)數(shù)據(jù)的傳輸,考慮到傳輸效率,使用mmap函數(shù)將內核空間映射到用戶空間,從而應用程序可以直接訪問內核空間。
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緩存中已經(jīng)采樣的幀緩存
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);
背景減除法主要由下面四步組成:
1) 圖像的二值化
從USB攝像頭采集過來的圖像一般為RGB圖像,為了降低運算量,需要把彩色圖像轉換為黑白圖像,即把RGB圖像轉換為YUV圖像。彩色圖像中一般每個像素用需要三個字節(jié)表示,而YUV圖像只需要一個字節(jié)表示,這樣就大大降低了數(shù)據(jù)量,加快了數(shù)據(jù)的傳輸速率。它們之間的轉換可以用式(1)來表示,每個字節(jié)對應著R、G、B分量的亮度,經(jīng)過轉換的YUV圖像信號是用一個字節(jié)來這個像素點的灰度值,它的大小是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之間的,對于運動物體的監(jiān)測一般還要做二值化處理,即選取一個閾值thresh,比較各像素點和這個閾值,如果小于閾值,則為黑色,大于閾值就是白色,具體公式如下
(2)
式中,thresh為二值化閾值。
2) 濾波去噪
考慮到嵌入式平臺對算法的高度敏感性,采用均值濾波進行去噪,圖像均值濾波就是根據(jù)像素點周圍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) 背景建模
動態(tài)背景法即動態(tài)地去實時更新背景圖像,不僅解決了靜態(tài)背景中預先設定圖像的麻煩,還彌補了幀差法中的―空心問題,動態(tài)背景更新法的公式如下
B(x,y,i)=B(x,y,i-1)+aF(x,y,i)
(4)
其中,B(x,y,i)是更新后的背景幀,B(x,y,i-1)是更新前的背景幀,F(xiàn)(x,y,i)是前景幀,a是更新的權值,當有新的一幀到來時,它將被根據(jù)權值a疊加到背景幀上形成新的背景模型。
4) 前景背景相減,與閾值比較
背景差法就是將前景幀和背景幀相減,具體公式如下
f(x,y,i)=F(x,y,i)-B(x,y,m)
(5)
其中f(x,y,i)是差分結果,F(xiàn)(x,y,i)是前景幀,B(x,y,m)是背景幀。這里設定一個閾值T,當f(x,y,i)>T時,該像素點被標記為運動區(qū)域,當f(x,y,i) (6) 流程圖如圖3所示。 圖3 背景減除法流程圖 提取圖像算法,一般用的是OPENCV圖像函數(shù)庫,但是OPENCV庫對GUI有一定的依賴,而且ARM9處理器沒有浮點運算器,因此對OPENCV的一些算法的執(zhí)行效率有影響,所以這里移植Linux下開源軟件MOTION的庫函數(shù)來實現(xiàn)背景減除法。這里將Motion移植到構建的ARM平下運行,背景建模和背景減除算法都在alg.c函數(shù)中,其中的算法關鍵代碼如下: · 背景建模:void alg_update_reference_frame(struct context *cnt, int action) · 函數(shù)參數(shù):cnt是當前線程的環(huán)境參數(shù),其中包括當前的背景圖,action是更新權值。 · 返回值:無 · 函數(shù)功能:計算背景圖片是否需要更新,如需要則根據(jù)運動區(qū)域和更新權值去計算更新后的背景模型。 · 前景檢測:int alg_diff_standard(struct context *cnt,unsighed char * new) · 函數(shù)參數(shù):cnt是當前線程的環(huán)境參數(shù),其中包括當前的背景圖,new是需要處理的前景圖片 · 返回值:正常返回0,否則是-1 · 函數(shù)功能:標準判斷前景圖片和背景圖片差異的算法。整體思路是將前景圖片和背景圖片相減,圖像中的每個像素都已經(jīng)灰度化,即它是一個0~255的一個數(shù)值,相減后得到結果如果大于閾值,即認為此像素的前景是運動的。 由于室外光線比較強,會對背景減除法的背景建模造成干擾,因此為了實驗的效果,本實驗是在室內進行測試的。將攝像機部署在室內的某處,當沒有物體進入監(jiān)測區(qū)域時,攝像機不會去拍照,即檢測到運動物體。一旦有人進入監(jiān)測區(qū)域內,攝像機就會把整個過程記錄下來,保存成JPEG照片。 運動檢測的評價指標主要有漏檢率和誤檢率,前者是指有入侵物體,但系統(tǒng)沒檢測到;后者是指沒有入侵物體,但是由于外界的干擾,系統(tǒng)會檢測到。經(jīng)過100次的測試統(tǒng)計如表1所示。 表1 運動物體檢測評價 經(jīng)過分析,漏檢的運動物體主要有以下特征:運動物體的顏色和背景顏色相近;運動目標較小并且運動較快;環(huán)境光線太暗。 誤檢的情況主要發(fā)生在以下情況下:攝像頭出現(xiàn)晃動;有陰影的干擾。 通過實驗測試,檢測系統(tǒng)在其運行的24小時內對運動物體的檢測效果良好,未出現(xiàn)系統(tǒng)跑飛和掉電情況。 隨著嵌入式處理器的發(fā)展和視頻檢測技術的不斷完善,未來的智能視頻監(jiān)控系統(tǒng)將會更加完善,高清智能網(wǎng)絡化將是未來的趨勢。該系統(tǒng)在部署時,只需外接電源和網(wǎng)線即可,安裝成本低,可行性高。本系統(tǒng)區(qū)別與一般網(wǎng)絡攝像機的優(yōu)點是具有一定的智能性,能在無人監(jiān)控的情況下完成對固定區(qū)域的檢測工作。 參 考 文 獻 [1] 雷文華.機器視覺及其應用(系列講座)第一講機器視覺發(fā)展概述[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] 張文杰.戚飛虎.江卓軍.實時視屏監(jiān)控系統(tǒng)中運動目標檢測和跟蹤的一種實用方法[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的最小應用系統(tǒng)設計與開發(fā)[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的數(shù)字視頻信號處理系統(tǒng)[J].沈陽航空工業(yè)學院學報,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的視頻圖像采集實現(xiàn)[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的視頻監(jiān)控系統(tǒng)[J].天津工業(yè)大學學報,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日 作者簡介:尹成瑞,男,碩士,講師,研究方向:計算機網(wǎng)絡。 中圖分類號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, V4L25 系統(tǒng)測試及分析
6 結語