韓 宇,張 磊,吳澤民,胡 磊
(解放軍理工大學(xué) 通信工程學(xué)院,江蘇 南京 210007)
基于嵌入式樹莓派和OpenCV的運(yùn)動檢測與跟蹤系統(tǒng)
韓 宇,張 磊,吳澤民,胡 磊
(解放軍理工大學(xué) 通信工程學(xué)院,江蘇 南京 210007)
為了適應(yīng)運(yùn)動檢測與跟蹤系統(tǒng)小型化、高效化的現(xiàn)實(shí)需求,將圖像處理的算法移植于小巧靈活的樹莓派2代B型,實(shí)現(xiàn)了對運(yùn)動物體的實(shí)時(shí)檢測與跟蹤。基于openCV框架下,運(yùn)用Python語言編程實(shí)現(xiàn)了計(jì)算幀差和二值化等圖像處理要素,并用矩形框?qū)⑦\(yùn)動物體標(biāo)記。實(shí)驗(yàn)結(jié)果分析表明,該系統(tǒng)對光照條件等環(huán)境變化有一定的自適應(yīng)能力,可較好地完成對運(yùn)動物體的檢測與跟蹤。
運(yùn)動物體檢測跟蹤;樹莓派;嵌入式系統(tǒng);二值化;圖像處理;環(huán)境適應(yīng)
伴隨著嵌入式系統(tǒng)計(jì)算能力的不斷提高,強(qiáng)大的圖像處理分析算法完全可以在靈活小巧、機(jī)動性強(qiáng)的嵌入式系統(tǒng)上運(yùn)行。基于嵌入式系統(tǒng)進(jìn)一步實(shí)現(xiàn)的計(jì)算機(jī)視覺完全可應(yīng)用于安防領(lǐng)域和邊海防等軍事領(lǐng)域的實(shí)時(shí)監(jiān)控。
實(shí)時(shí)的運(yùn)動檢測和跟蹤技術(shù)是一項(xiàng)融嵌入式系統(tǒng)、圖像處理、計(jì)算機(jī)視覺、網(wǎng)絡(luò)傳輸?shù)榷鄬W(xué)科的技術(shù)。所謂實(shí)時(shí)的運(yùn)動檢測與跟蹤技術(shù)就是將實(shí)時(shí)采集的圖像信息進(jìn)行檢測,提取有用信息,識別目標(biāo)參數(shù)特征,過濾噪聲并鎖定目標(biāo),追蹤目標(biāo)的運(yùn)動軌跡等一系列處理的技術(shù),并為下一步的深入分析提供數(shù)據(jù)基礎(chǔ),為目標(biāo)的行為分析奠定基礎(chǔ)。現(xiàn)大多數(shù)運(yùn)動檢測和跟蹤系統(tǒng)多基于PC機(jī)等大型且計(jì)算能力超強(qiáng)的設(shè)備,不僅沒有有效利用設(shè)備的計(jì)算能力,相比于嵌入式系統(tǒng)略顯笨拙且不能靈活部署。有些場合的監(jiān)控系統(tǒng)要求“隱蔽高效”,這正是小型的嵌入式系統(tǒng)發(fā)揮作用的舞臺。為此,本文基于靈活且計(jì)算能力可觀的樹莓派2代B型,在openCV框架下移植合適算法,實(shí)現(xiàn)實(shí)時(shí)的運(yùn)動檢測與跟蹤。
1.1 相關(guān)開發(fā)基礎(chǔ)
編程工具方面,Python是一種面向?qū)ο蟆⒔忉屝偷挠?jì)算機(jī)程序設(shè)計(jì)語言[1],語言簡潔清晰,比起C語言更適合于初學(xué)者,在樹莓派平臺安裝Python2和Python3兩個版本,本文采用Python2.7.3作為開發(fā)語言。
圖像處理方面,OpenCV輕量級而且高效。它是由一系列 C 函數(shù)和少量 C++ 類構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等語言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面的很多通用算法,本文擬采用openCV及其Python接口完成算法移植和軟件系統(tǒng)搭建。
嵌入式平臺方面,本文先后采用樹莓派1代B型和樹莓派2代B型,采用樹莓派1代B型運(yùn)行論文經(jīng)典算法時(shí),CPU利用率為100%,系統(tǒng)容易出現(xiàn)死機(jī)。因此考慮計(jì)算能力提高了約4倍的樹莓派2代B型,樹莓派2代B型運(yùn)行論文經(jīng)典算法,CPU利用率僅為25%左右,為算法的改進(jìn)預(yù)留了充分空間。
1.2 嵌入式系統(tǒng)平臺搭建
1.2.1 開發(fā)平臺搭建
如圖1所示,硬件包括開發(fā)PC主機(jī)一臺、樹莓派2代B型一個、攝像頭模塊一個(PiCamera)、2A電源適配器、對接網(wǎng)線、TF存儲卡、串口調(diào)試線、HDMItoVGA轉(zhuǎn)接器、VGA顯示器一臺、USB鍵盤鼠標(biāo)。樹莓派USB接口外接USB鼠和鍵盤,通過HDMItoVGA接口連接到顯示屏顯示圖形界面[2]。

圖1 樹莓派的硬件平臺(照片)
1.2.2 樹莓派的連接方式
基于PC的 Windows主機(jī)可通過putty實(shí)現(xiàn)兩種方式連接樹莓派:串口線連接和SSH登錄。串口線連接時(shí)輸入連接串口號和比特速率(115 200 bit/s),SSH登錄時(shí)輸入樹莓派的IP地址,并將端口號設(shè)為22。樹莓派的嵌入式Linux和Windows之間的文件交互可以通過FileZilla快捷實(shí)現(xiàn)。FileZilla通過SSH附帶FSTP功能,利用此功能可以實(shí)現(xiàn)電腦和樹莓派之間的文件互傳,使用FileZilla在“快速連接“中輸入:主機(jī):sftp://169.254.255.253(使用自己樹莓派的IP地址)、用戶名和密碼采用默認(rèn)的pi/raspberry。
1.2.3 樹莓派的圖形界面顯示
樹莓派的圖形界面顯示有兩種方式:
1)通過以太網(wǎng)網(wǎng)線,PC機(jī)上可用tightVNC客戶端啟動樹莓派的虛擬圖形界面,這種方式能夠讓樹莓派共享PC機(jī)的屏幕、鍵盤、鼠標(biāo)等資源,避免了在樹莓派上外接擴(kuò)展屏幕、鍵盤鼠標(biāo)等配件操作,同時(shí)也方便PC機(jī)和樹莓派之間的文件互傳。VNCserver在樹莓派上運(yùn)行需要占據(jù)一定的CPU,增重了系統(tǒng)載荷,可能影響到改進(jìn)算法的空間。如果樹莓派采集的數(shù)據(jù)量較大,網(wǎng)口的傳輸速率是否夠用也是個值得考慮的問題。
2)通過HDMItoVGA器件將樹莓派和顯示屏連接起來,在樹莓派開機(jī)后輸入startx命令啟動圖像界[3]。此種方式可以釋放啟動虛擬圖形界面的CPU占有率,為算法改進(jìn)讓出了空間。值得提醒的是樹莓派的端口無法驅(qū)動此HDMItoVGA器件,需要獨(dú)立供電。
1.2.4 樹莓派安裝Python和openCV
在安裝過程中,安裝必要的圖像I/O包和視頻I/O包,這樣才可以讀入圖像和視頻文件。安裝GTK開發(fā)庫,這個庫用來構(gòu)建GUI,同時(shí)OpenCV中的highgui庫也需要它來在屏幕上顯示圖像。在創(chuàng)建虛擬的計(jì)算機(jī)視覺環(huán)境之后進(jìn)行Python的安裝。這里也需要安裝NumPy,因?yàn)镺penCV的Python接口通過Numpy的多維數(shù)組來表示圖像[4]。
系統(tǒng)開發(fā)總體框圖如圖2所示 系統(tǒng)開發(fā)總體可分為3個模塊,即實(shí)時(shí)圖像采集模塊、圖像處理模塊和結(jié)果輸出模塊。圖像處理模塊是本系統(tǒng)的核心所在,包括初始化幀、運(yùn)動目標(biāo)檢測、目標(biāo)鎖定和追蹤三個方面,結(jié)果輸出模塊將文字、時(shí)間的狀態(tài)信息添加之后,將結(jié)果寫入硬盤和顯示屏輸出。

圖2 系統(tǒng)開發(fā)總體框圖
2.1 實(shí)時(shí)圖像采集模塊
圖像采集的攝像頭模塊采用樹莓派原裝Raspberry Pi camera模塊,具備500萬像素的ov5647鏡頭,靜態(tài)圖片分辨率為2 592×1 944。可以使用raspistill命令拍攝圖像、raspivid命令錄制視頻,本系統(tǒng)中使用函數(shù)調(diào)用Raspberry Pi camera模塊進(jìn)行實(shí)時(shí)圖像的采集并可用cv2.imshow將實(shí)時(shí)采集的圖像顯示在屏幕上。
2.2 圖像處理模塊
圖像處理模塊算法主要包括兩個方面的工作。
1)建立運(yùn)動物體檢測的背景
系統(tǒng)需要適應(yīng)不同光照、地形等環(huán)境因素的影響,基于幀差的圖像處理算法對背景提出了較高的要求,即背景需要有自適應(yīng)環(huán)境的能力,能夠隨著時(shí)間、光照等環(huán)境因素做出合適的改變。為了實(shí)現(xiàn)這個目的,綜合樹莓派的計(jì)算能力考量,本系統(tǒng)通過加權(quán)平均初始化幀的方式以達(dá)到動態(tài)調(diào)整背景的目的。采用函數(shù)cv2.accumulateWeighted(src, dst, alpha[, mask]),計(jì)算方式為
dst(x, y)← (1-alpha)×dst(x, y)+alpha×src(x, y) if mask(x, y)0
這里alpha為當(dāng)前幀的權(quán)重,使用了之前幀的加權(quán)平均值配合當(dāng)前幀工作,可以動態(tài)地調(diào)整背景。
2)運(yùn)動物體的檢測和跟蹤
如圖3所示,算法進(jìn)行運(yùn)動物體的檢測和追蹤主要包括以下幾個步驟:
(1)計(jì)算幀差:圖像處理的基礎(chǔ),后續(xù)的算法在此步的基礎(chǔ)上進(jìn)行。
(2)轉(zhuǎn)灰階圖像:彩色圖像包含紅(R)、綠(G)、藍(lán)(B)三個通道,圖像的彩色與否對于運(yùn)動的檢測和追蹤無任何影響,卻會增加系統(tǒng)處理的復(fù)雜度,因此采cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)函數(shù),將BGR格式的彩色圖像轉(zhuǎn)化為灰度圖像,減小系統(tǒng)冗余。
(3)高斯模糊:需要指定高斯核的寬和高(必須是奇數(shù)),以及高斯函數(shù)沿X,Y方向的標(biāo)準(zhǔn)差。本文指定了X方向和Y方向的兩個標(biāo)準(zhǔn)差都是0,那么函數(shù)會根據(jù)核函數(shù)的大小自己計(jì)算[5]。高斯模糊可有效過濾掉可能被誤認(rèn)為運(yùn)動檢測目標(biāo)的高斯噪聲,避免一幀圖像中出現(xiàn)“假陽性”目標(biāo)。
(4)二值化圖像:在圖像轉(zhuǎn)成灰階之后,力求更簡潔的圖像以分割前景,經(jīng)過二值化的圖像只剩黑、白兩色。
(5)腐蝕膨脹:目的就是讓前景、后景的對比更加明顯,更加有利于尋找前景的輪廓。
(6)尋找輪廓:使用cv2.findContours函數(shù)尋找前景的輪廓,此函數(shù)會存儲形狀邊界上所有的坐標(biāo),可設(shè)置只取一條直線的兩個端點(diǎn),將輪廓上的冗余點(diǎn)去掉,以節(jié)省內(nèi)存開支。
(7)標(biāo)記運(yùn)動物體:計(jì)算輪廓線的外框,并繪出外框?qū)⑦\(yùn)動物體標(biāo)記。

圖3 運(yùn)動物體的檢測和追蹤主要步驟
2.3 結(jié)果輸出模塊
系統(tǒng)的輸出就是關(guān)于運(yùn)動物體檢測與跟蹤一系列處理后的圖像。為了豐富圖像上對于運(yùn)動物體檢測狀態(tài)的顯示,增強(qiáng)系統(tǒng)輸出的可讀性,在輸出的圖像上增添空間狀態(tài)和當(dāng)時(shí)的時(shí)間信息。并可設(shè)置合適的上傳幀間隔,通過保存下來的一系列輸出圖像,可以大致還原物體的運(yùn)動過程。
3.1 關(guān)鍵參數(shù)設(shè)置
系統(tǒng)的處理效果涉及到兩個關(guān)鍵參數(shù)的設(shè)置:
1)二值化過程中的像素分類閾值。本文在圖像處理的過程中,設(shè)置大于此閾值的像素都重新賦值為255,即為黑色,小于此閾值的設(shè)置為0,即為白色,此參數(shù)將圖像分為前景和后景,即將運(yùn)動物體和運(yùn)動背景區(qū)別開來。
2)最小運(yùn)動區(qū)域的值。min_area是能檢測運(yùn)動的最小區(qū)域,如果設(shè)置過小會導(dǎo)致一些“風(fēng)吹草動”的小影響也會觸發(fā)運(yùn)動的檢測和追蹤,如果設(shè)置過大,可能會將“人”這般大的運(yùn)動物體忽略。
3.2 系統(tǒng)性能測試
實(shí)驗(yàn)場景設(shè)置為:樹莓派距離實(shí)驗(yàn)室的門大概有9 m的距離,在人從門口走向設(shè)備的圖中,樹莓派對“人”這個運(yùn)動物體進(jìn)行實(shí)時(shí)檢測與跟蹤。
3.2.1 光照條件對系統(tǒng)的影響
加權(quán)平均幀后,系統(tǒng)能自動適應(yīng)光照的變化。如圖4所示,圖中包含實(shí)時(shí)檢測運(yùn)動結(jié)果的畫面和對應(yīng)時(shí)刻的幀差,在室內(nèi)日光燈的開與否的情況下,實(shí)驗(yàn)結(jié)果幾乎無差異。

圖4 有無日光燈照射下實(shí)驗(yàn)結(jié)果和幀對比圖
3.2.2 二值化閾值對系統(tǒng)的影響
如圖5~8所示、最小運(yùn)動檢測區(qū)域都取5 000、有日光燈照射的情況下,二值化閾值分別為2、10、30、40,對比實(shí)時(shí)檢測運(yùn)動結(jié)果和對應(yīng)時(shí)刻的二值化處理效果。

圖5 二值化閾值取值為2

圖6 二值化閾值取值為10

圖7 二值化閾值取值為30

圖8 二值化閾值取值為40
從4幅圖中可以看出,二值化閾值的選擇對實(shí)驗(yàn)結(jié)果的重大影響。閾值取值過小時(shí),如圖5閾值取2時(shí),二值化后的一些噪聲被誤認(rèn)為檢測對象,從而有許多分散的白點(diǎn),框住真正運(yùn)動目標(biāo)“人”的框就把分散的白點(diǎn)算進(jìn)去了,自然框大了些。如圖6,閾值取10時(shí),檢測效果較好。閾值取值過大時(shí),如圖7所示,閾值取30時(shí),可以看見運(yùn)動目標(biāo)在相同的位置沒有被檢測出來,因?yàn)槎祷蟮那熬安粷M足最小運(yùn)動區(qū)域判定條件,因而無法追蹤目標(biāo)。如圖8所示,閾值取40時(shí),二值化后的圖像幾乎無前景,就更提不上運(yùn)動的檢測了。
3.2.3 最小運(yùn)動檢測區(qū)域大小對系統(tǒng)的影響
鑒于二值化閾值實(shí)驗(yàn)中,閾值取10時(shí)效果較好,在二值化閾值取10,同時(shí)在有日光燈照射的條件下,如圖9~13所示,在最小運(yùn)動檢測區(qū)域取值分別為1 000、2 000、3 000、5 000、7 000時(shí),抓取人在門走向樹莓派的途中第一次被檢測到的瞬間,包括對應(yīng)時(shí)刻的實(shí)時(shí)圖像處理結(jié)果和幀差。

圖9 最小運(yùn)動檢測區(qū)域取值為1 000時(shí)

圖10 最小運(yùn)動檢測區(qū)域?yàn)? 000時(shí)

圖11 最小運(yùn)動檢測區(qū)域?yàn)? 000時(shí)

圖12 最小運(yùn)動檢測區(qū)域?yàn)? 000時(shí)

圖13 最小運(yùn)動檢測區(qū)域?yàn)? 000時(shí)
如圖9所示,最小運(yùn)動檢測區(qū)域取為1 000時(shí),由于取值過小,系統(tǒng)將人分為兩個運(yùn)動部分框出,當(dāng)最小運(yùn)動區(qū)域取值從1 000~7 000變化時(shí),第一次觸發(fā)系統(tǒng)檢測并跟蹤運(yùn)動物體的位置離樹莓派的距離越來越近。
3.2.4 關(guān)鍵參數(shù)與算法對于實(shí)驗(yàn)影響的結(jié)論
通過以上對比實(shí)驗(yàn),二值化閾值大小主要取決于運(yùn)動物體的特性,對于檢測和跟蹤“人”這個運(yùn)動物體,閾值取5~20之間效果最好;最小運(yùn)動檢測區(qū)域的取值主要取決于應(yīng)用場景的環(huán)境和空間大小,針對不同的場景,大小應(yīng)做出相應(yīng)的變化,取值并沒有好壞之分。
由于本文所移植算法本身的局限性,應(yīng)用空間大小和適用的檢測對象有限,并不是通過參數(shù)取值的改變就可以適用于一切對象的檢測和一切場景的應(yīng)用。OpenCV還有許多圖像處理方法可用于對運(yùn)動物體的檢測和分析,包括基于混合高斯模型的前景和背景分割、基于貝葉斯(概率)的前景和背景分割等,但這些算法的計(jì)算復(fù)雜度相對較大,并不適用于嵌入式樹莓派平臺。
本文設(shè)計(jì)了一個基于樹莓派和OpenCV框架下對于運(yùn)動物體的實(shí)時(shí)追蹤和跟蹤系統(tǒng)。針對不同環(huán)境和應(yīng)用空間場景做出對比實(shí)驗(yàn),較好地用Python+OpenCV驗(yàn)證了在圖像處理上采用基于幀差的算法的可行性。實(shí)驗(yàn)結(jié)果充分證明了系統(tǒng)的穩(wěn)定性、可靠性,較好地利用了樹莓派的處理能力,充分發(fā)揮出嵌入式系統(tǒng)靈活機(jī)動、計(jì)算能力較強(qiáng)的特點(diǎn),滿足了小型化、實(shí)用化、靈活化的現(xiàn)實(shí)需求。
實(shí)驗(yàn)還實(shí)現(xiàn)了算法在樹莓派1代B型、樹莓派2代B型、PC機(jī)三個不同的硬件平臺之間,Linux和Windows兩個不同的操作系統(tǒng)之間的重用和移植。在OpenCV的標(biāo)準(zhǔn)框架下結(jié)合,Python語言的跨平臺開放性使算法可靈活選擇不同計(jì)算能力和操作系統(tǒng)的硬件平臺,為算法改進(jìn)、平臺選擇和未來的應(yīng)用拓展了較大空間。
[1] HETLAND M L. Pyhton基礎(chǔ)教程[M]. 2版. 北京:人民郵電出版社,2014.
[2] ALEX B,BEN E. 樹莓派Python編程指南[M]. 北京:機(jī)械工業(yè)出版社,2015.
[3] BLUM R,BRESNAHAN C. 樹莓派Python編程入門與實(shí)踐[M]. 北京:人民郵電出版社,2015.
[4] ROSEBROCK A. Install OpenCV and Python on your Raspberry Pi 2 and B+[EB/OL]. [2016-04-10].http://www.pyimagesearch.com/2015/02/23/install-opencv-and-python-on-your-raspberry-pi-2-and-b/.
[5] 段力輝. OpenCV-Python 中文教程[EB/OL]. [2016-04-10]. http://download.csdn.net/detail/l1w1w1/8762009.
責(zé)任編輯:薛 京
Motion detection and tracking system based on embedded raspberry pi and OpenCV
HAN Yu,ZHANG Lei,WU Zemin,HU Lei
(SchoolofCommunicationEngineering,PLAUniversityofScienceandTechnology,Nanjing210007,China)
For adapting to the practical requirements of miniaturization and high efficiency of the motion detection and the tracking embedded system, this paper ports the algorithm of image processing to the Raspberry Pi 2 Model B, which is compact and flexible. And it fufills the real-time detection and tracking of moving objects. Under the development environment of openCV, programming with Python language, some image processing elements like the calculation of frame difference and binarization are used, and the moving objects are marked with the rectangle box. The experimental results show that, this system which based on Raspberry pi, has some ability of adapting to the changes of illumination conditions, so it can do well in detecting and tracking of moving subjects.
motion detection and tracking; raspberry pi; embedded system; binarization; image processing; adapting to the changes of illumination conditions
韓宇,張磊,吳澤民,等.基于嵌入式樹莓派和OpenCV的運(yùn)動檢測與跟蹤系統(tǒng)[J]. 電視技術(shù),2017,41(2):6-10. HAN Y,ZHANG L,WU Z M, et al.Motion detection and tracking system based on embedded raspberry pi and OpenCV[J]. Video engineering,2017,41(2):6-10.
TP391
A
10.16280/j.videoe.2017.02.002
國家自然科學(xué)基金項(xiàng)目(61501509)
2016-05-06