李來(lái)文,陳希明,劉澤源,周 昕,裴永旭,黃楚俊
(哈爾濱理工大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,黑龍江 哈爾濱 150080)
本系統(tǒng)采用iTop4412 開(kāi)發(fā)板作為開(kāi)發(fā)平臺(tái),借助Linux 操作系統(tǒng)來(lái)實(shí)現(xiàn)軟件上的需求,通過(guò)網(wǎng)線連接路由器,然后在嵌入式系統(tǒng)上搭建Boa Web(Boa Webserver)服務(wù)器,通過(guò)移植MJPG-streamer 軟件采集攝像頭數(shù)據(jù)。用戶只需要通過(guò)電腦端瀏覽器或者手機(jī)端App 即可查看實(shí)時(shí)監(jiān)控畫(huà)面。
在iTop4412 上運(yùn)行定制的Linux 系統(tǒng),開(kāi)發(fā)板搭載UVC 攝像頭的基礎(chǔ)上,將 Mjpeg-streamer、Boa Web 移植到開(kāi)發(fā)板,根據(jù)開(kāi)發(fā)板IP 地址,編寫(xiě)html 文件、App,最終實(shí)現(xiàn)在電腦端和手機(jī)App 上隨時(shí)查看監(jiān)控畫(huà)面的功能。
系統(tǒng)整體方案設(shè)計(jì)如圖1 所示。
圖1 系統(tǒng)整體方案
本系統(tǒng)主要利用iTop4412 開(kāi)發(fā)板搭建遠(yuǎn)程監(jiān)控系統(tǒng)。設(shè)計(jì)任務(wù)分為適配硬件、移植軟件、網(wǎng)頁(yè)設(shè)計(jì)、制作App 四個(gè)部分。
本系統(tǒng)應(yīng)用USB2.0 的UVC 攝像頭,通過(guò)定制內(nèi)核,確保攝像頭在開(kāi)發(fā)板上正常運(yùn)行。
本系統(tǒng)的軟件部分主要包括Linux 操作系統(tǒng)內(nèi)核的定制,根據(jù)需求來(lái)添加或者移除相應(yīng)的驅(qū)動(dòng)。還包括移植Boa Web 服務(wù)器及移植MJPG-streamer 視頻流服務(wù)器。
搭建輕量級(jí)的Web 服務(wù)器Boa Web,通過(guò)IP 地址訪問(wèn)服務(wù)器時(shí),需要登陸首頁(yè)。本監(jiān)控系統(tǒng),首頁(yè)直接顯示監(jiān)控畫(huà)面、報(bào)警器操控按鈕即可。
本遠(yuǎn)程監(jiān)控系統(tǒng)除了提供電腦端瀏覽器訪問(wèn)之外,還支持手機(jī)端瀏覽器及App 訪問(wèn)方式。手機(jī)端瀏覽器訪問(wèn)與電腦端相同,只需要設(shè)計(jì)App 即可。打開(kāi)App 后,點(diǎn)擊開(kāi)始按鈕,即可在App 中看到監(jiān)控畫(huà)面;點(diǎn)擊返回按鈕,即可停止監(jiān)控,回到輸入IP 地址和端口的界面。更改IP 地址或端口后,可繼續(xù)查看其他攝像頭的監(jiān)控畫(huà)面。
通過(guò)Android Studio 進(jìn)行Android 開(kāi)發(fā),最終在Android 10 真機(jī)上測(cè)試,確保App 能夠正常使用。
為確保USB 攝像頭能獲取清晰度較高的視頻采集結(jié)果,同時(shí)保證嵌入式視頻監(jiān)控系統(tǒng)的性能更加穩(wěn)定,必須采用性能較高的處理器作為開(kāi)發(fā)平臺(tái)。
本系統(tǒng)主芯片采用Exynos-4412,該CPU 功能強(qiáng)大,性能卓越,適用于要求系統(tǒng)具有高穩(wěn)定性、高可靠性,以及高效處理和響應(yīng)的場(chǎng)合。對(duì)于嵌入式視頻監(jiān)控系統(tǒng)而言,為用戶提供滿意效果,保證系統(tǒng)的穩(wěn)定性和可靠性是前提。對(duì)該課題而言,基于Exynos-4412 的芯片是合理選擇,既滿足了設(shè)計(jì)上的要求,同時(shí)兼顧價(jià)格的考慮。
USB 攝像頭即插即用,無(wú)需獨(dú)立電源,絕大多數(shù)平臺(tái)都支持。與傳統(tǒng)監(jiān)控?cái)z像頭相比,成本更低,而且品牌、性能眾多,使用者可根據(jù)實(shí)際需求與資金情況,購(gòu)買合適的USB 攝像頭產(chǎn)品使用。同時(shí)Linux 內(nèi)核中有V4L2 攝像設(shè)備的驅(qū)動(dòng)支持,兼容USB 攝像頭。即只要將V4L2 驅(qū)動(dòng)加入到內(nèi)核,在開(kāi)發(fā)板上插入U(xiǎn)SB 攝像頭后,開(kāi)發(fā)板即能正常識(shí)別設(shè)備,USB 攝像頭正常運(yùn)行。
鑒于上述特點(diǎn),本系統(tǒng)選用USB 攝像頭作為視頻采集設(shè)備。
本設(shè)計(jì)的重點(diǎn),主要是軟件部分的編寫(xiě)。軟件主要從以下幾個(gè)方面進(jìn)行設(shè)計(jì)。首先是選用什么樣的操作系統(tǒng)作為開(kāi)發(fā)環(huán)境,由于Linux 開(kāi)源、功能豐富、強(qiáng)大的網(wǎng)絡(luò)功能等特點(diǎn),因此選擇Linux 作為本課題的系統(tǒng)。然后在Linux 操作系統(tǒng)上搭建 Boa Web 服務(wù)器、MJPG-streamer,通過(guò)服務(wù)器將數(shù)據(jù)傳輸出去,在手機(jī)或者電腦上訪問(wèn)相應(yīng)網(wǎng)頁(yè)或手機(jī)APP,就可以實(shí)時(shí)查看攝像頭捕捉到的視頻畫(huà)面。
對(duì)于服務(wù)器傳輸?shù)囊曨l流數(shù)據(jù),在電腦端可以利用瀏覽器直接訪問(wèn)IP 地址和端口,所以電腦端不需要編寫(xiě)代碼。
對(duì)于手機(jī)端提供兩種方法查看監(jiān)控。第一種方式是直接通過(guò)瀏覽器訪問(wèn)IP 地址和端口號(hào);第二種就是通過(guò)App 直接查看監(jiān)控畫(huà)面。
MJPG-streamer 是一款免費(fèi)的基于IP 地址的視頻流服務(wù)器,它的輸入插件從攝像頭讀取視頻數(shù)據(jù),并將視頻數(shù)據(jù)復(fù)制到內(nèi)存中,有多個(gè)輸出插件可將這些視頻數(shù)據(jù)進(jìn)行處理,其中最重要的輸出插件是網(wǎng)站服務(wù)器插件,它將視頻數(shù)據(jù)傳送到用戶瀏覽器中,MJPG-streamer 的工作就是將其中的一個(gè)輸入插件和多個(gè)輸出插件綁定在一起,所有的工作都是通過(guò)它的各個(gè)插件完成的。
Mjpeg-Streamer 的移植需要jpeg 庫(kù),所以必須首先移植jpeg 庫(kù),在網(wǎng)上下載jpeg 源碼jpegsrc.v8b.tar.gz,拷貝到Ubuntu 目錄下。終端進(jìn)入剛解壓出來(lái)的目錄執(zhí)行:
./configure --host=arm-none-linux-gnueabi --prefix=/home/user/out_jpeg 命令配置編譯器與安裝目錄。執(zhí)行make 命令編譯,執(zhí)行make install 命令將其安裝至指定目錄。
下載mjpg-streamer-r63.tar.gz,并解壓到Ubuntu 的一個(gè)目錄下。修改源碼頂層目錄下的Makefile 文件,指定gcc 編譯器,指定動(dòng)態(tài)庫(kù)。
修改plugins/input_uvc/makefile 文件,進(jìn)行如圖2 所示的修改。
修改plugins/output_http/Makefile,進(jìn)行如圖3 所示的修改。
圖 2 input_uvc 修改
圖 3 output_http 修改
圖4 修改start 文件
圖5 App 程序流程圖
配置完成后make,之后將運(yùn)行程序需要的依賴庫(kù)和可執(zhí)行程序拷貝到開(kāi)發(fā)板目錄下。
在開(kāi)發(fā)板的根目錄下創(chuàng)建camera 目錄,將input_uvc.so、libjpeg.so.8、mjpg_streamer、output_http.so、start.sh 以及文件夾www,拷貝到開(kāi)發(fā)板的camera 目錄下。其中,input_uvc.so、libjpeg.so.8、output_http.so 是程序運(yùn)行所需要的依賴庫(kù),start.sh 是執(zhí)行程序的 shell 腳本,mipg_streamer 是可執(zhí)行程序。
將USB 攝像頭插入開(kāi)發(fā)板,超級(jí)終端查看設(shè)備號(hào),之后對(duì)start.sh 文件修改,指定攝像頭設(shè)備號(hào),如圖4 所示。
Boa Web 服務(wù)器是專門(mén)為嵌入式平臺(tái)開(kāi)發(fā)的輕量級(jí)Web 服務(wù)器。本設(shè)計(jì)使用Boa Web 服務(wù)器的原因是當(dāng)用戶通過(guò)電腦或手機(jī)訪問(wèn)服務(wù)器時(shí),可以直接通過(guò)IP 地址查看實(shí)時(shí)監(jiān)控。
官網(wǎng)下載BOA 源碼“boa-0.94.13.tar.gz”解壓到Ubuntu 指定目錄下。
解壓后會(huì)有名字為boa-0.94.13 的文件夾。進(jìn)入這個(gè)文件夾下的src 文件夾里,運(yùn)行./configure 生成Makefile編譯文件。
打開(kāi)剛生成的Makefile 文件,修改其中兩個(gè)參數(shù),指定 gcc 編譯器為:arm-none-linux-gnueabi-gcc。
打開(kāi)compat.h 文件,在第123 行代碼左右找到#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 一行,改為 #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff。
保存后退出,接著make 編譯,對(duì)生成的boa 文件使用命令arm-none-linux-gnueabi-strip boa,進(jìn)行瘦身。
接下來(lái)將boa 文件拷貝到開(kāi)發(fā)板的bin 目錄下;在開(kāi)發(fā)板的etc 目錄下新建boa 文件夾,在根目錄下新建www 文件夾,在www文件夾內(nèi)新建cgi-bin 文件夾;將boa.conf 拷貝到開(kāi)發(fā)板的etc/boa目錄下;接著將Ubuntu 的etc 目錄下的mime.types 拷貝到開(kāi)發(fā)板的etc 目錄下。進(jìn)入到開(kāi)發(fā)板/etc/boa/,打開(kāi) boa.conf,進(jìn)行如下修改。
(1)首先將該文件第49 行左右的 Group nogroup 修改為Group root。
(2)其次將該文件第96 行左右的#ServerName www.your.org.here 修改為 ServerName www.your.org.here。
(3)第三將該文件第115 行左右的 DocumentRoot /var/www 修改為 DocumentRoot /www 這里的“/www”就是前面步驟使用mkdir 創(chuàng)建的www 目錄。
(4)最后將該文件第194 行左右的 ScriptA1ias /cgi-bin//usr/1ib/cgi-bin/修改為 ScriptAlias /cgi-bin/ /www/cgi-bin/。
保存后退出。接著運(yùn)行boa 程序,再運(yùn)行剛才的start.sh 文件,在電腦瀏覽器直接輸入開(kāi)發(fā)板IP 地址即可查看監(jiān)控畫(huà)面。
安卓App 使用Android Studio 開(kāi)發(fā),依據(jù)系統(tǒng)需要,編寫(xiě)程序,在真機(jī)上進(jìn)行功能測(cè)試,最終完成整個(gè)App的開(kāi)發(fā)。整個(gè)程序流程如圖5 所示。
本文結(jié)合嵌入式技術(shù)以及監(jiān)控系統(tǒng)技術(shù),從實(shí)際應(yīng)用出發(fā),提出了一種基于 ARM9 的嵌入式 Web 視頻監(jiān)控系統(tǒng)的設(shè)計(jì)方案,完成了系統(tǒng)的具體實(shí)現(xiàn),有一定的實(shí)用價(jià)值。