顏珂斐, 杜 娥
(電子科技大學成都學院 通信與信息工程系, 四川 成都 611731)
隨著對物聯網技術的研究不斷深入,該項技術在家居遠程看護和管理中得到越來越多的應用[1]。筆者設計了一種可以應用于物聯網家居中的遠程監控系統,該系統采用ARM嵌入式系統作為視頻采集和數據處理中心,用戶可通過網絡終端(計算機或智能手機等)訪問數據處理中心,對用戶家居情況進行遠程的實時監控[2],且可以及時保存監控錄像中可疑人員的相關記錄。若智能家居無線傳感網防盜系統發現非法入侵者,還可將警告信息發給系統,通過公用通信網絡遠程報告給用戶。
應用于物聯網智能家居中的遠程監控系統可以與由ZigBee技術組成的無線傳感器網絡共同工作[3],完成對家居安全情況的監控,具體結構如圖1所示。

圖1 系統總體結構圖
系統采用ARM9開發板作為整個系統的數據處理中心,通過視頻采集設備完成對圖像的采集,經由數據處理中心進行圖像壓縮處理及傳輸。用戶可以通過手機等智能終端訪問視頻監控服務器,遠程實時察看家居情況[4]。另外,系統還可配合ZigBee無線傳感器網絡完成對非法入侵者圖像的采集并保存在存儲設備中,同時將報警信息發向用戶終端[5]。
系統硬件平臺選用飛旭FS-PAM9200E嵌入式ARM開發板,其主處理器為Atmel公司的AT91RM9200 ARM處理器,采用ARM920T內核。操作系統選用的是專門針對嵌入式平臺定制的armLinux。為了實現遠程監控系統的功能,在軟件中進行了監控視頻圖像的采集、壓縮和傳輸3個模塊的設計。以下重點介紹該系統3個模塊功能的實現方法。
在armLinux下,視頻采集設備的使用是利用API接口標準Video4Linux(簡稱V4L)來支持的。V4L的特點是把視頻設備當作一個設備文件/dev/video1進行訪問[6]。當開發板上插入USB攝像頭后,需要進行視頻圖像的采集工作時,對文件video1的操作即為對攝像頭的操作。
需要注意的是,在攝像頭打開之后,應該對其分辨率、亮度、格式等參數進行正確的設置,否則很可能無法正確采集圖像。在視頻圖像的截取上,系統選用了V4L中的read()讀取法,通過內核緩沖區來直接來進行圖像采集[7],并且將采集到的圖像放入自定義的緩沖區buf中,等待后續壓縮模塊的處理。
因系統需要達到實時遠程監控的目的,為減少視頻傳輸中的數據量、提高傳輸效率,系統的圖像壓縮模塊需要對采集到的bmp圖像進行壓縮。而考慮到嵌入式處理器的主頻較低,且性能遠不如普通的計算機處理器,所以選用了算法復雜度低且對硬件處理能力要求不高的JPEG壓縮方式,雖然JPEG方式是針對靜態圖片設計的,但對于圖像傳輸速率要求較低、精度要求也不高的家居遠程監控系統,則完全可用于視頻的壓縮處理。具體的做法是:將圖像作為靜態圖像采集,使用JPEG標準壓縮圖像并傳輸,用戶終端對接收到的每一幀圖像都在界面中進行繪制,通過這樣的連續采集和接收顯示來實現動態效果。
系統選用了Indepedent JPEG Group的libjpeg庫進行圖像數據的壓縮,但是libjpeg庫在本系統的應用中存在一個缺點,即在調用libjpeg庫進行壓縮時,可以直接從緩沖區中取出原始的未壓縮的bmp數據源,但是壓縮之后的數據卻必須以文件形式進行存儲[8];當后續圖像傳輸模塊進行網絡數據傳輸時,又需要讀取該文件,調用libjpeg庫進行JPEG解碼,變成JPEG比特流放入緩沖區后才可以傳送出去。也就是說,libjpeg庫不論是進行壓縮時還是解壓縮時,都需要用到文件操作。在本系統中,這樣的操作會反復進行,對于處理器主頻不夠高、內存空間小,且資源又較為有限的嵌入式系統,需要大量用于文件存儲的開銷,系統資源浪費嚴重[9]。因此,提出了一種圖像從內存到內存的壓縮處理方式,該方式無需使用文件操作,可有效提高系統數據的處理速度。
提出了一種圖像從內存到內存的壓縮處理方式,即調用libjpeg庫進行圖像壓縮時,將圖像采集模塊采集到的bmp數據壓縮為JPEG數據后直接存于內存的緩沖區中,而不再以傳統的文件形式存儲,也就避免了反復進行文件存儲讀取的開銷[10]。為了實現這一處理方式,系統在libjpeg庫的基礎上,提出了一種新的數據結構jpeg_dest_mgr,并編寫了與其相關的處理函數mem_init_dest( )和mem_term_dest( ),
針對本文提出的新的數據結構jpeg_dest_mgr,編寫了2個回調函數來進行相關處理。
(1) 回調函數mem_init_dest用于將自己定義的m_buff地址作為數據壓縮的目標地址。在該函數中,需要將m_buff的大小賦值給libjpeg庫函數init_destination (j_compress_ptr cinfo),用于表示緩沖區大小的free_in_buffer參數,同時,還需要將m_buff的首地址賦值給next_output_byte參數,該參數是libjpeg庫函數中用于指向數據壓縮寫入緩沖區的。
(2) 回調函數mem_term_dest用于計算壓縮后的實際數據長度,為了得到壓縮后的圖像長度,定義了一個pSize變量,該指針為調用者提供,壓縮完后返回圖像長度值[11]。
本系統實現內存到內存壓縮的處理流程如圖2所示。通過以上處理方式,可直接在緩沖區m_buff中對圖像進行編碼處理,得到的結果由傳輸模塊進行封裝。

圖2 內存壓縮處理流程圖
為了將視頻圖像通過網絡上傳至用戶終端,需要對壓縮后的圖像進行傳輸。為了實現實時遠程監控,系統采用了流媒體技術,流媒體技術是通過一種特殊的方式將視頻文件壓縮成多個小數據包,由視頻服務器向用戶終端實時、連續傳輸。智能家居遠程視頻監控系統所使用的流媒體庫為live庫,它是一個開源的基于SIP,RTSP流媒體協議的C++庫,支持JPEG、MPEG視頻的傳輸[12]。
利用live庫完成視頻的傳輸,需要完成以下2方面的工作。
(1) 創建傳輸網絡環境。具體做法為依次創建會話環境,建立RTP套接字、信宿、服務器,建立RTCP控制[13],建立數據源。
(2) 傳輸數據源。具體步驟為首先載入數據源,然后創建RTP包并且向網絡發送RTP包。當一個RTP包傳送結束后,又進行下一個RTP包的創建發送,如此反復循環,直至數據傳輸結束。
視頻傳輸模塊的流程如圖3所示。
對物聯網智能家居遠程視頻監控系統進行了測試和調試,結果滿足設計目標。該系統可以應用于物聯網智能家居系統中,完成對家居情況的實時遠程監控,且該系統具備一定的通用性和可擴展性,還可以應用于其他的物聯網監控系統中,以滿足不同的應用需求,具有廣泛的應用前景。

圖3 視頻數據網絡傳輸流程
References)
[1] 徐品燕.防盜門智能門警裝置:CN200720037826.2[P].2008-04-23.
[2] 孫曠,朱善安.智能監控防盜報警系統[J].電子技術設計與應用,2012,2(2):28-31.
[3] 李穩國,崔憲普.基于物聯網技術的智能家居防盜監控系統[J].湖南城市學院學報(自然科學版),2012(4):74-76.
[4] 胡瑋,孫福明.基于ARM9和ZigBee的嵌入式無線家庭安防系統的設計[J].遼寧工業大學學報(自然科學版),2010,30(5):288-291.
[5] 張艷,王會進.小區智能監控防盜系統的設計與實現[J].計算機工程與應用,2002,11(2):219-220.
[6] Foresti G L. Object recognition and tracking for remote video surveillance[J].IEEE Transactions on Circuits&Systems for Video Technology,1999,9(7):1045-1062.
[7] Joshi K A, Thakore D G. A Survey on Moving Object Detection and Tracking in Video Surveillance System[J].International Journal of Soft Computing & Engineering, 2012,2(3):167-171.
[8] 趙艷玲.基于雙內核的嵌入式VoIP電話網關設計[J].計算機與數字工程,2010,38(7):176-180.
[9] 湯霄峰.基于Internet的嵌入式遠程監控系統的研究與實現[D].長沙:湖南大學,2009.
[10] 高仁才.基于ARM的網絡視頻監控機設計及實現[D].長春:吉林大學,2010.
[11] 梁凡,魏曉暉.視頻壓縮編碼的差錯復原技術[J].中國圖像圖形學報,2000,5(5):374-379.
[12] Lu J. Signal processing for Internet video streaming: a review[J]. Proceedings of SPIE-The International Society for Optical Engineering, 2000, 3974:246-259.
[13] 孫松源,吳建國.基于RTP和Android的視頻傳輸的研究實現方法[J].電腦知識與技術,2012,8(4):903-905,914.