張娜,王侃,楊琳
(商洛學(xué)院 電子信息與電氣工程學(xué)院,陜西商洛726000)
遠程視頻監(jiān)控技術(shù)是集合了網(wǎng)絡(luò)技術(shù)、通信技術(shù)、傳感器技術(shù)為一體的綜合性技術(shù),根據(jù)人們對視頻信息的時效性、靈活性等多方面高要求的特點,得到市場和人們的集中關(guān)注[1-2]。從生活的各種場合可以看到,視頻監(jiān)控系統(tǒng)已經(jīng)從早先的軍事需求、銀行安全等高級別的安防領(lǐng)域擴展到現(xiàn)在的校園安全、工業(yè)生產(chǎn)、農(nóng)業(yè)生產(chǎn)和交通旅游等很多領(lǐng)域,充分體現(xiàn)了其專業(yè)性和可靠性的優(yōu)點[3-4]。針對傳統(tǒng)視頻監(jiān)控系統(tǒng)安全性差、時效性差、人力成本高且無法在客戶端隨時隨地查看監(jiān)控效果等缺點[5],本文采用嵌入式Linux的操作系統(tǒng)、USB攝像頭、TCP傳輸協(xié)議及QT軟件設(shè)計實現(xiàn)遠程視頻圖像數(shù)據(jù)采集、傳輸及在客戶端實時顯示的功能。
視頻監(jiān)控系統(tǒng)采用嵌入式Linux的操作系統(tǒng)作為開發(fā)的核心,系統(tǒng)通過服務(wù)器操控USB攝像頭設(shè)備進行采集視頻數(shù)據(jù)信息,經(jīng)過JPEG編碼、解碼壓縮控制數(shù)據(jù)的采集,最終采用無線網(wǎng)絡(luò)通訊進行數(shù)據(jù)傳輸?shù)倪^程。在PC機(也就是客戶端)上,通過網(wǎng)絡(luò)傳輸?shù)玫綌?shù)據(jù),進行數(shù)據(jù)解析拿到有效格式并進行圖像顯示,最終實現(xiàn)視頻監(jiān)控系統(tǒng)。視頻監(jiān)控系統(tǒng)結(jié)構(gòu)如圖1所示。
本系統(tǒng)使用ITop-4412開發(fā)板作為核心板,ITop-4412這款開發(fā)板的處理器采取ARMA9核心處理器,板上安裝了能實現(xiàn)很多功能的硬件[6]。
主要包括環(huán)境搭建、Uboot移植、內(nèi)核移植、根文件系統(tǒng)制作四方面。
1.2.1 環(huán)境搭建
在開發(fā)之前,需要進行交叉編譯環(huán)境的搭建,就是需要對系統(tǒng)進行文件更改和配置,并且安裝交叉編譯的工具鏈這兩個步驟[7]。在Ubuntu虛擬機的開發(fā)環(huán)境中,要將現(xiàn)在所需要的文件進行編譯,可以得到想要的程序與開發(fā)用的操作系統(tǒng)等,并進行設(shè)置操作,最終就需要上傳到系統(tǒng)需要的ARM開發(fā)板使用。
搭建具體步驟為:
1)進入虛擬機情況下,首先建立一個新目次在home下,利用mkdir號令建立,號令為mkdir/home/arm;
2)打開剛剛創(chuàng)建的目錄arm,這時需要下載工具包,然后再把要用的編譯工具包放到arm目錄中;
3)把工具包解壓完成后,需要修改現(xiàn)在已經(jīng)有的環(huán)境所要配置的文件:sudo vim/etc/profile,profile文件中添加arm-Linux-的路徑:export PATH=$PATH,退出文件編譯器;
4)然后就要更新一下剛剛修改過的profile配置文件:打開這個文件,然后用命令去更新,Source/etc/profile;
5)檢查是否已經(jīng)安裝成功。
環(huán)境是已經(jīng)完全搭建好了,需要檢查是不是好用,首先是打開虛擬機,需要把寫好的代碼進行編譯,看看有沒有報錯誤,沒有問題之后,使用arm的編譯工具再進行編譯一次,打開串口調(diào)試工具,查看系統(tǒng)文件的信息,然后就要進行移植了。
1.2.2 Uboot移植
Uboot移植步驟為:
1)首先要修改Makefile文件,在文件中加上交叉編譯工具鏈所在的路徑,添加如下信息:CROSS_COMPFILE:=;
2)make clean(清除之前的編譯);
3)配置要使用的Uboot信息(把系統(tǒng)信息編程私有的,主要針對要移植的開發(fā)板做相應(yīng)修改);
4)最后需要將Uboot進行編譯,再使用make命令生成目標文件,在生成的文件中有三個需要著重看一下,Uboot(elf文件)、Uboot.bin(二進制文件)、System.map(符號映射表),后面還要再進行更改。
再次進行編譯Uboot,在串口調(diào)試終端上復(fù)位可以看到圖2串口信息。
圖2 串口信息圖
1.2.3 內(nèi)核移植
1)解壓:把壓縮包Linux-3.14.tar.xz首先復(fù)制在/home/linux目錄下,然后通過tar命令進行解壓,解壓完之后就打開linux-3.14文件;
2)對最上層的目錄Makefile文件進行修改,主要是修改體系架構(gòu)和交叉編譯器;
3)導(dǎo)入默認配置$makeexynos_defconfig;
4)使用make進行編譯,需要把內(nèi)核全部編譯。
完成上述的操作步驟,就會在目錄下新生成一個文件,這個zImage是已經(jīng)被壓縮過之后的鏡像文件。
1.2.4 根文件系統(tǒng)制作
根文件系統(tǒng)制作的步驟為:
1)在官網(wǎng)上將源碼包保存在本地,下載地址路徑http://busybox.net/downloads/;
2)使用tar命令,把下載好的文件包進行解壓,并且保存到新建目錄下;
3)在當(dāng)前目錄下,打開源碼的文件,使用命令cd;
4)對源碼編譯;
5)安裝busybox:要安裝的路徑是在/linux目錄下,也就是源碼的同一級目錄下;
6)打開上一步安裝好的那一級目錄,創(chuàng)建需要的目錄,也就是系統(tǒng)文件夾;
7)添加庫:刪掉不需要的庫,保證庫的容量不能超過8 M;
8)增添系統(tǒng)的啟動文件,需要在etc下添加文件inittab。
重新編譯內(nèi)核,需要注意的是新制作的文件系統(tǒng)尺寸若超出8 M,刪除不需要的庫文件。
該嵌入式視頻監(jiān)控的軟件設(shè)計包括了服務(wù)端和客戶端。服務(wù)端是實現(xiàn)了在特定條件下對視頻采集的部分和通過TCP協(xié)議網(wǎng)絡(luò)進行傳輸?shù)牟糠?;客戶端部分主要是接受所采集到的視頻數(shù)據(jù)和通過QT軟件處理進行視頻顯示[8]。如圖3是服務(wù)器端軟件功能處理的流程圖。
圖3 服務(wù)器端軟件流程圖
Video4Linux2(V4L2)是在Linux操作系統(tǒng)中有關(guān)視頻設(shè)備的相關(guān)內(nèi)核驅(qū)動,設(shè)備包括了USB接口攝像頭和視頻捕捉卡等[9]。利用V4L2視頻采集接口采集圖片,并將采集到的圖片轉(zhuǎn)換為jpeg格式的客戶端數(shù)據(jù)包。
設(shè)計思路:本模塊采用線程處理,提供一個線程接口函數(shù)給服務(wù)器,開啟線程后便可開始圖片的采集與轉(zhuǎn)換得到圖片數(shù)據(jù)。
本系統(tǒng)使用TCP/IP協(xié)議進行視頻流的傳輸,通過使用socket的編程實現(xiàn)代碼的編寫,在服務(wù)器端進行監(jiān)控,一直等待客戶端的請求消息,并且發(fā)送USB攝像頭獲取到的視頻數(shù)據(jù)。代碼中通過調(diào)用listenfd=socket(AF_INET,SOCK_STREAM,0);創(chuàng)建套接字listenfd進行監(jiān)控客戶端的連接情況。
使用socket建立起網(wǎng)絡(luò)之后,通過函數(shù)tcp_server_send進行數(shù)據(jù)傳輸。
客戶端接收到服務(wù)器傳輸過來的數(shù)據(jù)并使用QT軟件進行圖像視頻顯示。QT本身是一個可跨平臺的框架,它是基于C++的應(yīng)用開發(fā)的[10]。在客戶端的設(shè)計中,首先使用QT軟件平臺中已提供的網(wǎng)絡(luò)協(xié)議,進行實現(xiàn)客戶端與服務(wù)器的兩端連接,接下來客戶端需要向服務(wù)器發(fā)送數(shù)據(jù)包進行請求,收到請求回應(yīng)后,通過結(jié)構(gòu)體的數(shù)據(jù)類型進行圖像接收,顯示圖像時就要用到QT中自帶的類QPixmap,這個類的功能是能夠接收單個文件在畫板上顯示文件內(nèi)容,前提是需要知道文件路徑,并且路徑的格式是字符串,使用QPainter里面的drawPixmap()這個函數(shù),將需要顯示的文件繪制到設(shè)備上面。
qDebug()<<"qt_jpeg size="<
pixmap->loadFromData((unsigned char*)ppic->jpeg,ppic->jpeg_len,"JPEG");
ui->label->setPixmap(*pixmap);
timer->start(60);
通過使用QT中的TCP協(xié)議實現(xiàn)了客戶端與服務(wù)器的連接,并進行視頻數(shù)據(jù)顯示,客戶端初始化效果如圖4所示,按下開始按鈕,建立網(wǎng)絡(luò)通信,開始進行顯示視頻數(shù)據(jù),效果如圖5所示,客戶端正常運行。
圖4 客戶端初始化效果圖
圖5 運行效果圖
在相對穩(wěn)定的網(wǎng)絡(luò)環(huán)境下,同時保證數(shù)據(jù)源質(zhì)量的前提下,對采集、接收到的數(shù)據(jù)包進行統(tǒng)計,結(jié)果如表1所示。
表1 采集和接收到的數(shù)據(jù)包統(tǒng)計
本文是基于QT的遠程視頻監(jiān)控系統(tǒng)設(shè)計,使用Linux操作系統(tǒng)搭建環(huán)境,通過USB攝像頭連接在ITop-4412開發(fā)板采集視頻圖像數(shù)據(jù),用TCP傳輸協(xié)議通過網(wǎng)絡(luò)傳送給客戶端,使用QT軟件設(shè)計進行視頻顯示,最終通過交叉編譯工具將系統(tǒng)移植到ITop-4412開發(fā)板。實驗結(jié)果表明,系統(tǒng)能實時、穩(wěn)定地傳輸視頻數(shù)據(jù),并取得了良好的監(jiān)控效果,該系統(tǒng)具有實時性強、可擴展性強、靈活性高的優(yōu)點,達到了方案的預(yù)期效果。