陳歡 柯春艷



關鍵詞:RTMP;樹莓派;C/S架構;流媒體服務
中圖分類號:TP368 文獻標識碼:A
文章編號:1009-3044(2023)03-0012-04
1 引言
自2019年末開始,做好疫情防控工作已經在人們的生活中缺一不可了。為了更好地進行疫情防控工作,可以對人流量進出多的地方進行實時監控和消殺作業。因此能做一個監控和消殺兩者結合的智能設計,不僅能實時監控人們佩戴口罩的情況,還能對疫情防控區域進行消殺作業。節省人力的同時,在疫情防控方面的效果也能達到最優化。
隨著網絡的快速發展,流媒體服務也快速崛起,可以通過客戶端例如手機或者PC電腦隨時點播服務器端的大量媒體資源,為生活帶來了極大的便捷。將流媒體服務[1]和可移動式小車結合在一起組成的智能防疫輔助的設計,不僅在疫情監控方面能達到良好的效果,在疫情防控區域所在的環境下也具有很大的優勢。樹莓派嵌入式開發板能將兩者良好地結合起來[2],它能完成復雜的任務與調度,支持更上層的應用和開發,可以用作數據采集、小型控制、物聯網網關和邊緣計算機應用等方面,在物聯網應用研究上價值深遠。
2 總體方案設計
為了實現對疫情防控區域內人流的口罩監控和自動巡邏消殺的功能,利用樹莓派4代B型搭建了一個簡易的系統。系統主要由視頻處理前端、FFmpeg+nginx+RTMP流媒體搭建[2]、云服務器、用戶、語音播報和巡邏消殺幾部分組成,系統架構圖如圖1所示。樹莓派將攝像頭采集到的視頻內容進行圖像識別處理,采用FFmpeg流媒體音視頻處理方法對視頻進行編碼封裝。為了讓用戶能夠觀測到所監控疫情防控區域的實時畫面采用了C/S架構,關于流媒體的傳輸協議本設計使用的是RTMP協議,將識別處理后的視頻推送至RTMP云服務器上,用戶可以通過登錄客戶端來訪問云服務器的地址查看所監控疫情防控區域的視頻,同時樹莓派本地對檢測到沒有佩戴口罩的情況進行語音播報提示。在實現了監控功能后,小車也可以切換至地面消殺作業模式,通過利用超聲波在較為平坦的地面上進行智能避障完成自動巡邏,同時對該地域噴灑消毒液完成消毒工作。
3 硬件設計
本設計硬件主要包括樹莓派4代B型嵌入式開發板、視頻圖像采集模塊和自動避障、消殺模塊三部分組成。樹莓派4代B型開發板是整個系統的核心模塊,一方面需要對采集到的視頻進行圖像識別處理完成口罩檢測的功能;另一方面需要搭建支持流媒體的服務器對處理后的視頻流進行編碼推送。視頻采集模塊則是攝像頭通過USB接口和樹莓派4代B型開發板直接相連,從而完成視頻圖像采集。自動避障和消殺模塊是利用超聲波傳感器和水泵搭配樹莓派4代B型開發板的GPIO口進行工作。硬件結構框圖如圖2所示。
3.1 核心控制模塊
樹莓派是一款小型嵌入式開發板,因其能搭載基于Linux的樹莓派Debian系統,也被稱為微型電腦,擴展性強,開放性好。本設計采用的是樹莓派4代B型開發板,它具有多個USB接口多個以太網接口,還具備HDMI高清視頻輸出接口可以直接連接屏幕進入到操作系統界面,具備所有PC機的基本功能,功能強大。相較于樹莓派3代B+型開發板,它擁有更好的CPU構建,采用的是BCM2711型號,包含了性能更好的核散熱器,時鐘頻率更精準的同時能更準確地監控芯片的溫度,同時它的寬帶吞吐量也是樹莓派3代B+的五倍,最大可接近千兆。硬件整體各種性能完善,核心運行速度快,優點非常明顯。
3.2 視頻采集模塊
在本設計中視頻圖像采集模塊直接用的USB免驅動直插式攝像頭,能夠進行AD智能自動對焦,畫面清晰穩定,同時對人臉的捕捉更為精準。內置8米全指向吸音降噪麥克風,擁有720萬像素和超大廣角,能夠上下120度旋轉鏡頭,不僅能呈現出高清畫質,還能很容易在疫情防控區域里找到適合的監控角度。這款攝像頭性價比很高,和樹莓派的Raspbian嵌入式系統兼容性強,對于輸出的畫面也很流暢清晰。
3.3 避障消殺模塊
對于小車的智能避障模塊本設計采用了HCSR04超聲波傳感器來測量距離[3],用其來控制電機。它能感測到的距離范圍為2cm-4m,它能測量的最大精度為3mm,對于本設計來說已經綽綽有余。超聲波傳感器是由超聲波發射器、超聲波接收器和控制電路三部分組成,支持電壓是5V,電流能達到15mA,是一個集成度良好的傳感器模塊,體積小價格便宜,在市場上以及很多測距項目中經常見其身影。對于消殺模塊本設計采用的是微型水泵搭配繼電器一塊兒來使用,水泵的工作電壓范圍在3.5~12V,為了讓水泵正常工作就加了一個繼電器和6V的外接電源單獨給其供電,另外再添加一個噴頭,就能達到很好的噴水效果。這種小型水泵不僅可以用作噴灑消毒水應用在醫療輔助領域,而且在智能農業灌溉系統上也是很常見的。
超聲波模塊的TRIG口和ECHO口分別連接的是樹莓派23號和24號GPIO引腳口,繼電器的信號觸發端連接樹莓派22號GPIO引腳口,繼電器的VCC 和GND則分別連接樹莓派的5V和GND GPIO引腳口。而水泵的正極連接到繼電器的常開端,負極連接到電源負極,繼電器的公共端則連接到電源正極。主要的電路連接示意圖如圖3所示。
4 軟件設計
為了實現口罩檢測以及視頻監控的功能,軟件設計是它們的核心。這里包括了如何對采集到的視頻圖像進行檢測處理,即如何選擇人臉識別的核心網絡模型能達到最好的效果,能讓口罩檢測的準確率能保證的同時讓視頻流每秒傳送的幀的數量達到能傳輸的級別。在此之外,還有流媒體服務器的搭建,能讓樹莓派和云服務器之間建立聯系,從而完成視頻圖像的采集和傳輸。同時,對于小車的軟件控制主要是對直流電機進行PWM輸入來控制它的運動,同時需要搭配超聲波傳感器模塊來對其巡邏路線做一個固定。在此基礎上,還會加一個定時噴灑消毒水的程序,主要是對繼電器的輸入信號引腳進行高低電平的控制,邏輯也比較簡單。本設計采用的核心控制器是基于ARM Cortex-A72,樹莓派的官網上能下載到基于樹莓派的Linux系統,安裝簡單,操作易懂,與用戶的交互性比其他的Linux系統要強很多,優點很多,此處不再過多贅述。
4.1 口罩檢測
口罩檢測主要分為兩部分來執行,一是通過選擇適合的人臉檢測的深度學習網絡模型對攝像頭采集到的人臉圖像進行人臉檢測處理,判斷其是否是一張人臉;二是通過對檢測后的人臉進行覆蓋面積運算來確認其是否戴了口罩。二者均能實時將相應的檢測結果顯示在屏幕上,能讓用戶實時觀測到檢測結果。對于選擇人臉識別的深度學習網絡模型也做了很多的測試,最開始使用的是深度神經網絡DNN 模型,它是一個典型的感知機模型,擁有多個輸入但只有一個輸出的網絡模型,只能用于二元分類,非常符合本設計的要求,判斷的結果只有是人臉和非人臉兩種。但是由于它的網絡算法過于復雜,導致圖像檢測起來處理速度特別慢,從而影響我們的傳輸效果,傳輸幀率特別低。因而又選擇了Harr算法[4]來處理采集到的視頻圖像,它主要是對邊緣特征、對角線特征、中心特征和線性特征,多個特征聯合進行圖像檢測處理的。它在CPU上幾乎是實時工作的,處理速度很快,能達到傳輸幀率的要求,但其可調整性很弱,但在本設計中能滿足運行要求。除此之外,還嘗試過Lbp算法來對圖像進行處理,雖然處理運行速度非常快,但對光線和方向信息要求非常高,所以它在處理效果上也并不理想,所以就舍棄了,最終我們在本設計還是選擇了Harr算法來進行人臉檢測。DNN、Harr、Lbp算法測試對比結果如圖4人臉檢測模型分析所示。在此說明以上網絡模型皆是采用已訓練好的網絡模型來對采集到的人臉圖像進行檢測的。
4.2 流媒體服務器監控
流媒體的意思是將連續的音頻媒體數據經壓縮處理后,通過網絡進行分段式發送媒體數據,在網絡上實時傳輸音視頻以供客戶查看的一種技術和過程,經過了這樣處理后的音視頻數據包以流的形式進行發送。相較于傳統的查看媒體的方式,它不需要把整條音視頻下載完畢后才能觀看,非常具有實時性,方便快捷。在如今網絡快速發展的大環境下,流媒體可以運用到很多場景中,例如醫療、軍事、安全和娛樂等方面,現如今大熱的直播行業就是個很典型的例子。本設計采用FFmpeg視頻服務器,將USB攝像頭采集到的視頻圖像轉為視頻流,同時采用RTMP協議[5]將獲取到并處理后的視頻流發送出去。為了不讓視頻流的傳輸查看拘于同一局域網之內,我們在此基礎上添加了云服務器和nginx反向代理web服務器來作為中間橋梁,讓服務器也參與流媒體的搭建之中,從而讓我們任何一個網段都可以通過登錄客戶端來訪問服務器地址查看監控視頻。
在樹莓派4代B型開發板上支持搭建流媒體服務的協議獲取USB攝像頭采集的圖像,并以流的形式將捕獲的圖像進行口罩檢測處理,然后推送至云服務器,整體搭建使用過程如下:
(1) 在樹莓派上的Respbian pi系統終端上安裝所需要的依賴sudo apt-get install build-essential libp?cre3 libpcre3-dev libssl-dev。
(2) 分別下載nginx和rtmp到樹莓派的某一路徑下,并將兩個包都解壓到同一個目錄里;
(3) 進入安裝nginx 目錄下,添加with-http_ssl_module 模塊,并進行編譯,分別依次執行以下三個命令:
①/configure --with-http_ssl_module --addmodule=../nginx-rtmp-module-master
②make
③sudo make install
(4) 執行sudo nano /usr/local/nginx/conf/nginx.conf修改nginx配置的文件,包括端口號,傳輸格式和方式等。
(5) 啟動nginx和rtmp的流媒體服務器,執行以下命令:
sudo /usr/local/nginx/sbin/nginx
(6) 安裝FFmpeg,執行以下命令:
sudo apt install ffmpeg
(7) 進行視頻流推流,然后再啟動nginx+ffmpeg視頻流服務器,推流視頻的格式為flv,利用程序將視頻流傳輸至云服務器,分別依次執行以下命令:
①sudo /usr/local/nginx/sbin/nginx
②ffmpeg -ss -i /dev/video0 -f flvrtmp://樹莓派IP地址/live/livestream
(8) 客戶端在PC電腦上安裝VLC視頻播放軟件,進入軟件后順次點擊“媒體”和“打開網絡串流”,網絡URL輸入:rtmp://云服務器IP地址/live/a接收相應的視頻流。
啟用流媒體服務器在此用到了兩個很重要的組件,分別是nginx和FFmpeg。nginx是一個性能比較高的HTTP和反向代理web服務器,而FFmpeg是一個非常好的音視頻獲取方案,再加上RTMP協議,它們三能組合搭建一個功能比較完備的支持流媒體的服務器。具體的流媒體傳輸流程圖如圖5所示。
4.3 小車控制和定時消殺
本設計采用了L298N驅動來驅動電機,L298N的輸入用PWM脈寬調制來調整電機運轉的速度,通過對速度和時間的測試結果來固定小車巡邏的路線。至于小車避障功能,我們首先需要分別獲取到發出超聲波和接收到超聲波時的時間,再對其進行時間差計算,通過公式計算從而獲取距離,最后通過在代碼里設置距離閾值來完成超聲波避障功能。超聲波測距公式如公式(1) 所示。而本設計的消殺功能只需要控制繼電器的控制引腳輸入端的電平,高電平則水泵運作,低電平時水泵停止運作。
小車控制部分最重要的是PWM脈寬調制的工作原理。它主要是通過調整高電平的占空比大小來控制輸入,我們通過這個原理便能控制電機的轉速,高電平占空比給的低時轉速就慢,反之,給的高時轉速就快,因而本設計通過控制PWM也就能讓小車進行左轉和右轉,再搭配上時間給的持續時長的控制就能固定小車的巡邏路線了。
5 測試與結論
5.1 功能測試
整體設計完成之后,需要分為兩個部分來進行測試。
(1) 首先是口罩檢測模式時,我們在給設計上電后進入測試,在給樹莓派連上網絡后,執行相應的程序,整個模塊便開始運行。首先是樹莓派本地在開啟視頻流服務器后進行實時圖像的采集、處理和傳輸,樹莓派本地測試結果如圖6所示。客戶端電腦VLC軟件網絡流媒體輸入rtmp://180.76.xxxxx/live/a,客戶端測試結果如圖7所示。其中180.76.xxxxx是云服務器的地址,live表示實時視頻流。
(2) 巡邏消殺模式時,將視頻采集用到的攝像頭從樹莓派上拔掉,給小車整體上電,執行程序,小車開始運行。消毒水噴灑測試結果如圖8所示。
5.2 結論
防疫輔助機器人,通過人臉檢測技術、實時監控技術和嵌入式開發的應用,實現了機器人巡邏執行消殺作業以及實時監控場所人們是否佩戴口罩的功能。此外,任何一個客戶端都可以通過訪問服務器地址來調取場所實時監控畫面,查看當前場所人們佩戴口罩的情況。關于外形設計和價格方面,體積也很小巧方便,成本低廉,集成度高,充分展現了物聯網技術的靈活性和多功能性。產品不僅可以應用于醫院,還可以應用于學校、商場等人流量密集,需要每天進行場所消殺的地方,充分體現了本設計的靈活性和適用性。