《電子技術應用》
您所在的位置:首頁 > 通信與網(wǎng)絡 > 設計應用 > 基于Qt和OpenCV的無線視頻監(jiān)控系統(tǒng)
基于Qt和OpenCV的無線視頻監(jiān)控系統(tǒng)
2015年微型機與應用第10期
汪 洋,,李 垚,,黃 魯
(中國科學技術大學 電子科學與技術系,安徽 合肥 230027)
摘要: 使用Qt結合OpenCV設計了一款基于嵌入式的無線視頻監(jiān)控系統(tǒng),,該系統(tǒng)具備人臉檢測和頭像保存功能,。系統(tǒng)采用C/S結構,在ARM開發(fā)板上搭建的Qt多線程Linux系統(tǒng)服務器用于采集和發(fā)送視頻,;用Qt結合OpenCV制作的客戶端運行在PC上,,提供監(jiān)控功能。介紹了Qt的Linux系統(tǒng)環(huán)境設置與ARM移植,、V4L2視頻采集的過程以及如何用Qt多線程處理視頻數(shù)據(jù),。測試結果表明,在WiFi環(huán)境下,,系統(tǒng)可進行有效的實時監(jiān)控,。
Abstract:
Key words :

  摘  要: 使用Qt結合OpenCV設計了一款基于嵌入式的無線視頻監(jiān)控系統(tǒng),,該系統(tǒng)具備人臉檢測和頭像保存功能,。系統(tǒng)采用C/S結構,在ARM開發(fā)板上搭建的Qt多線程Linux系統(tǒng)服務器用于采集和發(fā)送視頻;用Qt結合OpenCV制作的客戶端運行在PC上,,提供監(jiān)控功能,。介紹了Qt的Linux系統(tǒng)環(huán)境設置與ARM移植、V4L2視頻采集的過程以及如何用Qt多線程處理視頻數(shù)據(jù),。測試結果表明,,在WiFi環(huán)境下,系統(tǒng)可進行有效的實時監(jiān)控,。

  關鍵詞: 無線視頻監(jiān)控,;Qt;OpenCV,;人臉檢測

0 引言

  無線視頻監(jiān)控系統(tǒng)具有無需布線,、安裝簡單、監(jiān)控點靈活的優(yōu)點,。嵌入式監(jiān)控設備占用空間小,、價格低。Linux操作系統(tǒng)可裁剪,,適合在嵌入式設備上使用[1],。本文在ARM-Linux系統(tǒng)上利用Qt和OpenCV技術,結合TCP/IP傳輸協(xié)議,,開發(fā)了一款帶有圖像處理功能的低成本實時無線視頻監(jiān)控系統(tǒng),,具備人臉檢測和頭像保存功能。

1 系統(tǒng)結構

001.jpg


  無線視頻監(jiān)控系統(tǒng)由ARM服務器,、PC客戶端和無線路由器3個部分組成,,如圖1所示。ARM服務器設置USB攝像頭的采集參數(shù),,將采集到的畫面進行格式轉換后(YUV轉換成JPEG),,通過USB無線網(wǎng)卡將視頻畫面發(fā)送出去;無線路由器為ARM服務器與遠程PC客戶端提供無線網(wǎng)絡,;PC客戶端接收并顯示視頻,,完成人臉檢測、頭像保存等處理,。

  本系統(tǒng)的服務器硬件由友善之臂Smart210開發(fā)板,、EP-N8508GS無線網(wǎng)卡和USB攝像頭組成。其中,,Smart210開發(fā)板采用了三星S5PV210作為主處理器,;EP-N8508GS無線網(wǎng)卡支持IEEE802.11N網(wǎng)絡標準,傳輸速率為150 Mb/s,;USB攝像頭支持V4L2協(xié)議,,采集視頻格式為YUV,。軟件部分主要包括內(nèi)核為3.0的Linux操作系統(tǒng)、Qt 4.7,、OpenCV 2.4相關庫,、客戶端和服務器軟件。系統(tǒng)軟件結構如圖2所示,。

002.jpg

2 服務器實現(xiàn)

  2.1 Linux QT環(huán)境設置與ARM移植

  本系統(tǒng)軟件編程采用C/S模式,,程序在PC Ubuntu環(huán)境下用Qt 4.7編寫完成,分別用ARM,、PC環(huán)境下的qmake編譯器編譯成可執(zhí)行程序,。如果統(tǒng)一采用PC環(huán)境下的qmake編譯,服務器程序將無法在ARM上運行,。這是由于ARM與PC的開發(fā)環(huán)境不同,,可使用file指令來判斷可執(zhí)行程序的運行環(huán)境。Linux ARM版本的Qt環(huán)境配置流程如圖3所示,。

003.jpg

  在完成Linux ARM版本的Qt環(huán)境配置后,,還需要將生成的Qt庫都加載到ARM開發(fā)板上才能在ARM上運行Qt程序,否則出現(xiàn)缺少依賴庫的錯誤,。

  2.2 服務器軟件設計

  ARM服務器軟件采用Qt編程,,實現(xiàn)的功能有V4L2視頻采集、視頻格式轉換,、TCP視頻傳輸,。服務器的工作流程為:先啟動監(jiān)聽狀態(tài),給出當前使用的IP地址和監(jiān)聽的隨機可用端口號提示,;當客戶端連接上時發(fā)送視頻數(shù)據(jù),。

  2.2.1 V4L2(Video4Linux2)視頻圖像采集

  V4L2是Linux下針對免驅動USB設備的編程框架,為視頻采集設備的程序開發(fā)提供了統(tǒng)一的接口[2],。視頻采集部分基于V4L2,,將其定義為一個單獨的videoDevice類,實現(xiàn)視頻設備的初始化,、打開,、配置、設置內(nèi)存映射,、開始采集,、讀取緩沖區(qū)、視頻格式轉換,、更新緩沖區(qū),、結束采集、取消內(nèi)存映射,、關閉,、格式轉換等功能,。該類還定義了專門的槽函數(shù),為后續(xù)的設備視頻采集線程提供RGB24視頻幀,。

  2.2.2 多線程處理視頻數(shù)據(jù)

  采用多線程可以提高程序的響應速度,在Qt應用程序中使用多線程只需子類化Qthread并且重新實現(xiàn)它的run()函數(shù)即可[3],。程序采用雙線程,,一個用于單幀圖像的周期性采集并發(fā)送完成信號,另一個利用私有槽函數(shù)完成單幀圖像的發(fā)送,,兩個線程在tcpServer類中進行連接,,從而實現(xiàn)視頻的連續(xù)采集與傳輸。在采集視頻線程run()函數(shù)中,,每隔一定時間獲取視頻幀并發(fā)送數(shù)據(jù)產(chǎn)生信號,。視頻發(fā)送線程采用基于塊的傳輸協(xié)議把視頻數(shù)據(jù)作為二進制塊進行傳輸,每個數(shù)據(jù)塊包含一個大小字段及單幀視頻數(shù)據(jù),。在該線程中,,將采集并經(jīng)轉化后得到的RGB24格式視頻圖像以JPG格式存入緩沖區(qū)發(fā)送;發(fā)送完成后,,需要調用seek(0)函數(shù)以重新移到存儲空間的開始處,,避免出錯。

  2.2.3 基于TCP的視頻傳輸

  TCP是面向連接的通信協(xié)議,,提供可靠的數(shù)據(jù)流服務,,從而確保視頻的有效傳輸。Qt提供的QTcpServer和QTcpSocket類,,分別用于實現(xiàn)服務器和客戶端[4],。

  服務器視頻傳輸程序主要由tcpServer和tcpClientSocket類完成。tcpServer重新實現(xiàn)了incomingConnection()函數(shù),。當客戶端試圖連接到服務器監(jiān)聽的端口時,,調用該函數(shù)來創(chuàng)建視頻采集和發(fā)送線程,并通過信號與槽將兩個線程連接起來,,從而實現(xiàn)視頻幀的采集與發(fā)送,。tcpClientSocket類利用connect()函數(shù)將readRead()和disconnected()信號分別與readClient()和slotDisconnected()槽連接起來,從而接收來自客戶端的數(shù)據(jù),,以及當套接字連接關閉時,,刪除對象。

3 客戶端實現(xiàn)

  客戶端軟件設計采用Qt與OpenCV聯(lián)合編程,,Qt用于界面設計,、視頻接收與顯示,OpenCV專注于對視頻圖像進行處理,??蛻舳藢崿F(xiàn)的功能有:(1)登錄功能,;(2)連接服務器并接收視頻;(3)彩色與灰度視頻切換顯示,;(4)拍照保存,、人臉檢測、頭像保存功能,。為了使用OpenCV,,需要在Qt工程文件中添加OpenCV的庫文件和路徑。由于使用了網(wǎng)絡傳輸協(xié)議,,需要在Qt工程文件中添加QT+=network代碼,。

  3.1 視頻接收與彩色/灰度顯示

  客戶端啟動后,填入設備名,、IP地址,、服務器監(jiān)聽的端口號來連接服務器。程序使用槽函數(shù)將客戶端連接到服務器,,該槽函數(shù)在QTcpSocket對象上異步調用connectToHost()建立連接,。當連接建立起來并運行時,QTcpSocket對象發(fā)送connected()信號,,此時會執(zhí)行sendData()槽函數(shù)將數(shù)據(jù)發(fā)給服務器,;如果連接失敗,QTcpSocket對象會發(fā)送錯誤信號,。只要QTcpsocket對象從服務器上接收到視頻數(shù)據(jù),,就發(fā)送readReady信號,此時程序調用dataReceived()槽函數(shù),。dataReceived()槽函數(shù)實現(xiàn)了3個功能:接收視頻幀,、統(tǒng)計每幀的數(shù)據(jù)量與總的幀數(shù)以及用判斷語句來選擇顯示彩色/灰度視頻。

  3.2 人臉檢測與頭像保存

  人臉檢測使用OpenCV提供的檢測圖像中的目標函數(shù)cvHaarDetectObjects()和"haarcascade_frontalface_alt.xml"人臉檢測分類器對視頻流中的某幅圖像進行搜索,,從而確定圖像中是否含有人臉并計數(shù)人臉數(shù)量,。本功能啟用后,會加載Haar檢測分類器并分配資源,,在圖像格式轉換后進行人臉檢測與頭像保存,。

004.jpg

  圖4、5分別顯示了人臉檢測與頭像保存的流程,。通過目標函數(shù)調用人臉檢測分類器在視頻圖像中找到包含人臉的矩形區(qū)域,,用不同的顏色標識后返回矩形框序列[5]。頭像保存是在人臉檢測的基礎上用cvSetImageROI()標識出頭像區(qū)域,,之后截取保存,。

4 系統(tǒng)測試

  在PC上編譯服務器與客戶端程序,通過串口將服務器可執(zhí)行程序下載到ARM開發(fā)板上,。在串口調試助手SecureCRT上輸入掃描和連接WiFi的指令,,并進行ping測試,。確認WiFi環(huán)境可用后,在ARM上運行服務器程序,,PC上運行客戶端程序,,測試結果如圖6所示。

005.jpg

5 結論

  本文介紹了一種基于Qt和OpenCV的嵌入式無線視頻監(jiān)控系統(tǒng),。經(jīng)過測試,,該系統(tǒng)達到了預期的效果,實現(xiàn)了無線實時監(jiān)控,,其人臉檢測與頭像保存功能增強了監(jiān)控的能力,,解決了常規(guī)監(jiān)控系統(tǒng)只顯示畫面不能對畫面進行處理的問題,。此外,,系統(tǒng)性能穩(wěn)定,成本低廉,,具有廣泛的應用前景,。

參考文獻

  [1] 馬毅.基于Linux的遠程視頻監(jiān)控嵌入式系統(tǒng)的設計與實現(xiàn)[D].上海:上海交通大學,2001.

  [2] 周寶余,,臧雪柏.基于QT的無線多路視頻監(jiān)控系統(tǒng)[J].吉林大學學報(工學版),,2011,41(增刊):204-207.

  [3] BLANCHETTE J,, SUMMERFIELD M. C++ GUI programming with Qt4(Second Edition)[M]. NJ: Prentice Hall in association with Trolltech Press,, 2008.

  [4] 陳峰,郭爽,,趙欣.基于Qt和嵌入式的視頻監(jiān)控系統(tǒng)[J].通信技術,,2011,44(10):109-111.

  [5] BRADSKI G,, KAEHLER A. Learning OpenCV: computer vision with the OpenCV library(First Edition)[M]. CA:O′Reilly Media Inc,, 2008.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉載,。