基于開源軟件MJPG_Streamer的智能視頻監(jiān)控系統(tǒng)設(shè)計(jì)
摘 要:針對(duì)目前開發(fā)數(shù)字化的視頻監(jiān)控設(shè)備普遍成本較高、周期較長(zhǎng)的特點(diǎn),在ARM+Linux嵌入式平臺(tái),應(yīng)用開源免費(fèi)軟件MJPG_Streamer實(shí)現(xiàn)視頻圖像的采集以及通過TCP/IP網(wǎng)絡(luò)協(xié)議傳輸?shù)缴衔粰C(jī)進(jìn)行遠(yuǎn)程顯示。同時(shí)提出了一種結(jié)合三幀差分算法和背景減法的目標(biāo)檢測(cè)算法,實(shí)現(xiàn)智能控制。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)能夠進(jìn)行實(shí)時(shí)的、遠(yuǎn)程的監(jiān)控,同時(shí)能夠快速對(duì)入侵目標(biāo)進(jìn)行語音報(bào)警。
本文引用地址:http://www.ex-cimer.com/article/250017.htm1 引言
近年來,隨著計(jì)算機(jī)技術(shù)、光電技術(shù)、數(shù)字圖像處理技術(shù)、嵌入式技術(shù)和網(wǎng)絡(luò)通信技術(shù)的不斷發(fā)展,高度集成的數(shù)字化、網(wǎng)絡(luò)化、智能化的數(shù)字視頻技術(shù)已經(jīng)了取代傳統(tǒng)的模擬視頻監(jiān)控技術(shù)。目前,世界各國對(duì)視頻監(jiān)控的需求與應(yīng)用不斷擴(kuò)大,推動(dòng)著全球視頻監(jiān)控市場(chǎng)迅速的發(fā)展。根據(jù)市場(chǎng)調(diào)查公司IMSResearch的預(yù)測(cè),全球視頻監(jiān)控市場(chǎng)將從2008年的115億美元增加至2015年的377億美元,年復(fù)合增長(zhǎng)率達(dá)到20.4%.在這一市場(chǎng)中,監(jiān)控?cái)z像頭、服務(wù)器、編碼器以及軟件是視頻監(jiān)控系統(tǒng)的主角。
本文提出一種基于ARM+Linux嵌入式平臺(tái)的的智能視頻監(jiān)控系統(tǒng),充分利用開源操作系統(tǒng)和開源免費(fèi)軟件MJPG_Streamer的特點(diǎn),實(shí)現(xiàn)了在線實(shí)時(shí)監(jiān)控。同時(shí)提出了一種目標(biāo)檢測(cè)算法,該算法在后臺(tái)運(yùn)行,實(shí)現(xiàn)了智能控制,能夠?qū)θ肭帜繕?biāo)進(jìn)行語音報(bào)警。該監(jiān)控適合針對(duì)一些特定場(chǎng)合的監(jiān)控。
2 系統(tǒng)硬件平臺(tái)
視頻監(jiān)控系統(tǒng)以S3C2440處理器為核心,外圍器件有Flash、SDRAM、以太網(wǎng)卡DM9000、聲卡UDA1341以及CMOS接口攝像頭OV9650,在Linux環(huán)境下對(duì)攝像頭采集到的原始圖像幀進(jìn)行處理以及壓縮,通過網(wǎng)絡(luò)協(xié)議傳輸?shù)絇C上位機(jī)進(jìn)行顯示。系統(tǒng)硬件平臺(tái)結(jié)構(gòu)如圖1所示。
3 構(gòu)建ARM+Liunx嵌入式平臺(tái)
在系統(tǒng)硬件平臺(tái)上構(gòu)建嵌入式Liunx系統(tǒng),需要引導(dǎo)程序BootLoader和Linux源碼,本系統(tǒng)需要移植bootloader源碼,然后用Jtag接口將其燒寫到Flash中,從Flash中啟動(dòng),引導(dǎo)在PC機(jī)上交叉編譯后的Linux鏡像及根文件系統(tǒng),之后啟動(dòng)Linux系統(tǒng)。
3.1 網(wǎng)卡和聲卡驅(qū)動(dòng)移植
由于在Linux內(nèi)核中提供了以太網(wǎng)卡DM9000設(shè)備驅(qū)動(dòng)功能層主要的數(shù)據(jù)結(jié)構(gòu)和函數(shù),所以在實(shí)際移植網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序時(shí),要完成的工作就是根據(jù)實(shí)際以太網(wǎng)卡DM9000參數(shù)修改相應(yīng)的內(nèi)核代碼。同樣,在Linux內(nèi)核源碼中的標(biāo)準(zhǔn)音頻編程模型已經(jīng)包含一套完整的內(nèi)核驅(qū)動(dòng)程序模塊,為各種各樣的聲卡提供了統(tǒng)一并且簡(jiǎn)單易用的編程接口,如open()、read()、ioctl(()等函數(shù),所以在聲卡UDA1341移植過程中對(duì)內(nèi)核源碼做簡(jiǎn)單修改即可。
3.2 語音播放功能的實(shí)現(xiàn)
完成了聲卡驅(qū)動(dòng)移植后,為了方便對(duì)音頻文件的播放,停止等操作進(jìn)行控制,還需要移植專業(yè)的高精度解碼器Madplay.Madplay是一個(gè)根據(jù)MAD算法寫的MP3播放器,解碼效果相當(dāng)出色,而且支持命令行,特別適合于在嵌入式系統(tǒng)使用。移植過程中分別編譯zlib庫、libid3tag庫和libmad庫,最后編譯madplay源碼并且把編譯出來的madplay下載到系統(tǒng)中即可,之后就可以對(duì)錄制好的音頻文件進(jìn)行播放。
嵌入式平臺(tái)構(gòu)建完成后,先后用命令ifcongfig和madplay進(jìn)行網(wǎng)卡和語音模塊測(cè)試,從圖2可以看出Linux系統(tǒng)啟動(dòng)成功,網(wǎng)卡和聲卡驅(qū)動(dòng)配置成功了,并且可以使用Madplay播放器播放錄制的音頻文件。
4 MJPG_Streamer功能的實(shí)現(xiàn)
MJPG_Streamer是一款免費(fèi)的視頻流服務(wù)器軟件,采用的是V4L2視頻設(shè)備開發(fā)框架,它能夠?qū)臄z像頭采集到的圖像以JPEG格式通過TCP/IP網(wǎng)絡(luò)協(xié)議傳輸?shù)缴衔粰C(jī)進(jìn)行顯示。
4.1 MJPG_Streamer移植
在MJPG_Streamer源碼目錄中,把所有Makefile文件的CC=gcc改為CC=arm-linux-gcc,然后進(jìn)行編譯,生成的主要組件及功能如下:
input_uvc.so組件:主要完成了攝像頭圖像的抓取,同時(shí)將原始YUV 格式圖像轉(zhuǎn)換和壓縮為JPEG格式圖像。
input_control.so組件:主要完成對(duì)支持調(diào)整方向攝像頭的轉(zhuǎn)動(dòng)方向的控制。例如云臺(tái)控制器,云臺(tái)控制是為了實(shí)現(xiàn)多角度監(jiān)控的功能。
output_http.so組件:這是一個(gè)功能完整的WEB服務(wù)器,它將壓縮后的JPEG 圖像以HTTP視頻數(shù)據(jù)服務(wù)流形式輸出。
output_file.so組件:這個(gè)組件的功能是將壓縮后的JPEG圖像存儲(chǔ)到特定的文件夾下,用來抓拍和存儲(chǔ)網(wǎng)絡(luò)攝像機(jī)監(jiān)控中的靜態(tài)圖像。
4.2 目標(biāo)檢測(cè)算法的研究
基于幀間差分法對(duì)光照變化干擾不敏感,提取前景目標(biāo)容易產(chǎn)生“空洞”的現(xiàn)象,而背景減法對(duì)光照變化較敏感的現(xiàn)象,本文提出了一種結(jié)合三幀差分算法和背景減法的目標(biāo)檢測(cè)算法。經(jīng)過與目前常用的算法相比,例如混合高斯模型和改進(jìn)的混合高斯模型,本文的算法不僅降低了運(yùn)算的復(fù)雜度,適合在ARM 平臺(tái)運(yùn)行,同時(shí)又可以達(dá)到準(zhǔn)確檢測(cè)的效果。算法實(shí)現(xiàn)流程如下:
?。?)建立背景模型,提取前景目標(biāo)先把采集到的彩色圖像利用式(1)轉(zhuǎn)為灰度圖,取前n幀圖像,對(duì)每個(gè)位置像素的像素值求均值作為背景像素,表示為式(2)。利用當(dāng)前幀減去背景幀得到包含前景的圖像,根據(jù)閾值Th對(duì)圖像進(jìn)行二值化處理得到T(x,y),如式(3)、(4)所示。
式中,Th代表閾值,T(x,y)代表二值化后圖像。
考慮到攝像頭固定,背景像素灰度值變化比較緩慢,而前景目標(biāo)像素灰度值變化相對(duì)較快。為了讓背景模型適應(yīng)光照緩慢的變化,需要對(duì)背景模型進(jìn)行實(shí)時(shí)更新。其中a為背景更新率,取值范圍是(0,1)。
Bn+1(x,y)=(1-a)Bn(x,y)+apn(x,y) (5)在差分圖像S(x,y)中大量存在的是具有較高灰度值的前景像素和具有較低灰度值的背景像素。
所以,提出一種閾值根據(jù)當(dāng)前差分幀S(x,y)自動(dòng)更新的方法。
求出當(dāng)前差分幀S(x,y)圖像灰度的最大值和最小值,求得二者均值T.利用均值將圖像分為目標(biāo)和背景兩部分,利用式(6)求出兩部分均值k1和k2,最后由式(7)得到閾值Th.
?。?)利用三幀差分算法提取目標(biāo)選取連續(xù)三幀圖像Dk-1(x,y),Dk(x,y)和Dk+1(x,y),進(jìn)行兩兩差分得到D1(x,y)和D2(x,y),二值化處理后,二者進(jìn)行與運(yùn)算,提取前景目標(biāo)。
?。?)前景目標(biāo)融合將背景減法的前景圖像T(x,y)和三幀差分算法得到圖像D(x,y)進(jìn)行或運(yùn)算,該運(yùn)算利用了背景減法的優(yōu)點(diǎn),避免了單獨(dú)利用三幀差法帶來的空洞現(xiàn)象。同時(shí)發(fā)揮三幀差法對(duì)動(dòng)態(tài)背景變化適應(yīng)性強(qiáng)的特點(diǎn)。
?。?)前景目標(biāo)形態(tài)學(xué)處理由于融合后的圖像Q(x,y)中存在著噪聲點(diǎn)和一些空洞,有必要對(duì)圖像進(jìn)行中值濾波,然后交替的應(yīng)用開運(yùn)算和閉運(yùn)算,起到既去毛刺又填充的雙濾波目的。
根據(jù)本文的算法,采用靜止的攝像頭采集視頻序列。圖3所示為在Visual C++2005平臺(tái)上的仿真結(jié)果。根據(jù)結(jié)果可得,本文算法能完整的提取運(yùn)動(dòng)目標(biāo),有效的消除空洞,檢測(cè)結(jié)果準(zhǔn)確。此時(shí)系統(tǒng)可以快速的檢測(cè)到入侵物體,同時(shí)用Madplay播放錄制好的音頻文件進(jìn)行語音報(bào)警。智能監(jiān)控實(shí)現(xiàn)流程如圖4所示。
4.3監(jiān)控平臺(tái)測(cè)試
在Linux平臺(tái)輸入以下命令,啟動(dòng)監(jiān)控系統(tǒng)。在PC上位可以通過MJPG_Streamer軟件自帶的圖形界面進(jìn)行顯示,也可以通過網(wǎng)頁瀏覽器進(jìn)行頁面顯示。經(jīng)試驗(yàn),當(dāng)有物體進(jìn)入場(chǎng)景時(shí),能夠快速的進(jìn)行語音報(bào)警。當(dāng)平臺(tái)測(cè)試完畢后,把MJPG_Streamer設(shè)置為在Linux啟動(dòng)后自動(dòng)運(yùn)行。見圖5.
5 結(jié)束語
本文設(shè)計(jì)的基于軟件MJPG_Streamer視頻監(jiān)控系統(tǒng),具有實(shí)時(shí)性好,遠(yuǎn)程監(jiān)控,上位機(jī)簡(jiǎn)易,開發(fā)周期短,易于實(shí)現(xiàn)的特點(diǎn)。系統(tǒng)實(shí)現(xiàn)了語音報(bào)警的功能,充分利用了ARM 平臺(tái)的特性,不需要設(shè)計(jì)額外的語音模塊電路。系統(tǒng)的目標(biāo)檢測(cè)功能已完成,下一個(gè)研究方向是利用軟件MJPG_Streamer對(duì)云臺(tái)控制的支持,實(shí)現(xiàn)模式識(shí)別和跟蹤算法,使系統(tǒng)的功能更強(qiáng)大,應(yīng)用范圍更廣。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
linux相關(guān)文章:linux教程
c++相關(guān)文章:c++教程
攝像頭相關(guān)文章:攝像頭原理
評(píng)論