劉智旸+馬婭婕 余湧
摘 要: 為了實現視頻監控的移動性和遠程操控,結合無線網絡、Java語言和Eclipse開發編譯工具,提出一種使用Android和Raspberry Pi組合,實現遠程實時視頻監控的新思路。攝像頭獲取圖像數據,通過Raspberry Pi處理后以視頻流的形式上傳到圖像服務器,以Android智能手機作為移動控制終端,通過WiFi訪問圖像服務器,獲取圖像數據并在控制界面進行顯示,用戶通過視頻信息對移動機器人進行遠程控制,達到遠程實時監控的效果。通過實驗測試,該系統可以有效地進行遠程視頻監控,具有良好的可用性。
關鍵詞: 遠程視頻監控; Android; Raspberry Pi; 圖像服務器; 移動機器人;實時監控
中圖分類號: TN948.4?34 文獻標識碼: A 文章編號: 1004?373X(2017)07?0012?04
Design of remote video surveillance system based on Android and Raspberry Pi
LIU Zhiyang, MA Yajie, YU Yong
(School of Information Science and Engineering, Wuhan University of Science and Technology, Wuhan 430081, China)
Abstract: In order to implement the mobility and remote control of the video surveillance, a new thought of the real?time video surveillance implemented based on the Android and Raspberry Pi is proposed in combination with the wireless network, Java language and Eclipse tool. The image data is acquired with the camera, which is processed with the Raspberry Pi to upload it to the image server with the video streaming. The Android smart phone is used as the mobile control terminal, which can access the image server via WiFi to acquire the image data and display it on the control interface. The user can control the mobile robot remotely with the video information to realize the remote real?time monitoring effect. The system was performed with experimental test. The results show that the system can monitor the remote video effectively, and has high availability.
Keywords: remote video surveillance; Android; Raspberry Pi; image server; mobile robot; real?time monitoring
0 引 言
傳統的視頻監控系統大部分采用PC機作為控制終端,在使用過程中受到工作環境和網絡環境等其他因素的影響,極大地限制了監控者控制的靈活性。并且隨著監控需求的不斷改變和發展,視頻傳輸的實時性、監控設備的移動性等一些實際需求也越來越高。
由于Android系統的開放使得Android軟件的開發變得更加容易,并且基于Android移動設備使用的普遍性和靈活性,結合Raspberry Pi強大的圖像處理能力和體積小的特點,本文提出了基于Android和Raspberry Pi的遠距離實時視頻監控系統的設計方案。
在系統中使用搭載Web攝像頭的移動機器人進行視頻采集,移動機器人使圖像采集更加靈活、采集范圍更廣;為了方便圖像數據的傳輸,減少控制終端圖像數據下載壓力,使用圖像服務器緩存圖像數據;為了保障視頻流暢度,使用SurfaceView控件播放視頻,獨特的鎖定銷毀機制減少播放過程中黑屏或者花屏現象的發生。
1 系統整體框架和功能需求分析
系統由移動機器人終端、圖像服務器和移動控制終端三部分組成,其中移動機器人終端是搭載了Raspberry Pi開發板和車載Web攝像頭的移動小車,移動控制終端以Android智能手機作為控制平臺,兩者通過WiFi無線網絡連接圖像服務器并進行數據通信,系統整體設計圖如圖1所示。
在整個系統的運行過程中,圖像服務器作為兩個終端視頻數據傳輸的中介,起到圖像數據緩存的作用。
移動機器人終端的主要功能有兩個:
(1) 通過USB無線網卡連接到無線網絡,接收和執行控制終端發送的控制指令。
(2) 車載Web攝像頭實時獲取圖像數據并進行壓縮編碼,通過無線網絡上傳到圖像服務器,完成視頻數據的傳輸。
Android控制終端的主要功能有兩個:
(1) 通過無線網絡訪問圖像服務器,獲取上傳的視頻圖像數據,將圖像數據解碼后在控制界面中進行視頻顯示。
(2) 通過無線網絡與移動小車取得連接,在控制界面中通過圖像信息實現對移動小車的遠程控制。
2 圖像服務器
在系統中,使用MJPG?Streamer圖像軟件提供的圖像服務器進行視頻圖像數據的緩存。MJPG?Streamer是一款開源的輕量級視頻服務器軟件[1]。該軟件可應用在基于IP協議的網絡中,將Web攝像頭獲取到的圖像數據以視頻流的形式上傳到圖像服務器中進行緩存。
圖像服務器在整個系統運行過程中扮演著機器人終端和控制終端視頻傳輸的中介。控制終端在獲取視頻數據時,不需要等到整個視頻下載完成,通過無線網絡訪問圖像服務器,下載實時圖像數據即可。
圖像服務器的使用保證了圖像數據的完整性和傳輸的穩定性,同時也方便對視頻數據進行存儲、刪除等其他操作。并且系統利用MJPG?Streamer調用Web攝像頭的硬件壓縮功能,降低服務器的載荷,使整個系統具備節約資源、減少內存占用、運行速度快的優點[2]。
3 移動機器人終端的設計
機器人終端是以二輪驅動的小車作為移動平臺,采用Raspberry Pi + Arduino作為主控制器,分別實現不同的控制功能。其中Raspberry Pi是一款基于Linux系統、只有一張信用卡大小的卡片式計算機,具有強大的視頻、圖像、音頻處理能力,且具有體積小、價格低廉、功能強大的特點[3],特別適合作為小型移動設備的多媒體信息處理及傳輸平臺。Arduino控制平臺是一塊基于開放源代碼的USB接口板,簡單易用,程序的燒寫和修改變得更加容易[4],并且可以方便地與現有的電子元器件進行連接以實現控制和交互功能,在本系統中可以作為移動機器人的電機和舵機的控制平臺。
移動機器人終端的結構圖如圖2所示。在機器人終端通過Arduino平臺接收并判斷手機發送的控制指令,實現對小車電機運轉和舵機轉動的控制;Raspberry Pi控制Web攝像頭進行圖像攝取,然后通過無線網卡上傳到圖像服務器。
由此可見,機器人終端主要完成兩個工作:控制指令的判別和執行;攝像頭獲取到的實時圖像數據的處理和上傳。
3.1 控制指令判別和執行
手機發出的控制指令通過無線網絡和socket通信接口發送給Raspberry Pi,Raspberry Pi將控制指令通過USB數據線傳送給Arduino,在Arduino中對指令進行判別和執行:通過控制兩個電機的運行狀態來控制移動機器人的行動狀態;Arduino控制板通過輸出不同脈寬的信號進行舵機轉動角度控制[5]。將攝像頭固定在舵機上,舵機的旋轉帶動攝像頭的旋轉,擴大了攝像頭的視角,增加可視范圍。
3.2 視頻處理和上傳
移動機器人使用Web攝像頭,通過UVC協議免驅動安裝與Raspberry Pi進行連接。因為Web攝像頭中包含MJPEG編碼器,采用JPEG圖像壓縮技術實現視頻數據的壓縮處理[6]。然后將每一幀圖像數據傳送給Raspberry Pi,通過Raspberry Pi的MJPG?Streamer圖像開發軟件將圖像數據以視頻流的形式通過無線網絡傳送到圖像服務器中。作為控制終端的手機可以訪問圖像服務器下載每一幀圖像數據,然后進行相應的解碼和顯示操作。
3.3 圖像質量保證
為了減少視頻數據傳輸時占用的帶寬,使圖像傳輸更加流暢,采用減小圖像分辨率和圖像傳輸幀率的方法。
(1) 圖像分辨率的選取:分辨率是指單位長度中的像素數目。在調試過程中對常用分辨率下每幀圖像的效果和大小進行記錄和比對,如表1所示。
為了兼顧圖像的質量和圖像數據的大小,最后選擇320×240作為圖像分辨率。
表1 不同分辨率圖片大小和效果
[分辨率 圖片大小 圖片效果 160×120 6 KB左右 模糊 320×240 10 KB左右 清晰 600×400 14 KB左右 清晰 640×480 16 KB左右 清晰 ]
(2) 圖像傳輸幀率:幀率是指單位時間內顯示的圖片數量,單位為f/s。系統選用的Web攝像頭支持的幀率為1~30 f/s,根據人眼的視覺暫留效應,當傳輸的圖像為24幀以上時會認為畫面是連續的,為了基本滿足人眼的觀看效果,并且保證視頻圖像顯示的流暢度和視頻播放的穩定性,選用20~24 f/s作為測試幀率。
4 移動控制終端的設計
系統以Android智能手機作為控制終端,Eclipse作為應用軟件開發平臺,設計一款APP應用,實現對機器人的遠程控制以及視頻顯示。
在功能實現上將視頻顯示和遠程控制分別放在兩個線程中運行,避免線程阻塞,減少系統資源的損耗。控制終端的工作流程圖如圖3所示。
移動控制終端的設計主要包括三個部分:UI控制界面,移動機器人的遠程控制以及視頻的顯示。
4.1 UI控制界面
UI控制界面是通過調用Android的SDK編寫控制端的可視化界面[7]。在控制界面中,連接Button按鈕完成與移動機器人終端的遠程連接,前后左右Button按鈕完成對移動機器人的行進控制,攝像頭旋轉Button按鈕完成對攝像頭的轉動控制,SurfaceView控件進行視頻圖像的顯示。
當機器人終端正常工作后,用戶點擊APP進入到控制界面,實時采集的圖像信息會通過SurfaceView控件顯示在屏幕上,遠程連接移動機器人后,用戶通過圖像信息對移動機器人進行遠程控制。
4.2 遠程控制
控制界面提供給用戶不同的控制按鈕,通過點擊不同的Button對移動機器人進行控制。控制按鈕的主要功能有:與移動機器人的遠程連接和斷開、移動機器人前后左右的行進、車載攝像頭的旋轉。
控制指令的發送是通過使用Socket接口通信技術來實現。Socket有兩種通信方式:面向連接的方式和無連接方式[8],本設計采用面向連接的方式來提高通信的可靠性。通過機器人的IP地址和端口號創建Socket,獲得輸出流OutputStream,然后使用流套接字完成對機器人控制指令的傳輸,實現對機器人的遠程控制。Socket通信的創建和數據傳輸流程圖如圖4所示。
Socket通信包括三個步驟:建立連接、發送數據、關閉套接字。函數核心代碼如下:
public void WiFiSend(String command){
socket = new Socket("192.168.199.213",8000);
WiFiout = socket.getOutputStream();
WiFiout.write(command.getBytes());
Socket.close(); }
4.3 視頻顯示
4.3.1 視頻圖像的獲取
通過無線網絡訪問指定的圖像服務器,從圖像服務器下載由Raspberry Pi上傳的每一幀實時圖像數據,下載后的圖像數據在控制終端進行圖片解碼操作,獲取數據包中的有效數據并存入數據緩沖區。
每一幀圖片的格式為JPEG格式,JPEG文件主要包括文件起始符、壓縮數據和文件結束符[9]。讀取數據找到圖片壓縮數據的起始標記碼和結束標記碼,除去標記碼后獲得有效壓縮數據,獲取圖片壓縮數據的主要函數代碼如下:
public void DecodedPic() {
try {
header = new String(jpg_buf,"utf?8");
int index = header.indexOf(conLenString);
if (index != -1){
int index2 = header.indexOf("\r", index);}
if (index2 != -1) {
String frameLenString = header.substring
(index+contentLenString.length(),index2);}
for (i=0;i if (jpg_buf[i] == (byte) 0xFF) { Arrcopy(jpg_buf,i,jpg_buf,0,pos-i); pos = pos-i;} }}} 4.3.2 視頻的播放 在控制終端下載每一幀圖像數據后,對數據進行解碼并創建位圖進行顯示,循環繪制位圖達到視頻的效果。 采用傳統的View控件繪圖存在三個缺陷:View缺乏緩沖機制;當程序需要更新圖像時,程序必須重繪View上的整張圖片,并且沒有銷毀機制,導致在重繪過程中會出現黑屏或者花屏的現象,影響視頻觀看效果;View的繪圖必須在當前UI線程中進行,更新View組件時總要采用Handler處理,程序需要花較長的時間進行重繪,主線程將會被阻塞,使得視頻觀看不流暢[10]。 為了保證視頻的觀看效果和流暢度,選用SurefaceView控件進行位圖的繪制,SurfaceView與SurfaceHolder結合使用,在主線程之外的線程中在屏幕上進行位圖的繪制。其中SurfaceView控件的更新機制會更新SurfaceView的繪制,通過不斷進行位圖的重繪達到實時視頻的效果。由于SurfaceView控件在單獨的線程中更新畫面,不會阻塞主UI線程,從而提高了程序的反應速度,也保證了圖像顯示的流暢度。 圖形顯示的過程如下:實現SurfaceHolder.Callback接口;獲得SurfaceHolder對象;SurfaceHolder.addCallback()添加回調函數;SurfaceHolder.lockCanvas()鎖定畫布;Canvas繪圖;SurfaceHolder.unlockCanvas()解鎖提交圖形。 5 系統調試 系統的綜合測試主要測試兩個方面的內容:控制終端對機器人終端的遠程控制,檢查機器人是否能準確地執行控制指令;控制終端的視頻顯示,查看視頻播放的流暢度和清晰度。 裝配完畢的移動機器人小車如圖5所示。正常運行后,在APP中通過WiFi無線網絡與機器人取得連接,在操作界面中用戶根據實時圖像信息對機器人進行遠程控制,點擊操作界面中的方向控制按鈕,觀察到機器人能夠準確快速地執行相應的指令。通過對圖像幀數的設置和對比,機器人攝像頭圖像采集的幀數最終設置為20 f/s。在10M帶寬的無線網絡下,圖像下載速度可以達到96 Kb/s,并且20 f/s在畫面品質和播放流暢度方面達到平衡,更高或更低帶寬需要專門調試并設置。視頻顯示的效果圖如圖6所示。 6 結 語 本系統通過Android和Raspberry Pi的組合,提供了一種能夠實現遠程實時視頻監控的新方案。Raspberry Pi增強了下位機的視頻圖像處理能力,Android APP增加了控制終端使用的靈活性和便捷性,移動車載攝像頭相比固定攝像頭大大增加了監控范圍。該系統具有成本低、功耗小、操作方便快捷、移動靈活性大等優點,實現了遠距離、可移動、實時視頻監控。 參考文獻 [1] 周鵬飛.基于MJPG?Streamer的移動視頻監控系統的設計與研究[D].淮南:安徽理工大學,2013. [2] 劉濤,呂勇,毛海波.基于WiFi技術的無線視頻監控系統設計[J].現代計算機(專業版),2015(1):49?53. [3] 張占軍,陳詩偉,趙煜,等.智能家居系統的無線控制方案設計[J].科教導刊?電子版,2015(1):283?284. [4] 卞云松.基于Arduino單片機的避障小車機器人[J].自動化技術與應用,2014,33(1):16?19. [5] 蔡睿姸.基于Arduino的舵機控制系統設計[J].電腦知識與技術,2012,8(15):3719?3721. [6] 劉塵塵.基于ARM的遠程視頻監控系統設計[J].計算機測量與控制,2012,20(8):2127?2129. [7] 王辰,周杰,季櫸.基于Android平臺的實時視頻技術的實現[J].計算機應用與軟件,2014,36(6):120?121. [8] 閻秀英,周亞建,胡正名.基于Java的網絡實時遠程監控系統設計[J].計算機工程,2009,35(5):74?75. [9] 蔡紅亮.靜止圖像壓縮技術(JPEG)芯片的設計[D].南京:東南大學,2003. [10] 張雅楠,楊璐,鄭麗敏.基于Android手機的遠程視頻監控系統的設計與開發[J].計算機應用,2015,33(z1):283?286.