賈磊
摘 要:無線視頻采集系統(tǒng)由無線攝像頭采集視頻信息并發(fā)射一定頻率的無線信號,發(fā)送出的無線模擬信號由無線信號接收器接收,通過視頻連接線把信號送到USB視頻采集卡EASYCAP中,視頻采集卡把送入的模擬信號轉換成數(shù)字信號送到連接的計算機中,實現(xiàn)無線視頻的采集和通過軟件在計算機中對信號進行處理。
關鍵詞:無線視頻信號采集 VC++ VFW 截圖錄像
中圖分類號:TN911 文獻標識碼:A 文章編號:1672-3791(2015)05(b)-0028-03
隨著社會的不斷進步,各領域得到了迅速的發(fā)展,機械化、自動化已經(jīng)成為了現(xiàn)代生產(chǎn)生活的主流生產(chǎn)方式,這樣就對監(jiān)控系統(tǒng)有了一個更高更成熟的要求,需要有一套方便可靠的視頻采集系統(tǒng)作為監(jiān)控系統(tǒng)的平臺。視頻采集系統(tǒng)分為有線視頻傳輸網(wǎng)絡和無線視頻傳輸網(wǎng)絡,在特殊工作環(huán)境越來越占據(jù)我們大部分工作的今天,周邊的工作環(huán)境不允許使用有線網(wǎng)絡,并且還帶來了高建設、和高維修的費用,所以無線視頻信號的采集系統(tǒng)已經(jīng)變成國際上重點的研究和發(fā)展方向。無線視頻采集系統(tǒng)可以運用在工廠,用于監(jiān)控自動化高的生產(chǎn)設備,也可以裝載到機器人中完成特殊的任務,比如排爆機器人,降低人員的傷亡。
現(xiàn)在對無線信號的采集和處理主要通過視頻采集卡進行采集,有一些公司生產(chǎn)的采集卡提供第三方的軟件開發(fā)包(SDK)這樣便于用戶進行第二次開發(fā)。在監(jiān)視計算機方面主要使用VC++,VB等開發(fā)軟件進行監(jiān)視界面的開發(fā),但是總體比起來VC++在視頻處理上比VB較為成熟,利用VC++中的VFW視頻開發(fā)包對視頻采集卡采集回來的視頻信號進行處理。
1 視頻信號采集系統(tǒng)組成
該系統(tǒng)的組成大致分為硬件和軟件部分,該文對軟件部分的設計和開發(fā)做著重的介紹,軟件部分則利用VC++6.0為軟件開發(fā)平臺。
1.1 硬件部分
硬件部分由無線攝像頭、攝像頭信號接收器和USB視頻采集卡三部分組成。硬件連接如圖1所示。
USB視頻采集卡工作原理。
該次視頻采集系統(tǒng)采用的是EASYCAP的USB視頻采集卡,視頻采集卡是我們進行視頻處理必不可少的硬件設備,無線攝像頭發(fā)送的和無線信號接收器接收的信號是連續(xù)的模擬信號,但是計算機卻不會識別模擬信號,計算機只識別0或1這樣的二進制碼,這樣就需要一個像本系統(tǒng)中的USB視頻采集卡把無線視頻接收器采集到的模擬信號進行模/數(shù)轉換,把連續(xù)的模擬信號轉換成離散的數(shù)字信號,這樣經(jīng)過轉換后的數(shù)字信號就可以被計算機編輯、處理和保存了。
在該系統(tǒng)中視頻采集軟件通過驅動識別USB視頻采集卡并對采集回來的信息進行處理,因為視頻采集卡采集到的都是一幅幅靜態(tài)圖片,所以要在軟件中設置與USB視頻采集卡相匹配的采集速率,這樣就能對視頻信號進行靜態(tài)圖片的抓取和保存,對視頻流信號進行保存。具體數(shù)/模轉換流程如圖2。
1.2 軟件部分
軟件部分主要采用了VC++6.0來編寫采集程序。
VC++6.0由微軟公司開發(fā),它是一個基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境,同時也具備C++語言編譯器的功能。Visual C++6.0由編輯器、調(diào)試器以及程序向導AppWizard、類向導Class Wizard等開發(fā)工具組成。
VFW(Video for windows)是視頻開發(fā)應用的一種早期技術。Microsoft的Visual C++從4.0版開始就支持Video for Windows(簡稱VFW)了,這給視頻捕獲編程帶來了很大的方便。VFW(Video for Windows)是微軟公司開發(fā)的針對于Windows自帶的一個數(shù)字視頻編輯軟件開發(fā)包。用戶不用自己安裝VFW,而是Windows系統(tǒng)中自帶了這個視頻開發(fā)包,方便了用戶的使用。VFW的中心就是一個AVI文件標準,AVI(Audio Video Interleave)就是一種聲音和視頻同步組合在一起的一種文件,它是一種有損的壓縮形式。
在VFW中為用戶提供了一套完整的應用程序接口(API),API可以為用戶提供一種與應用程序訪問一組例程的能力,而且用戶不需要訪問源碼和了解內(nèi)部工作的細節(jié)。編寫程序時可以利用API函數(shù)來編寫應用程序,這樣就可以避免編寫無用程序,減小工作量。
VFW的視頻捕獲主要由AVICap窗口類來完成。AVICap窗口類為應用程序提供了一個基于消息的接口。在該系統(tǒng)中視頻的捕獲和單幀捕獲都是靠AviCap所提供的強大全面的函數(shù)和宏實現(xiàn)的,這是微軟公司開發(fā)的VFW開發(fā)包為我們編輯視頻采集軟件提供的一條捷徑,可以使用簡單易讀的函數(shù)和宏就可以達到我們編程需要達到的目的。
AVICap有兩種顯示視頻的格式:(1)預覽模式(preview),這是一個使用CPU資源的模式。視頻流首先從采集硬件保存到系統(tǒng)內(nèi)存,之后通過GDI函數(shù)將視頻信息顯示在捕獲窗口中。從硬件角度講,該模式需要使用VGA卡,通過VGA卡顯示在監(jiān)視器上。(2)疊加模式(Overlay)該模式顯示視頻是通過硬件的疊加,疊加的視頻是不需要通過VGA卡的,疊加視頻的硬件把自身的輸出信號與VGA輸出信號合并,最后顯示到監(jiān)視器上的信號是二者的組合信號。
2 VFW視頻采集的開發(fā)
2.1 開發(fā)應用程序的步驟
VC++應用程序開發(fā)的一般步驟為:(1)創(chuàng)建一個項目;(2)采用workspace窗口和它的class view, file view, resource view去建立項目中的C++類、文件和資源;(3)將文件從項目中添加或刪除;(4)編輯項目的源代碼和資源;(5)為項目指定配置(Debug或Release);(6)連遍項目文件;(7)糾正連遍錯誤;(8)執(zhí)行并測試生成的可執(zhí)行文件;(9)測試項目文件;(10)剖視以及代碼優(yōu)化。
2.2 VFW采集開發(fā)流程
使用VFW進行視頻采集大致分為如下幾個部分基本流程。
(1)使用函數(shù)capCreatureWindows(...)創(chuàng)建應用程序的視頻捕獲窗口。(2)使用函數(shù)capsetcallbackonstatus(...)函數(shù)處理回調(diào)函數(shù)狀態(tài),并用capsCalLbackonerror(...)函數(shù)來設置錯誤信息的回調(diào)處理。但是該次系統(tǒng)設計沒有使用回調(diào)函數(shù)。(3)查找USB視頻采集卡的驅動并連接。(4)得到USB視頻采集卡的驅動信息。(5)判斷是否連接正確,并設置采集速率。
2.3 監(jiān)控系統(tǒng)的建立
使用VFW的宏函數(shù)實現(xiàn)視頻捕獲和預覽,應用程序簡單、控制靈活。在本系統(tǒng)中,是基于VC++6.0的對話框應用程序框架實現(xiàn)編程開發(fā),很多的應用程序都是基于這種開發(fā)方式的。另一部分應用就是基于文檔的編程開發(fā),單文檔是主流。文檔應用程序的最大特點是有標準菜單、客戶區(qū)域任意調(diào)整;缺點是相對比對話框類,開發(fā)難度較大。
2.3.1 建立單文檔應用程序
該系統(tǒng)是基于VC++6.0的項目建立向導創(chuàng)建一個單文檔、無工具欄和狀態(tài)欄的應用程序,下面是建立單文檔應用程序的詳細步驟:首先啟動VC++6.0,選擇“文件”→“新建”→“工程”命令。在工程選擇卡中,選擇MFC AppWizard(exe)。
工程名稱欄中輸入工程的名稱,位置欄中輸入的是工程所保存的文件位置。
下一步需要選擇創(chuàng)建應用程序的類型有三類分別為:單文檔、多重文檔和基本對話框,由于本系統(tǒng)是視頻采集界面,所以選擇的應用程序為基本對話框應用程序,點擊完成就成功的建立了一個基本對話框的應用程序工程。
2.3.2 建立對話框
對話框是監(jiān)控軟件和用戶的交互平臺,使用者可以在對話框中直接預覽由USB視頻采集卡采集到VC++中的視頻信息,并對其進行抓取截圖、錄像、暫停和退出等功能,這些功能會以按鈕的形勢提供給使用者,方便對視頻信號進行想要的處理。對話框建立的詳細步驟如下:在工作空間下選擇“resource view”選項卡打開dialog下拉文件并在dialog文件夾上右鍵單擊選擇插入dialog,創(chuàng)建一個新的對話框,此時新建的對話框就出現(xiàn)在右側工作區(qū)中,我們可以對其進行大小的任意改變。
2.3.3 添加圖像和按鈕控件
對于本次系統(tǒng)的設計,需要對對話框添加“圖像”和“按鈕”控件,在工具箱中就可以找到并選擇加入到對話框中的任意位置,“圖像”的作用是顯示由USB視頻采集卡轉換成的數(shù)字視頻信號,起到一個監(jiān)視屏的作用,因為代碼中已經(jīng)把窗口的大小作為一個指針,送到窗口創(chuàng)建函數(shù)capCreatureWindows()中了,當程序初始化時可以自動識別到窗口的大小并返回一個寬度和高度值,所以圖像控件可以隨意更改大小,函數(shù)中設置窗口X軸坐標和Y軸坐標的數(shù)據(jù)已經(jīng)被指針所取代了?!鞍粹o”則為使用者提供對采集回來的視頻信息進行處理的功能,按鈕有五個各自的功能分別為:播放、截圖、錄像、暫停和退出。在添加按鈕時可以改變其名稱,這個名稱就是顯示在按鈕上的名稱,起到提示其功能的作用。當添加好按鈕時雙擊按鈕就可以進入到按鈕代碼的編輯,用來響應函數(shù)的功能,在修改控件ID后,比如一個按鈕控件,假設使ID為BUTTON1則建立按鈕后在窗口類中的對話框類中自動添加了一個名為ONBUTTON1的按鈕控件類。這個類則包含了這個按鈕所包含的一些屬性和信息。
關于窗口類,我們在運行程序的時候可以直接看到窗口對話框,在窗口建立之前系統(tǒng)要知道怎樣建立一個窗口,和窗口返回的一些信息要交給誰處理。這樣就需要我們創(chuàng)建一個窗口類來定義我們設計的窗口的各種信息,比如窗口的消息、函數(shù)的處理、窗口的風格、圖標、鼠標、菜單等等??梢允拱粹o實現(xiàn)各種功能。下圖為設計好的對話框。
具體程序代碼不再詳述。
3 運行調(diào)試
代碼編輯完成后就要把工程保存,之后就可以編譯了,在編譯菜單下選擇編譯選項(也可以直接按F7鍵,同樣可以對源文件進行編譯),對源文件進行編譯、執(zhí)行及編譯配置等操作,該菜單位于編譯器的頂層菜單中。按F5可以調(diào)試應用程序,查看程序的運行情況。如果在調(diào)試程序時遇到問題,可以使用編譯器中的“幫助”菜單調(diào)用MSDN幫助文件來解決問題。編譯后在工程的文件夾下有個一DEBUG的文件夾中就會生成應用程序圖標,雙擊就會運行應用程序。查看應用程序的運行情況,以及各個功能的實現(xiàn)情況是否正常。
在運行程序后,因為視頻信號進入到USB視頻采集卡后,采集卡又對信號進行一次硬件壓縮,性質(zhì)類似于對信號進行了編碼,而本系統(tǒng)采用的是CapAvi來采集的信號,把壓縮過的信號直接顯示到了預覽窗口中,所以會有信號的不穩(wěn)定與數(shù)據(jù)的丟失。
其他的功能正常,程序運行正常。
4 結語
該系統(tǒng)基于VC++6.0利用VFW開發(fā)包,對無線視頻信號進行采集和處理系統(tǒng)進行了設計。搭建了一個無線視頻信號采集的平臺。該系統(tǒng)主要的開發(fā)部分為軟件部分,硬件只需進行驅動的安裝和硬件連接即可。通過運行調(diào)試,取得了比較好的效果。
參考文獻
[1] 劉銳寧,梁水,李偉明.Visual C++項目開發(fā)案例全程實錄[M].北京.清華大學出版社,2011:1-62
[2] 任觀就,張永林.實時視頻圖像捕獲的實現(xiàn)方法[J].計算機工程,2002,28(8):268-270.
[3] 陳琿,張會汀,周杰華.利用VFW實現(xiàn)實時視頻捕獲及其應用[J].計算機應用.2003,23(8):141-143.
[4] 張艷珍,鞏玉國,歐宗瑛,等.基于Windwos平臺的視頻捕獲技術研究[J].計算機工程與設計,2002(3):10-12.