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