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