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