高明
(中船重工七五〇試驗(yàn)場,云南昆明 650106)
一種低成本水下準(zhǔn)高速攝像系統(tǒng)
高明
(中船重工七五〇試驗(yàn)場,云南昆明 650106)
本文主要講述了一種低成本的水下準(zhǔn)高速攝像系統(tǒng)。在錄像時(shí),系統(tǒng)首先將視頻數(shù)據(jù)緩存在主機(jī)上,然后再將數(shù)據(jù)復(fù)制到硬盤當(dāng)中。這種攝像系統(tǒng)的幀率大于普通的水下電視,畫面質(zhì)量也非常高,同時(shí)成本又遠(yuǎn)小于通常意義上的水下高速攝像系統(tǒng),可以作為常規(guī)的水下電視和水下高速測量之間的過度設(shè)備,也填補(bǔ)了水下高速攝像與常速攝像之間的空白。
水下攝像 準(zhǔn)高速攝像 低成本
通常情況下,我們需要對水下的目標(biāo)進(jìn)行視覺上的觀測,這種觀測經(jīng)常采用水下電視的方法。這種普通的水下電視的幀率通常是25~30幀。但是,有的時(shí)候水下目標(biāo)的運(yùn)動(dòng)速度比較大,通過普通的水下電視觀測并不能取得非常良好的觀測效果;如果采用高速攝像的方式測量的話,觀測成本又增加很多。所以,在待觀測目標(biāo)的運(yùn)行速度大于普通水下電視可以良好觀測的速度而又沒有達(dá)到必須采用高速攝像的方式去觀測的速度時(shí),我們設(shè)計(jì)了一種低成本的準(zhǔn)高速水下目標(biāo)觀測系統(tǒng)。
我們知道,一般的高速攝像機(jī)在錄像時(shí)是將視頻數(shù)據(jù)保存在自身的內(nèi)部緩存中。這種緩存是易失性存儲(chǔ)介質(zhì),存儲(chǔ)速率非常高,大小一般在幾個(gè)G至十幾個(gè)G之間不等,這樣可以保證將幾秒至幾十秒的視頻數(shù)據(jù)不丟失的保存下來。然后再通過上位機(jī)將數(shù)據(jù)從高速攝像機(jī)中讀取出來,并保存在硬盤當(dāng)中。我們所設(shè)計(jì)的準(zhǔn)高速攝像系統(tǒng)也采用了這種類似的設(shè)計(jì)方法。由于機(jī)芯本身并不帶有緩存介質(zhì),所以我們只能將視頻數(shù)據(jù)保存在顯控主機(jī)上。機(jī)芯傳遞給顯控主機(jī)的視頻數(shù)據(jù)的速率是每秒752×480×60Bit,這樣的數(shù)據(jù)如果直接保存在硬盤中,會(huì)由于硬盤的讀寫速度慢而造成數(shù)據(jù)大量丟失。于是我們便先將數(shù)據(jù)保存在顯控主機(jī)的內(nèi)存中,等到用戶點(diǎn)擊停止保存鍵或者最長錄像時(shí)間到,再將視頻數(shù)據(jù)從內(nèi)存中讀取出來,并保存在硬盤中。采用這種方法就不會(huì)丟失視頻數(shù)據(jù)。這樣做實(shí)際上就是把顯控主機(jī)的內(nèi)存當(dāng)成了準(zhǔn)高速攝像機(jī)的內(nèi)部緩存,顯控主機(jī)的內(nèi)存大小就決定了可以記錄的時(shí)間的長短。因?yàn)楦咚倩蛘邷?zhǔn)高速攝像的觀測錄像時(shí)間都不會(huì)太長,一般為幾秒至幾十秒而已,所以這種方法可以滿足要求。在XP系統(tǒng)上我們錄像的時(shí)間可以達(dá)到33秒,而在Win7系統(tǒng)上,至少可以增加一倍。系統(tǒng)工業(yè)原理圖如圖1所示。
圖1 系統(tǒng)工作原理
本系統(tǒng)的硬件有三部分組成:水下準(zhǔn)高速攝像機(jī)、顯控主機(jī)和連接纜。如圖2所示。
水下準(zhǔn)高速攝像機(jī)采用國產(chǎn)的MVC360-60GE機(jī)芯,這種準(zhǔn)高速攝像機(jī)的幀率是每秒60幀,分辨率是752×480。這種攝像機(jī)本身不帶有鏡頭,在工作時(shí)我們?yōu)槠渑鋫?.5-10mm變焦鏡頭,在空氣中進(jìn)行手動(dòng)調(diào)焦。這樣做的好處是可以通過調(diào)節(jié),來改變水下可觀測的距離。由于這種機(jī)芯的幀率是每秒60幀,分辨率是752×480,所以在進(jìn)行數(shù)據(jù)傳輸時(shí)必須通過超五類的以太網(wǎng)線和水面顯控主機(jī)相連,供電方式是通過水面24V供電。水面顯控主機(jī)配有千兆網(wǎng)口,用來接收攝像機(jī)傳來的視頻數(shù)據(jù),并且實(shí)時(shí)顯示攝像畫面。為了可靠工作,這種顯控主機(jī)采用工控機(jī)。我們目前完成的系統(tǒng)是單攝像機(jī)系統(tǒng),如果要多個(gè)攝像機(jī)同步工作,只需要加裝配備統(tǒng)一觸發(fā)的觸發(fā)設(shè)備即可完成同步觀測和保存。
一般的水下高速攝像系統(tǒng)與本系統(tǒng)在硬件構(gòu)成上主要差別在高速攝像機(jī)的機(jī)芯與高速攝像系統(tǒng)水面顯控主機(jī)的監(jiān)控軟件上。本系統(tǒng)的機(jī)芯只是準(zhǔn)高速機(jī)芯,較國外進(jìn)口的高速攝像機(jī)機(jī)芯要便宜得多。另外,若使用國外進(jìn)口的高速攝像機(jī)機(jī)芯就必須配套使用相關(guān)的軟件,而本系統(tǒng)的軟件完全由自己設(shè)計(jì)開發(fā),可以自由設(shè)計(jì)功能與界面,從而進(jìn)一步降低了產(chǎn)品的成本。
圖2 系統(tǒng)硬件構(gòu)成
系統(tǒng)每采集到一幀圖像,就會(huì)調(diào)用一次回調(diào)函數(shù)MStreamProc()。于是在錄像時(shí),在MStreamProc()中添加將視頻數(shù)據(jù)保存到內(nèi)存的代碼。在保存視頻數(shù)據(jù)以前,需要先申請一段內(nèi)存空間。為了能夠最大程度上獲得大的內(nèi)存空間,從而獲得更長的錄像時(shí)間,本系統(tǒng)在保存時(shí)申請了兩段內(nèi)存并初始化了一個(gè)空的AVI文件:
內(nèi)存申請完以后,將要保存的視頻數(shù)據(jù)一幀一幀的連續(xù)保存在申請到的內(nèi)存中。
當(dāng)點(diǎn)擊停止保存或者是保存的最大時(shí)間到了以后,系統(tǒng)會(huì)停止向內(nèi)存中寫入數(shù)據(jù),同時(shí)從內(nèi)存中將數(shù)據(jù)讀取到硬盤,寫入通過MV_AVIFileInit()初始化了的空AVI文件中。
程序從內(nèi)存中讀取視頻數(shù)據(jù),是最為關(guān)鍵的時(shí)期,在此期間,程序不能響應(yīng)其他動(dòng)作,只能完成這一項(xiàng)工作。所以將IDC_SAVEAVI文本內(nèi)容寫為“等待”,并且禁用。當(dāng)程序讀取數(shù)據(jù)完畢時(shí),才改為可用。
保存在內(nèi)存中的視頻數(shù)據(jù)實(shí)際上是黑白數(shù)據(jù),但是,這種準(zhǔn)高速攝像我們通常希望是能得到彩色圖像, 于是通過MVC_PixelConverter2()將黑白圖像轉(zhuǎn)化為彩色圖像,并保存到AVI文件中。在高速或者是準(zhǔn)高速攝像時(shí),回放研究視頻數(shù)據(jù)經(jīng)常是逐幀回放、研究,所以在保存視頻數(shù)據(jù)時(shí),是不需要壓縮的。
這種低成本的水下準(zhǔn)高速觀測攝像系統(tǒng)實(shí)際上是填補(bǔ)了普通的水下常速攝像和較昂貴的高速攝像之間的空白,既增加了目標(biāo)的可觀測速度,又不至于使成本增加很多。
這種水下準(zhǔn)高速攝像系統(tǒng)在實(shí)際當(dāng)中已經(jīng)有過使用,并且取得了良好的效果。
[1]孫鑫.VC++深入詳解[M].電子工業(yè)出版社,2012.