楊皓程,杜芊芊,唐秀昌,胡琦瑤
(1.西北大學(xué) 信息科學(xué)與技術(shù)學(xué)院,陜西 西安 710127;2.西北大學(xué) 數(shù)學(xué)學(xué)院,陜西 西安 710127)
我國幅員遼闊,公路運(yùn)輸業(yè)已成為我國國民經(jīng)濟(jì)賴以生存和發(fā)展的命脈。2014—2018年間,我國公路貨運(yùn)總量增長(zhǎng)了近30%;2017年,我國物流業(yè)社會(huì)物流總額達(dá)到252.8萬億元,貨運(yùn)量達(dá)到479億噸,快遞業(yè)務(wù)量突破400億件。貨車司機(jī)在運(yùn)輸途中經(jīng)常在安保措施較為薄弱的高速公路、國道服務(wù)區(qū)和偏僻的公路停車場(chǎng)停車休息。不法分子借機(jī)對(duì)貨車油箱進(jìn)行盜竊,3 min就可偷走200 L柴油,造成巨大的經(jīng)濟(jì)損失。本文設(shè)計(jì)了一種基于Arduino的貨車油箱防盜系統(tǒng),可以為長(zhǎng)期奔波在外的貨車司機(jī)提供財(cái)產(chǎn)安全保障。
本文設(shè)計(jì)的油箱防盜系統(tǒng)下位機(jī)基于Arduino嵌入式開發(fā)板,使用搭載安可信高清攝像機(jī)模塊的ESP32-CAM開發(fā)板作為視頻采集模塊,用諧振式水深傳感器模擬貨車油表。上位機(jī)則由服務(wù)端和客戶端組成。服務(wù)端用于接收下位機(jī)上傳的圖片信息并判斷周圍環(huán)境是否存在危險(xiǎn),同時(shí)為客戶端傳輸攝像頭所發(fā)送的圖像。貨車司機(jī)可以在服務(wù)端判定當(dāng)前環(huán)境存在危險(xiǎn)時(shí)收到提醒,同時(shí)也可以控制攝像頭轉(zhuǎn)向查看貨車周圍環(huán)境并使用聲光報(bào)警系統(tǒng)對(duì)不法分子進(jìn)行驅(qū)趕。系統(tǒng)整體架構(gòu)如圖1所示。
圖1 系統(tǒng)整體架構(gòu)
ESP32-CAM模塊被安裝在油箱頂部的舵機(jī)上,通過通用異步收發(fā)器與Arduino進(jìn)行通信。同時(shí),液位傳感器所收集到的油量信息也通過串口傳輸至Arduino開發(fā)板,經(jīng)換算處理后與實(shí)時(shí)環(huán)境圖像信息一同傳遞至上位機(jī)服務(wù)器。
當(dāng)位于下位機(jī)的HC-SR501人體紅外傳感器探測(cè)到周圍環(huán)境有人通過時(shí),攝像頭開始向服務(wù)器的識(shí)別程序定時(shí)發(fā)送環(huán)境圖片。當(dāng)程序無法完全準(zhǔn)確判斷時(shí),可以控制舵機(jī)旋轉(zhuǎn)以獲得多個(gè)角度的環(huán)境圖像進(jìn)行綜合判斷。一旦發(fā)現(xiàn)可疑人員和可疑物品,則向客戶端發(fā)送警告,并同時(shí)發(fā)出聲光報(bào)警進(jìn)行驅(qū)趕操作。當(dāng)車輛油量異常下降時(shí),也會(huì)通過服務(wù)端向用戶報(bào)告情況,做到提前判斷和事后判斷相結(jié)合,有效減少司機(jī)損失,大大提高運(yùn)輸安全性。
本方案采用基于ATMEGA 2560芯片的Arduino微控制器,其擁有多達(dá)54路的數(shù)字輸入輸出,符合需大量I/O接口的設(shè)計(jì)需求,且后期的功能擴(kuò)展性也尤為突出。其中16路可作為PWM輸出,另有16 路模擬輸入,4 路UART接口,1個(gè)16 MHz晶體振蕩器,并可兼容ArduinoUNO設(shè)計(jì)的擴(kuò)展板。完全可以滿足本方案需求。
由于Arduino只有8 KB的SRAM,無法滿足圖片存儲(chǔ)、發(fā)送的需求,故采用帶有4MPSRAM的ESP32-CAM開發(fā)板作為WiFi和高清攝像頭模塊。ESP32開發(fā)板模塊采用體積小的803.11b/g/n WiFi+BT/BLE Soc模塊,其低功耗雙核CPU主頻可達(dá)240 MHz,可滿足高清視頻傳輸需求。
本文將使用上述兩模塊完成以下功能:
(1)使用OV2640攝像頭模塊進(jìn)行高清圖像采集。
(2)使用UART接收來自諧振式液位傳感器的油量信息。
(3)使用ESP32自帶的WiFi模塊通過TCP-IP協(xié)議向上位機(jī)服務(wù)器傳輸實(shí)時(shí)圖像,方便進(jìn)一步處理。
(4)使用PWM輸出控制舵機(jī)使攝像頭可以進(jìn)行多角度采集。
(5)使用GPIO控制聲光報(bào)警系統(tǒng)。
本文使用HTTP協(xié)議與上位機(jī)服務(wù)器進(jìn)行通信。首先,OV2640模塊和液位傳感器采集到的信息將存儲(chǔ)在PSRAM中。然后,使用wifi.begin()函數(shù)啟動(dòng)ESP32的網(wǎng)絡(luò)服務(wù)功能;循環(huán)使用server.handleClient()函數(shù)檢查上位機(jī)是否發(fā)送HTTP請(qǐng)求。如果收到請(qǐng)求,則將圖片和液位信息以字符串的形式發(fā)送。
服務(wù)器使用Python語言中的request庫進(jìn)行數(shù)據(jù)收發(fā),定時(shí)向ESP32模塊所在的IP地址發(fā)送請(qǐng)求以得到數(shù)據(jù)。
為測(cè)量卡車油箱中液位情況,本文使用諧振式水位傳感器(如圖2所示),用水壓氣管的空氣壓力大小判斷水位高低。通過引入嘴進(jìn)入傳感器氣室,氣室上面是封閉的,與水位成正比的氣壓被傳到隔膜上;導(dǎo)板嵌裝在隔膜上,當(dāng)水位上升時(shí),氣壓增大,導(dǎo)板向上移動(dòng),當(dāng)水位下降時(shí),氣壓降低,導(dǎo)板向下移動(dòng)。導(dǎo)板移動(dòng)會(huì)導(dǎo)致傳感器中電感線圈磁通量增大。根據(jù)式(1)所示的電容電感并聯(lián)諧振頻率公式,并經(jīng)單片機(jī)處理后判定水位高低。
圖2 諧振式水位傳感器
為了識(shí)別停車環(huán)境下的可疑人員和可疑物品,本文采用基于YOLO算法的深度學(xué)習(xí)框架進(jìn)行目標(biāo)識(shí)別。與R-CNN、Fast R-CNN等將檢測(cè)內(nèi)容分為物體類別(分類)、物體位置(回歸)的網(wǎng)絡(luò)相比,YOLO將物體檢測(cè)作為回歸問題求解,訓(xùn)練和檢測(cè)都在同一個(gè)網(wǎng)絡(luò)中運(yùn)行,故得到了百倍于其他神經(jīng)網(wǎng)絡(luò)的識(shí)別速度。直接從圖片像素出發(fā),得到分類和概率。YOLO的算法流程如圖3所示,其特征提取主要步驟如下:
圖3 YOLO算法流程
(1)將輸入圖像劃分為×個(gè)均等大小的格子,每個(gè)格子負(fù)責(zé)檢測(cè)此格子中存在的物體。
(2)假如被測(cè)物體中心恰好落在格子中,方格將預(yù)測(cè)并提取目標(biāo)特征。每一個(gè)方格會(huì)預(yù)測(cè)出個(gè)包含物體的矩形區(qū)域(Bounding box)信息和個(gè)物體屬于某類別的置信度(準(zhǔn)確率)。Bounding box信息包含物體邊界框的中心坐標(biāo)(,)、邊界框高度與寬度(,)和置信度。代表預(yù)測(cè)邊界框和標(biāo)簽邊界框的IOU(Intersection Over Union)與目標(biāo)存在概率的乘積。
YOLO算法是將目標(biāo)檢測(cè)看成回歸問題,所以它采用的是均方差損失函數(shù),最簡(jiǎn)單的為平方差損失函數(shù),即(預(yù)測(cè)坐標(biāo)-實(shí)際坐標(biāo))+(預(yù)測(cè)概率-實(shí)際概率)。損失函數(shù)如下:
Loss由坐標(biāo)誤差、IOU誤差、分類誤差組成,表達(dá)式分別為:
相對(duì)于基于region proposal的Fast R-CNN等傳統(tǒng)物體識(shí)別算法,YOLO將物體檢測(cè)作為回歸問題進(jìn)行求解,在保證準(zhǔn)確率的情況下獲得了較高的檢測(cè)速度。同時(shí),由于YOLO在推理和訓(xùn)練的過程中可以一次性得到整張圖的信息,YOLO的背景誤檢率低;而基于region proposal的諸多檢測(cè)算法均采用“滑動(dòng)檢測(cè)”,即一次只能得到候選框中部分信息,容易將背景(非物體)誤檢為物體。貨車停車環(huán)境復(fù)雜,使用YOLO可以大大降低誤檢率。
本文采用Keras框架訓(xùn)練出可以檢測(cè)人和部分偷油工具的YOLOv3模型。
本文以偷油常見工具PVC軟管、面包車和人作為樣本進(jìn)行訓(xùn)練。通過request庫爬取相關(guān)圖片并進(jìn)行篩選。收集輸油管、車、人的圖片共672張。
由于原始數(shù)據(jù)較少,為提高訓(xùn)練效果,需要對(duì)原始數(shù)據(jù)進(jìn)行預(yù)處理。首先,將圖片統(tǒng)一裁剪;之后,對(duì)圖片分別進(jìn)行剪裁、旋轉(zhuǎn);最后,標(biāo)記圖片中待檢對(duì)象,轉(zhuǎn)換為VOC2007格式并進(jìn)行歸一化處理。
將darknet版本的YOLO model進(jìn)行適當(dāng)?shù)男薷暮螅ń档蚮ilter層以適應(yīng)更少種類的檢測(cè))轉(zhuǎn)換為Keras model;然后,導(dǎo)入預(yù)處理完成的圖片,隨機(jī)劃分訓(xùn)練集、測(cè)試集、驗(yàn)證集,使用GPU進(jìn)行訓(xùn)練,根據(jù)數(shù)據(jù)情況將訓(xùn)練次數(shù)設(shè)為1 000次。如圖4所示,經(jīng)過訓(xùn)練,Loss穩(wěn)定在20左右,模型收斂,基本滿足使用要求。圖5和圖6是對(duì)輸油管、面包車和人的識(shí)別結(jié)果。
圖4 訓(xùn)練次數(shù)與損失的關(guān)系
圖5 輸油管識(shí)別結(jié)果
圖6 面包車和人的識(shí)別結(jié)果
當(dāng)系統(tǒng)開機(jī)布防后,將使用digitalRead()函數(shù)獲取人體紅外傳感器返回的信號(hào);也會(huì)通過Serial1.read()函數(shù)實(shí)時(shí)讀取油箱液位數(shù)據(jù)。當(dāng)判斷有人經(jīng)過時(shí),啟動(dòng)ESP32-CAM攝像機(jī)模塊對(duì)周圍環(huán)境進(jìn)行取景;同時(shí)使用analogWrite()函數(shù)輸出PWM方波控制舵機(jī)轉(zhuǎn)動(dòng),將四周的環(huán)境圖像通過TCP協(xié)議傳輸至服務(wù)器。當(dāng)收到服務(wù)器判斷環(huán)境危險(xiǎn)或油箱液位在短時(shí)間內(nèi)快速下降的信息后,啟動(dòng)聲光報(bào)警系統(tǒng)。
本文使用HTML5+JavaScript開發(fā)WebAPP,并通過Android SDK中的WebView組件將HTML打包為APP。APP通過TCP協(xié)議與服務(wù)器進(jìn)行通信,實(shí)現(xiàn)過程分為4個(gè)步驟:建立Socket 對(duì)象,通過IP與端口連接;創(chuàng)建接收與發(fā)送的資源配置;建立監(jiān)聽循環(huán)機(jī)制;跳出循環(huán)關(guān)閉連接。
APP實(shí)現(xiàn)的具體功能如下:
(1)可以實(shí)時(shí)查看貨車油箱周圍環(huán)境圖像、剩余油量。
(2)當(dāng)服務(wù)器端檢測(cè)到貨車周圍環(huán)境存在危險(xiǎn)時(shí),及時(shí)向用戶推送通知并回傳環(huán)境圖像。
圖7和圖8為軟件程序在不同環(huán)境下的運(yùn)行狀態(tài)展示。
圖7 環(huán)境安全時(shí)程序運(yùn)行狀態(tài)
圖8 環(huán)境危險(xiǎn)時(shí)程序運(yùn)行狀態(tài)
本文設(shè)計(jì)了一種基于Arduino的貨車油箱防盜系統(tǒng),其上位機(jī)由服務(wù)器和手機(jī)APP組成,下位機(jī)由Arduino及配套的ESP32-CAM模塊、諧振式水位傳感器模塊、聲光報(bào)警模塊、紅外傳感模塊組成。通過OV2640攝像頭采集圖像數(shù)據(jù)、諧振式水位傳感器采集油量信息并通過ESP32上傳至服務(wù)器進(jìn)行識(shí)別,判斷周圍環(huán)境是否安全,并在發(fā)現(xiàn)可疑人員和物品或油箱油量短時(shí)間內(nèi)大量減少時(shí)啟用聲光報(bào)警系統(tǒng)并通知車主。與市面上同類產(chǎn)品相比,具有智能化程度高、可以提前預(yù)測(cè)等優(yōu)點(diǎn),較大程度上避免損失,擁有廣闊的市場(chǎng)前景。