余昊澄,邱浩,劉公致
(杭州電子科技大學(xué)電子信息學(xué)院,浙江杭州,310018)
隨著計(jì)算機(jī)圖像處理技術(shù)和高性能終端處理器的發(fā)展,機(jī)器視覺(jué)的研究已經(jīng)成為熱門(mén)領(lǐng)域。機(jī)器視覺(jué)是用處理器和攝像機(jī)代替人眼,將數(shù)字圖像的像素信息進(jìn)行處理后,做出測(cè)量和判斷,被廣泛應(yīng)用于工業(yè)、農(nóng)業(yè)、制藥等領(lǐng)域。OpenCV算法是由Gary Bradsky在英特爾創(chuàng)立的,該算法的正式版本是在2000年發(fā)布的。2005年OpenCV算法在DARPA大戰(zhàn)中獲得冠軍,隨著時(shí)間的推移,OpenCV算法應(yīng)用的場(chǎng)景越來(lái)越多,從開(kāi)始的用于汽車開(kāi)發(fā),到現(xiàn)在的計(jì)算機(jī)視覺(jué),不僅如此,OpenCV算法支持多種語(yǔ)言,如C++、Python、Java等,還可以在不同的系統(tǒng)平臺(tái)上使用[1]。本系統(tǒng)使用上述技術(shù),設(shè)計(jì)了一種基于互聯(lián)網(wǎng)的攝像測(cè)量系統(tǒng)。
系統(tǒng)構(gòu)成介紹:該測(cè)量系統(tǒng)主要有樹(shù)莓派3B+、TPLINK互聯(lián)網(wǎng)交換機(jī)、HIKVISION網(wǎng)絡(luò)攝像頭模塊等部分構(gòu)成,如圖1所示,A、B兩個(gè)攝像頭同時(shí)對(duì)蛋白進(jìn)行攝像,并將視頻流信號(hào)通過(guò)交換機(jī)傳輸?shù)浇K端樹(shù)莓派處理器上,最終再在處理器上對(duì)所獲取視頻流進(jìn)行信息獲取和處理,從而得到單擺長(zhǎng)度和角度。各模塊介紹如下:
圖1 基于互聯(lián)網(wǎng)的攝像測(cè)量系統(tǒng)的整體結(jié)構(gòu)
本系統(tǒng)采用??低暤膍ini PTZ攝像頭來(lái)獲取視頻流,網(wǎng)絡(luò)高清mini PTZ攝像機(jī)是集網(wǎng)絡(luò)遠(yuǎn)程監(jiān)控功能、視頻服務(wù)器功能和高清PTZ攝像機(jī)功能為一體的新型網(wǎng)絡(luò)PTZ攝像機(jī)。PTZ攝像機(jī)安裝方便、使用簡(jiǎn)單,不需要繁瑣的綜合布線。
PTZ攝像機(jī)內(nèi)置小型WebServer服務(wù)器、網(wǎng)絡(luò)視頻服務(wù)器、解碼器及機(jī)芯,性能穩(wěn)定可靠。PTZ攝像機(jī)除具有預(yù)置點(diǎn)、掃描等基礎(chǔ)功能外,還基于以太網(wǎng)控制,可實(shí)現(xiàn)圖像壓縮并通過(guò)網(wǎng)絡(luò)傳輸給不同用戶;基于NAS的遠(yuǎn)程集中存儲(chǔ),可大大方便數(shù)據(jù)的存儲(chǔ)及調(diào)用。PTZ攝像機(jī)支持動(dòng)態(tài)調(diào)整編碼參數(shù),包括TCP/P、PPPoE、DHCP、UDP、MCAST、FTP、SNMP等協(xié)議;支持Onvif、CGI、PSIA等開(kāi)放互聯(lián)協(xié)議。PTZ 攝像機(jī)內(nèi)置云臺(tái),采用精密電機(jī)驅(qū)動(dòng),設(shè)備反應(yīng)靈敏、運(yùn)轉(zhuǎn)平穩(wěn),在任何情況下,實(shí)現(xiàn)圖像無(wú)抖動(dòng),非常有利于線上利用互聯(lián)網(wǎng)直接對(duì)攝像頭所捕捉區(qū)域進(jìn)行實(shí)時(shí)控制。
樹(shù)莓派3B+(Raspberry Pi 3ModelB+),擁有運(yùn)行在1.4GHz的處理器,雙頻2.4GHz和5GHz無(wú)線WiFi,藍(lán)牙4.2/BLE,更快的以太網(wǎng)和64位四核處理器,有著較高的性能和較為完善的交互功能[2],具備PC的大部分基本功能,它只需要接通電視機(jī)或者鍵盤(pán),就能夠執(zhí)行文字處理與玩游戲等多種功能,有低能耗、移動(dòng)便攜性、GPIO等特性。利用其GPIO,可以將其當(dāng)作單片機(jī)來(lái)使用,除了鍵盤(pán)鼠標(biāo)等支持USB傳輸信號(hào)的外設(shè)以外,還可以利用GPIO口和自制的外部電路再結(jié)合程序?qū)PIO口的控制可以實(shí)現(xiàn)更多更豐富的人機(jī)交互。
本系統(tǒng)使用TP-Link的交換機(jī),型號(hào)為T(mén)L-SG1005M,該交換機(jī)是塑殼5口千兆以太網(wǎng)交換機(jī),提供5個(gè)10/100/1000M自適應(yīng)RJ45端口,所有端口均支持線速轉(zhuǎn)發(fā)及MDI/MDIX自動(dòng)翻轉(zhuǎn)功能,即插即用。端口性能方面,提供5個(gè)10/100/1000M 自適應(yīng)RJ45端口,所有端口均可實(shí)現(xiàn)線速轉(zhuǎn)發(fā);每端口均支持MDI/MDIX自動(dòng)翻轉(zhuǎn)及雙工/速率自協(xié)商;支持IEEE 802.3x全雙工流控和Backpressure半雙工流控[3]。
1.4.1 激光筆擺長(zhǎng)L測(cè)量方法
1.4.2 激光筆擺角測(cè)量方法
基本公式:角度θ= arctan(a/b),通過(guò)兩個(gè)攝像頭協(xié)同工作,測(cè)量?jī)蓚€(gè)正交方向?qū)螖[正視圖x軸坐標(biāo)位置差,即a和b,根據(jù)公式得到角度,如圖2所示。
圖2 單擺系統(tǒng)擺角測(cè)量方法
如圖3所示,本系統(tǒng)先是將兩個(gè)??低暤臄z像頭HIKVISION放置于圖1中的A、B兩點(diǎn)的位置,當(dāng)兩個(gè)攝像頭開(kāi)始工作時(shí),會(huì)將兩個(gè)攝像頭所獲取的視頻流通過(guò)網(wǎng)線傳輸給同一個(gè)網(wǎng)絡(luò)交換機(jī),為了方便單點(diǎn)的檢測(cè),該系統(tǒng)在每個(gè)攝像頭節(jié)點(diǎn)處都放置了一個(gè)樹(shù)莓派用于單節(jié)點(diǎn)的圖像顯示,以確保傳輸至網(wǎng)絡(luò)交換機(jī)的數(shù)據(jù)沒(méi)有問(wèn)題。之后網(wǎng)絡(luò)交換機(jī)會(huì)將來(lái)自兩個(gè)攝像頭的視頻流數(shù)據(jù)通過(guò)同一條網(wǎng)線一同傳輸給終端樹(shù)莓派,以便之后的圖像處理和結(jié)果運(yùn)算。此外每個(gè)樹(shù)莓派都會(huì)配置顯示器、鼠標(biāo)鍵盤(pán)等外設(shè),方便人機(jī)交互。
圖3 硬件結(jié)構(gòu)圖
如圖4所示,本系統(tǒng)是在樹(shù)莓派的Python環(huán)境下,利用OpenCV對(duì)攝像頭視頻流進(jìn)行獲取和處理。事先在三臺(tái)樹(shù)莓派上安裝了可操作的樹(shù)莓派系統(tǒng)。
圖4 系統(tǒng)流程圖
在軟件設(shè)計(jì)中,首先對(duì)IP進(jìn)行訪問(wèn)和獲取攝像頭圖像,兩個(gè)攝像頭通過(guò)雙進(jìn)程方式同時(shí)協(xié)同運(yùn)作,減少兩個(gè)攝像頭之間的運(yùn)行時(shí)間差[4],多線程類似于同時(shí)執(zhí)行多個(gè)不同程序,多線程運(yùn)行有如下優(yōu)點(diǎn):使用線程可以把占據(jù)長(zhǎng)時(shí)間的程序中的任務(wù)放到后臺(tái)去處理;程序的運(yùn)行速度可能加快;在一些等待的任務(wù)實(shí)現(xiàn)上如用戶輸入、文件讀寫(xiě)和網(wǎng)絡(luò)收發(fā)數(shù)據(jù)等。在這種情況下我們可以釋放一些珍貴的資源如內(nèi)存占用等等。Python3 通過(guò)兩個(gè)標(biāo)準(zhǔn)庫(kù)thread和threading提供對(duì)線程的支持,由于thread只是為了兼容Python2的thread模塊,本系統(tǒng)使用threading模塊實(shí)現(xiàn)多線程。
之后對(duì)圖像進(jìn)行高斯平滑濾波,高斯濾波就是對(duì)整幅圖像進(jìn)行加權(quán)平均的過(guò)程,每一個(gè)像素點(diǎn)的值,都由其本身和鄰域內(nèi)的其他像素值經(jīng)過(guò)加權(quán)平均后得到。減小背景中微小物體和光照變化的影響,主要是利用分布加權(quán)卷積距離待處理像素越近的像素對(duì)輸出影響越大的物理意義。
之后主要利用背景差分的方法將運(yùn)動(dòng)的像素確定下來(lái)[5]:首先建立一個(gè)背景圖像,也就是取背景,計(jì)算當(dāng)前輸入圖像和背景圖像的差分,數(shù)學(xué)表達(dá)式如下:,其中It是framet,即當(dāng)前幀圖像,Bt是背景圖像,設(shè)定一個(gè)閾值Th,根據(jù) Δt和Th的大小關(guān)系判斷像素屬于背景還是移動(dòng)物體:
在數(shù)據(jù)測(cè)量的過(guò)程中,發(fā)現(xiàn)本系統(tǒng)存在受到周邊光線影響的問(wèn)題,為了解決這一問(wèn)題,本系統(tǒng)采用了IIR濾波的方式來(lái)減少環(huán)境光影響所帶來(lái)的變化,以提高系統(tǒng)的光照魯棒性,IIR濾波是使用當(dāng)前幀對(duì)背景圖像進(jìn)行更新:B(t) =α·I(t)+ (1 -α)B(t- 1),其中α是當(dāng)前幀所占的比重,通過(guò)調(diào)節(jié)α的值可以改變背景的更迭速率。
再通過(guò)閉運(yùn)算找出目標(biāo)物體,閉運(yùn)算主要是對(duì)圖像先進(jìn)行膨脹運(yùn)算,再進(jìn)行腐蝕運(yùn)算,用來(lái)補(bǔ)充小的裂縫和彌合狹窄的斷裂和細(xì)長(zhǎng)的溝壑并且不會(huì)影響原來(lái)前景的形狀大小[6、7]。
最后則是確定XY坐標(biāo),根據(jù)XY坐標(biāo)擬合目標(biāo)物體坐標(biāo)曲線,通過(guò)曲線的峰峰值之間橫坐標(biāo)的距離得到擺動(dòng)周期,再根據(jù)公式得到繩長(zhǎng),在計(jì)算角度時(shí),通過(guò)兩個(gè)攝像頭獲取的波峰和原點(diǎn)的坐標(biāo)差,如圖5所示是擬合的類簡(jiǎn)弦運(yùn)動(dòng)圖像,獲得圖2中所示的一個(gè)直角三角形中的兩個(gè)直角邊,再根據(jù)三角函數(shù)得到角度。
圖5 擺幅的正弦曲線
按照題目要求,對(duì)基于互聯(lián)網(wǎng)的攝像測(cè)量系統(tǒng)進(jìn)行測(cè)試,測(cè)試內(nèi)容及結(jié)果記錄如下:
L測(cè)量結(jié)果如表1所示(單位:cm)。
表1 長(zhǎng)度測(cè)量數(shù)據(jù)
θ測(cè)量結(jié)果如表2所示(單位:度)。
表2 角度測(cè)量數(shù)據(jù)
以上單次測(cè)量均可以在較短的時(shí)間內(nèi)完成。
從表1、表2測(cè)試結(jié)果分析可知,本系統(tǒng)對(duì)于目標(biāo)物體及其位置識(shí)別較為精確,測(cè)量過(guò)程速度較快,在測(cè)量L的時(shí)候,由于激光筆中心會(huì)改變擺長(zhǎng),所測(cè)得的值和實(shí)際值會(huì)存在一定誤差,所以測(cè)得的L必然會(huì)偏大,利用第一次測(cè)量的結(jié)果進(jìn)行誤差二階擬合,從而得到一條如圖6所示擬合曲線,來(lái)展示真實(shí)值和數(shù)量值之間的關(guān)系。
圖6 長(zhǎng)度擬合曲線
將該擬合曲線值放到最終的輸出端,可以大大減小誤差,從而得到較為精準(zhǔn)的測(cè)量值。
在測(cè)量角度時(shí),由于放置將激光筆者本身存在的一些因素(如投放時(shí),給了激光筆橫向的力)從而使得激光筆不能做正常的單擺運(yùn)動(dòng),同時(shí)也會(huì)產(chǎn)生誤差。
本文的制作可以利用HIKVISION網(wǎng)絡(luò)攝像頭順利地將網(wǎng)絡(luò)傳輸?shù)浇粨Q機(jī)上并且傳輸?shù)浇K端設(shè)備,采樣用圖像處理的方法,成功地實(shí)現(xiàn)了單擺的識(shí)別,測(cè)量出其坐標(biāo)和運(yùn)動(dòng)周期,從而計(jì)算出單擺的長(zhǎng)度和擺動(dòng)角度,測(cè)量結(jié)果精度也比較高。該系統(tǒng)可以應(yīng)用于諸多類似于教學(xué)實(shí)驗(yàn)的監(jiān)測(cè)當(dāng)中[8],上文中的閉運(yùn)算和IIR濾波更新背景等算法可以使得系統(tǒng)有著較高的魯棒性,來(lái)抵御外界環(huán)境的干擾。