楊皓程,杜芊芊,唐秀昌,胡琦瑤
(1.西北大學 信息科學與技術學院,陜西 西安 710127;2.西北大學 數(shù)學學院,陜西 西安 710127)
我國幅員遼闊,公路運輸業(yè)已成為我國國民經(jīng)濟賴以生存和發(fā)展的命脈。2014—2018年間,我國公路貨運總量增長了近30%;2017年,我國物流業(yè)社會物流總額達到252.8萬億元,貨運量達到479億噸,快遞業(yè)務量突破400億件。貨車司機在運輸途中經(jīng)常在安保措施較為薄弱的高速公路、國道服務區(qū)和偏僻的公路停車場停車休息。不法分子借機對貨車油箱進行盜竊,3 min就可偷走200 L柴油,造成巨大的經(jīng)濟損失。本文設計了一種基于Arduino的貨車油箱防盜系統(tǒng),可以為長期奔波在外的貨車司機提供財產(chǎn)安全保障。
本文設計的油箱防盜系統(tǒng)下位機基于Arduino嵌入式開發(fā)板,使用搭載安可信高清攝像機模塊的ESP32-CAM開發(fā)板作為視頻采集模塊,用諧振式水深傳感器模擬貨車油表。上位機則由服務端和客戶端組成。服務端用于接收下位機上傳的圖片信息并判斷周圍環(huán)境是否存在危險,同時為客戶端傳輸攝像頭所發(fā)送的圖像。貨車司機可以在服務端判定當前環(huán)境存在危險時收到提醒,同時也可以控制攝像頭轉(zhuǎn)向查看貨車周圍環(huán)境并使用聲光報警系統(tǒng)對不法分子進行驅(qū)趕。系統(tǒng)整體架構如圖1所示。

圖1 系統(tǒng)整體架構
ESP32-CAM模塊被安裝在油箱頂部的舵機上,通過通用異步收發(fā)器與Arduino進行通信。同時,液位傳感器所收集到的油量信息也通過串口傳輸至Arduino開發(fā)板,經(jīng)換算處理后與實時環(huán)境圖像信息一同傳遞至上位機服務器。
當位于下位機的HC-SR501人體紅外傳感器探測到周圍環(huán)境有人通過時,攝像頭開始向服務器的識別程序定時發(fā)送環(huán)境圖片。當程序無法完全準確判斷時,可以控制舵機旋轉(zhuǎn)以獲得多個角度的環(huán)境圖像進行綜合判斷。一旦發(fā)現(xiàn)可疑人員和可疑物品,則向客戶端發(fā)送警告,并同時發(fā)出聲光報警進行驅(qū)趕操作。當車輛油量異常下降時,也會通過服務端向用戶報告情況,做到提前判斷和事后判斷相結合,有效減少司機損失,大大提高運輸安全性。
本方案采用基于ATMEGA 2560芯片的Arduino微控制器,其擁有多達54路的數(shù)字輸入輸出,符合需大量I/O接口的設計需求,且后期的功能擴展性也尤為突出。其中16路可作為PWM輸出,另有16 路模擬輸入,4 路UART接口,1個16 MHz晶體振蕩器,并可兼容ArduinoUNO設計的擴展板。完全可以滿足本方案需求。
由于Arduino只有8 KB的SRAM,無法滿足圖片存儲、發(fā)送的需求,故采用帶有4MPSRAM的ESP32-CAM開發(fā)板作為WiFi和高清攝像頭模塊。ESP32開發(fā)板模塊采用體積小的803.11b/g/n WiFi+BT/BLE Soc模塊,其低功耗雙核CPU主頻可達240 MHz,可滿足高清視頻傳輸需求。
本文將使用上述兩模塊完成以下功能:
(1)使用OV2640攝像頭模塊進行高清圖像采集。
(2)使用UART接收來自諧振式液位傳感器的油量信息。
(3)使用ESP32自帶的WiFi模塊通過TCP-IP協(xié)議向上位機服務器傳輸實時圖像,方便進一步處理。
(4)使用PWM輸出控制舵機使攝像頭可以進行多角度采集。
(5)使用GPIO控制聲光報警系統(tǒng)。
本文使用HTTP協(xié)議與上位機服務器進行通信。首先,OV2640模塊和液位傳感器采集到的信息將存儲在PSRAM中。然后,使用wifi.begin()函數(shù)啟動ESP32的網(wǎng)絡服務功能;循環(huán)使用server.handleClient()函數(shù)檢查上位機是否發(fā)送HTTP請求。如果收到請求,則將圖片和液位信息以字符串的形式發(fā)送。
服務器使用Python語言中的request庫進行數(shù)據(jù)收發(fā),定時向ESP32模塊所在的IP地址發(fā)送請求以得到數(shù)據(jù)。
為測量卡車油箱中液位情況,本文使用諧振式水位傳感器(如圖2所示),用水壓氣管的空氣壓力大小判斷水位高低。通過引入嘴進入傳感器氣室,氣室上面是封閉的,與水位成正比的氣壓被傳到隔膜上;導板嵌裝在隔膜上,當水位上升時,氣壓增大,導板向上移動,當水位下降時,氣壓降低,導板向下移動。導板移動會導致傳感器中電感線圈磁通量增大。根據(jù)式(1)所示的電容電感并聯(lián)諧振頻率公式,并經(jīng)單片機處理后判定水位高低。


圖2 諧振式水位傳感器
為了識別停車環(huán)境下的可疑人員和可疑物品,本文采用基于YOLO算法的深度學習框架進行目標識別。與R-CNN、Fast R-CNN等將檢測內(nèi)容分為物體類別(分類)、物體位置(回歸)的網(wǎng)絡相比,YOLO將物體檢測作為回歸問題求解,訓練和檢測都在同一個網(wǎng)絡中運行,故得到了百倍于其他神經(jīng)網(wǎng)絡的識別速度。直接從圖片像素出發(fā),得到分類和概率。YOLO的算法流程如圖3所示,其特征提取主要步驟如下:

圖3 YOLO算法流程
(1)將輸入圖像劃分為×個均等大小的格子,每個格子負責檢測此格子中存在的物體。
(2)假如被測物體中心恰好落在格子中,方格將預測并提取目標特征。每一個方格會預測出個包含物體的矩形區(qū)域(Bounding box)信息和個物體屬于某類別的置信度(準確率)。Bounding box信息包含物體邊界框的中心坐標(,)、邊界框高度與寬度(,)和置信度。代表預測邊界框和標簽邊界框的IOU(Intersection Over Union)與目標存在概率的乘積。

YOLO算法是將目標檢測看成回歸問題,所以它采用的是均方差損失函數(shù),最簡單的為平方差損失函數(shù),即(預測坐標-實際坐標)+(預測概率-實際概率)。損失函數(shù)如下:

Loss由坐標誤差、IOU誤差、分類誤差組成,表達式分別為:


相對于基于region proposal的Fast R-CNN等傳統(tǒng)物體識別算法,YOLO將物體檢測作為回歸問題進行求解,在保證準確率的情況下獲得了較高的檢測速度。同時,由于YOLO在推理和訓練的過程中可以一次性得到整張圖的信息,YOLO的背景誤檢率低;而基于region proposal的諸多檢測算法均采用“滑動檢測”,即一次只能得到候選框中部分信息,容易將背景(非物體)誤檢為物體。貨車停車環(huán)境復雜,使用YOLO可以大大降低誤檢率。
本文采用Keras框架訓練出可以檢測人和部分偷油工具的YOLOv3模型。
本文以偷油常見工具PVC軟管、面包車和人作為樣本進行訓練。通過request庫爬取相關圖片并進行篩選。收集輸油管、車、人的圖片共672張。
由于原始數(shù)據(jù)較少,為提高訓練效果,需要對原始數(shù)據(jù)進行預處理。首先,將圖片統(tǒng)一裁剪;之后,對圖片分別進行剪裁、旋轉(zhuǎn);最后,標記圖片中待檢對象,轉(zhuǎn)換為VOC2007格式并進行歸一化處理。
將darknet版本的YOLO model進行適當?shù)男薷暮螅ń档蚮ilter層以適應更少種類的檢測)轉(zhuǎn)換為Keras model;然后,導入預處理完成的圖片,隨機劃分訓練集、測試集、驗證集,使用GPU進行訓練,根據(jù)數(shù)據(jù)情況將訓練次數(shù)設為1 000次。如圖4所示,經(jīng)過訓練,Loss穩(wěn)定在20左右,模型收斂,基本滿足使用要求。圖5和圖6是對輸油管、面包車和人的識別結果。

圖4 訓練次數(shù)與損失的關系

圖5 輸油管識別結果

圖6 面包車和人的識別結果
當系統(tǒng)開機布防后,將使用digitalRead()函數(shù)獲取人體紅外傳感器返回的信號;也會通過Serial1.read()函數(shù)實時讀取油箱液位數(shù)據(jù)。當判斷有人經(jīng)過時,啟動ESP32-CAM攝像機模塊對周圍環(huán)境進行取景;同時使用analogWrite()函數(shù)輸出PWM方波控制舵機轉(zhuǎn)動,將四周的環(huán)境圖像通過TCP協(xié)議傳輸至服務器。當收到服務器判斷環(huán)境危險或油箱液位在短時間內(nèi)快速下降的信息后,啟動聲光報警系統(tǒng)。
本文使用HTML5+JavaScript開發(fā)WebAPP,并通過Android SDK中的WebView組件將HTML打包為APP。APP通過TCP協(xié)議與服務器進行通信,實現(xiàn)過程分為4個步驟:建立Socket 對象,通過IP與端口連接;創(chuàng)建接收與發(fā)送的資源配置;建立監(jiān)聽循環(huán)機制;跳出循環(huán)關閉連接。
APP實現(xiàn)的具體功能如下:
(1)可以實時查看貨車油箱周圍環(huán)境圖像、剩余油量。
(2)當服務器端檢測到貨車周圍環(huán)境存在危險時,及時向用戶推送通知并回傳環(huán)境圖像。
圖7和圖8為軟件程序在不同環(huán)境下的運行狀態(tài)展示。

圖7 環(huán)境安全時程序運行狀態(tài)

圖8 環(huán)境危險時程序運行狀態(tài)
本文設計了一種基于Arduino的貨車油箱防盜系統(tǒng),其上位機由服務器和手機APP組成,下位機由Arduino及配套的ESP32-CAM模塊、諧振式水位傳感器模塊、聲光報警模塊、紅外傳感模塊組成。通過OV2640攝像頭采集圖像數(shù)據(jù)、諧振式水位傳感器采集油量信息并通過ESP32上傳至服務器進行識別,判斷周圍環(huán)境是否安全,并在發(fā)現(xiàn)可疑人員和物品或油箱油量短時間內(nèi)大量減少時啟用聲光報警系統(tǒng)并通知車主。與市面上同類產(chǎn)品相比,具有智能化程度高、可以提前預測等優(yōu)點,較大程度上避免損失,擁有廣闊的市場前景。