蘆照烜,龍順宇,謝鑫剛,楊偉
(海南熱帶海洋學院,海洋信息工程學院,海南 三亞 572022)
隨著移動通信網(wǎng)絡技術(shù)的不斷發(fā)展,圖像的傳輸速度更快、傳輸質(zhì)量更高。隨之誕生的視頻監(jiān)控系統(tǒng)也廣泛應用于社會的多種場景,例如將視頻監(jiān)控系統(tǒng)應用于建筑施工現(xiàn)場,有利于保證項目施工的質(zhì)量,從而促進建筑工程順利完工[1-2];將其應用于高校管理工作,對維護校園安全有重要作用[3];應用在船舶方面,對于該行業(yè)的健康發(fā)展有重要意義[4]。
在嵌入式Linux 平臺上構(gòu)建視頻采集端,再傳輸?shù)焦W(wǎng)服務器,船舶客戶端及地面客戶端可實時查看船舶各個監(jiān)控結(jié)點視頻圖像,實現(xiàn)船舶“可視化”。該系統(tǒng)對提高船舶管理水平及航行安全有著重要作用。
該船舶視頻監(jiān)控系統(tǒng)由兩部分組成,分別為船舶視頻監(jiān)控主端、視頻監(jiān)控結(jié)點。視頻監(jiān)控結(jié)點由USB攝像頭和嵌入式處理器構(gòu)成。該系統(tǒng)主要是通過MJPG-streamer 流式服務器將接收的不同編碼格式的圖像數(shù)據(jù)重新編碼為mjpg格式,通過整只船舶監(jiān)控網(wǎng)絡再經(jīng)CDMA 網(wǎng)絡傳輸?shù)綇V域網(wǎng),船舶視頻監(jiān)控客戶端以及地面客戶端實時顯示船舶各個視頻監(jiān)控點的圖像[5]。船舶監(jiān)控系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 船舶視頻監(jiān)控系統(tǒng)結(jié)構(gòu)圖
視頻監(jiān)控結(jié)點硬件結(jié)構(gòu)由USB 攝像頭,嵌入式處理平臺,以太網(wǎng)收發(fā)器AR8053 組成。嵌入式處理平臺由STM32MP157 芯片,eMMC,Nand-Flash,DDR3L等組成。
STM32MP157 微處理器基于靈活的雙Arm?Cortex?-A7內(nèi)核(工作頻率800 MHz)和Cortex?-M4內(nèi)核(工作頻率209 MHz)架構(gòu),支持Linux 嵌入式開發(fā)平臺[6]。片外程序存儲器使用eMMC 芯片,其內(nèi)部集成的Flash Controller,屏蔽了NAND Flash 的物理特性,可以減少主控端軟件的復雜度,并且使用緩存、存儲隊列等技術(shù)優(yōu)化了讀寫性能[7]。
視頻圖像采集使用遵循UVC 類標準的USB 攝像頭。使用USB2514芯片擴展USB口,方便結(jié)點擴展監(jiān)控范圍。使用以太網(wǎng)收發(fā)器AR8035 以及主控以太網(wǎng)外設(shè),使視頻采集結(jié)點接入船舶局域網(wǎng)。
構(gòu)建線程函數(shù)video_client 向MJPG-streamer流式服務器發(fā)送請求圖像數(shù)據(jù)命令。服務器接收到video_client的數(shù)據(jù)請求,驅(qū)動USB 攝像頭采集視頻圖像數(shù)據(jù),解析請求并以UDP 協(xié)議發(fā)送MJPG 視頻流到video_client,再由其轉(zhuǎn)發(fā)到阿里云服務器,服務器接收Qt 客戶端請求,發(fā)送對應攝像頭視頻數(shù)據(jù)到船舶客戶端及地面客戶端,實現(xiàn)廣域網(wǎng)的視頻監(jiān)控。軟件框架如圖2所示。
圖2 系統(tǒng)軟件框架圖
將MJPG-streamer的input-pulgins設(shè)置為input_uvc.so后,MJPG-streamer內(nèi)部初始化攝像頭,并創(chuàng)建cam_thread線程將圖像流化后復制到全局緩沖區(qū)global_buffer 中,同時創(chuàng)建server_thread 線程,該線程等待攝像頭客戶端的連接,與攝像頭客戶端連接成功后創(chuàng)建client_thread 線程不斷提取global_buffer 中的視頻數(shù)據(jù)并將其發(fā)送到攝像頭客戶端。
攝像頭客戶端將攝像頭身份信息以及動作命令以json格式發(fā)送給服務器,收到服務器應答后,攝像頭客戶端通過具有可靠傳輸特性的TCP 協(xié)議向MJPGstreamer 發(fā)送數(shù)據(jù)請求,接收到服務器回應后,創(chuàng)建UDP socket 向服務器傳輸視頻數(shù)據(jù)。MJPG-streamer和攝像頭客戶端交互流程如圖3所示。
圖3 MJPG和攝像頭客戶端交互圖
發(fā)送攝像頭信息及動作命令到服務器,使用cjson庫實現(xiàn):
接收到服務器回應后,啟動video_send_data 線程開始向服務器傳輸數(shù)據(jù)。向服務器傳輸視頻之前,需要連接MJPG 并向其請求視頻數(shù)據(jù),向MJPG 請求視頻圖像命令實現(xiàn):
請求數(shù)據(jù)成功后,客戶端接收MJPG 通過UDP 套接字發(fā)送的視頻圖像數(shù)據(jù)之后轉(zhuǎn)發(fā)到服務器。
服務器接收并讀取攝像頭傳輸?shù)囊曨l數(shù)據(jù),開辟內(nèi)存保存相應數(shù)據(jù)。待App端的通過TCP協(xié)議以json格式發(fā)送視頻數(shù)據(jù)請求后,解析請求并創(chuàng)建UDP socket 返回端口信息,App 收到端口信息并對服務器響應后,服務器傳輸視頻圖像數(shù)據(jù)。服務器工作時,存儲視頻圖像空間為共享內(nèi)存,對共享內(nèi)存資源加互斥鎖[8]。
服務器端接收視頻圖像并保存相應數(shù)據(jù)實現(xiàn):
服務器端對應App端工作流程如圖4所示。
圖4 服務器端對應App端工作流程圖
多App 端和多視頻采集設(shè)備時,App 端在和Server_thread建立連接之后,Server_thread通過Client_Handler函數(shù)判斷攝像頭的工作狀態(tài),若正常工作則將攝像頭id以及UDP socket信息登記鏈表,創(chuàng)建新的客戶端線程發(fā)送端口信息及傳輸視頻信息給對應App。否則繼續(xù)判斷Server_thread 是否和App 建立連接。
Qt是跨平臺C++圖形用戶界面應用程序開發(fā)框架,有豐富的API。船舶客戶端及地面客戶端軟件采用Qt設(shè)計,App 進入船舶局域網(wǎng),與服務器端建立TCP連接,發(fā)送獲取視頻數(shù)據(jù)的請求,以Json格式實現(xiàn):
App 響應服務器,服務器接收信息返回視頻圖像數(shù)據(jù),App接收視頻圖形并顯示的實現(xiàn):
分別在左舷、艦橋、左首舷、上甲板外安裝視頻監(jiān)控結(jié)點,做到視頻采集結(jié)點安裝內(nèi)外結(jié)合。視頻監(jiān)視效果如圖5 所示。第一個監(jiān)控結(jié)點安裝在左舷,可在航行時更好地了解周圍航行環(huán)境,不僅減小碰撞發(fā)生機率,也可減少瞭望員的配置。第二個安裝在艦橋,可監(jiān)督船員工作情況,便于船舶人員管理。第三個安裝在左首舷,是出入船只的必經(jīng)之路,用于監(jiān)控船舶的人員流動。第四個安裝在上甲板,監(jiān)控船舶甲板區(qū)域,監(jiān)控船舶的主要活動區(qū)域。
圖5 監(jiān)控顯示圖
本文設(shè)計的船舶視頻監(jiān)控系統(tǒng),實現(xiàn)了多結(jié)點船舶監(jiān)控視頻的流暢傳輸,其局限性在于CDMA 網(wǎng)絡只適合沿海岸運輸?shù)拇?。船舶環(huán)境復雜,需要考慮專門的防護措施,降低視頻采集結(jié)點發(fā)生故障機率。視頻采集結(jié)點的安裝要科學合理,讓其發(fā)揮更大的作用。融入圖像處理及圖像識別技術(shù),識別特定物體,可進一步減小船舶碰撞事故發(fā)生,促進船舶視頻監(jiān)控系統(tǒng)的健康可持續(xù)發(fā)展,對船舶管理水平的提高以及船舶航行安全具有一定的積極作用。