張娜,王侃,楊琳
(商洛學院 電子信息與電氣工程學院,陜西商洛726000)
遠程視頻監控技術是集合了網絡技術、通信技術、傳感器技術為一體的綜合性技術,根據人們對視頻信息的時效性、靈活性等多方面高要求的特點,得到市場和人們的集中關注[1-2]。從生活的各種場合可以看到,視頻監控系統已經從早先的軍事需求、銀行安全等高級別的安防領域擴展到現在的校園安全、工業生產、農業生產和交通旅游等很多領域,充分體現了其專業性和可靠性的優點[3-4]。針對傳統視頻監控系統安全性差、時效性差、人力成本高且無法在客戶端隨時隨地查看監控效果等缺點[5],本文采用嵌入式Linux的操作系統、USB攝像頭、TCP傳輸協議及QT軟件設計實現遠程視頻圖像數據采集、傳輸及在客戶端實時顯示的功能。
視頻監控系統采用嵌入式Linux的操作系統作為開發的核心,系統通過服務器操控USB攝像頭設備進行采集視頻數據信息,經過JPEG編碼、解碼壓縮控制數據的采集,最終采用無線網絡通訊進行數據傳輸的過程。在PC機(也就是客戶端)上,通過網絡傳輸得到數據,進行數據解析拿到有效格式并進行圖像顯示,最終實現視頻監控系統。視頻監控系統結構如圖1所示。
本系統使用ITop-4412開發板作為核心板,ITop-4412這款開發板的處理器采取ARMA9核心處理器,板上安裝了能實現很多功能的硬件[6]。
主要包括環境搭建、Uboot移植、內核移植、根文件系統制作四方面。
1.2.1 環境搭建
在開發之前,需要進行交叉編譯環境的搭建,就是需要對系統進行文件更改和配置,并且安裝交叉編譯的工具鏈這兩個步驟[7]。在Ubuntu虛擬機的開發環境中,要將現在所需要的文件進行編譯,可以得到想要的程序與開發用的操作系統等,并進行設置操作,最終就需要上傳到系統需要的ARM開發板使用。
搭建具體步驟為:
1)進入虛擬機情況下,首先建立一個新目次在home下,利用mkdir號令建立,號令為mkdir/home/arm;
2)打開剛剛創建的目錄arm,這時需要下載工具包,然后再把要用的編譯工具包放到arm目錄中;
3)把工具包解壓完成后,需要修改現在已經有的環境所要配置的文件:sudo vim/etc/profile,profile文件中添加arm-Linux-的路徑:export PATH=$PATH,退出文件編譯器;
4)然后就要更新一下剛剛修改過的profile配置文件:打開這個文件,然后用命令去更新,Source/etc/profile;
5)檢查是否已經安裝成功。
環境是已經完全搭建好了,需要檢查是不是好用,首先是打開虛擬機,需要把寫好的代碼進行編譯,看看有沒有報錯誤,沒有問題之后,使用arm的編譯工具再進行編譯一次,打開串口調試工具,查看系統文件的信息,然后就要進行移植了。
1.2.2 Uboot移植
Uboot移植步驟為:
1)首先要修改Makefile文件,在文件中加上交叉編譯工具鏈所在的路徑,添加如下信息:CROSS_COMPFILE:=;
2)make clean(清除之前的編譯);
3)配置要使用的Uboot信息(把系統信息編程私有的,主要針對要移植的開發板做相應修改);
4)最后需要將Uboot進行編譯,再使用make命令生成目標文件,在生成的文件中有三個需要著重看一下,Uboot(elf文件)、Uboot.bin(二進制文件)、System.map(符號映射表),后面還要再進行更改。
再次進行編譯Uboot,在串口調試終端上復位可以看到圖2串口信息。

圖2 串口信息圖
1.2.3 內核移植
1)解壓:把壓縮包Linux-3.14.tar.xz首先復制在/home/linux目錄下,然后通過tar命令進行解壓,解壓完之后就打開linux-3.14文件;
2)對最上層的目錄Makefile文件進行修改,主要是修改體系架構和交叉編譯器;
3)導入默認配置$makeexynos_defconfig;
4)使用make進行編譯,需要把內核全部編譯。
完成上述的操作步驟,就會在目錄下新生成一個文件,這個zImage是已經被壓縮過之后的鏡像文件。
1.2.4 根文件系統制作
根文件系統制作的步驟為:
1)在官網上將源碼包保存在本地,下載地址路徑http://busybox.net/downloads/;
2)使用tar命令,把下載好的文件包進行解壓,并且保存到新建目錄下;
3)在當前目錄下,打開源碼的文件,使用命令cd;
4)對源碼編譯;
5)安裝busybox:要安裝的路徑是在/linux目錄下,也就是源碼的同一級目錄下;
6)打開上一步安裝好的那一級目錄,創建需要的目錄,也就是系統文件夾;
7)添加庫:刪掉不需要的庫,保證庫的容量不能超過8 M;
8)增添系統的啟動文件,需要在etc下添加文件inittab。
重新編譯內核,需要注意的是新制作的文件系統尺寸若超出8 M,刪除不需要的庫文件。
該嵌入式視頻監控的軟件設計包括了服務端和客戶端。服務端是實現了在特定條件下對視頻采集的部分和通過TCP協議網絡進行傳輸的部分;客戶端部分主要是接受所采集到的視頻數據和通過QT軟件處理進行視頻顯示[8]。如圖3是服務器端軟件功能處理的流程圖。

圖3 服務器端軟件流程圖
Video4Linux2(V4L2)是在Linux操作系統中有關視頻設備的相關內核驅動,設備包括了USB接口攝像頭和視頻捕捉卡等[9]。利用V4L2視頻采集接口采集圖片,并將采集到的圖片轉換為jpeg格式的客戶端數據包。
設計思路:本模塊采用線程處理,提供一個線程接口函數給服務器,開啟線程后便可開始圖片的采集與轉換得到圖片數據。
本系統使用TCP/IP協議進行視頻流的傳輸,通過使用socket的編程實現代碼的編寫,在服務器端進行監控,一直等待客戶端的請求消息,并且發送USB攝像頭獲取到的視頻數據。代碼中通過調用listenfd=socket(AF_INET,SOCK_STREAM,0);創建套接字listenfd進行監控客戶端的連接情況。

使用socket建立起網絡之后,通過函數tcp_server_send進行數據傳輸。

客戶端接收到服務器傳輸過來的數據并使用QT軟件進行圖像視頻顯示。QT本身是一個可跨平臺的框架,它是基于C++的應用開發的[10]。在客戶端的設計中,首先使用QT軟件平臺中已提供的網絡協議,進行實現客戶端與服務器的兩端連接,接下來客戶端需要向服務器發送數據包進行請求,收到請求回應后,通過結構體的數據類型進行圖像接收,顯示圖像時就要用到QT中自帶的類QPixmap,這個類的功能是能夠接收單個文件在畫板上顯示文件內容,前提是需要知道文件路徑,并且路徑的格式是字符串,使用QPainter里面的drawPixmap()這個函數,將需要顯示的文件繪制到設備上面。
qDebug()<<"qt_jpeg size="<
pixmap->loadFromData((unsigned char*)ppic->jpeg,ppic->jpeg_len,"JPEG");
ui->label->setPixmap(*pixmap);
timer->start(60);
通過使用QT中的TCP協議實現了客戶端與服務器的連接,并進行視頻數據顯示,客戶端初始化效果如圖4所示,按下開始按鈕,建立網絡通信,開始進行顯示視頻數據,效果如圖5所示,客戶端正常運行。

圖4 客戶端初始化效果圖

圖5 運行效果圖
在相對穩定的網絡環境下,同時保證數據源質量的前提下,對采集、接收到的數據包進行統計,結果如表1所示。

表1 采集和接收到的數據包統計
本文是基于QT的遠程視頻監控系統設計,使用Linux操作系統搭建環境,通過USB攝像頭連接在ITop-4412開發板采集視頻圖像數據,用TCP傳輸協議通過網絡傳送給客戶端,使用QT軟件設計進行視頻顯示,最終通過交叉編譯工具將系統移植到ITop-4412開發板。實驗結果表明,系統能實時、穩定地傳輸視頻數據,并取得了良好的監控效果,該系統具有實時性強、可擴展性強、靈活性高的優點,達到了方案的預期效果。