OpenAlpr + ESP32Cam + T-Watch + Blynk 運用心得(一)
最近接觸了 OpenAlpr + ESP32Cam 的車牌辨識系統後,想說來記錄與分享自己的 改造心得..
這辨識系統架構是由
python + alpr 與 MQTT broker (PC端) 組合而成的
ESP32 Cam (控制端)
而裡頭的溝通精隨是由 MQTT 扮演溝通角色
例如 :
ESP32 Cam 發送出的MQTT :
MQTT_PUBLISH_Monitor "ParkingLot/Monitor" // Binary JPG Image (拍照)
MQTT_PUBLISH_SysLog "ParkingLot/SysLog" // System Logs (系統狀態)
MQTT_PUBLISH_Vehicle "ParkingLot/Vehicle" // "Coming", "Leaving" (車子進入與離開)
由 python 傳送到 ESP32 Cam 的 MQTT
MQTT_SUBSCRIBE_Shutter "ParkingLot/Shutter" // "Click" (命令ESP32 Cam 拍照)
MQTT_SUBSCRIBE_GateArm "ParkingLot/GateArm" // "Lift", "Drop" (命令ESP32 Cam 柵欄動作)
ESP32 Cam 與 pc端RecognizeLP 程式 各自扮演publisher與subcrribe角色而 Broker 是由 mosquitto擔綱
程序運作說明 :
當車輛接近 此系統時 (由 PIR感測模組 判讀) ,由 ESP32 Cam 發送一個 ParkingLot/Vehicle topic 與 Coming 的 payload 給 broker, 由於 python 已訂閱 這個 topic,
判讀後 再發送出 ParkingLot/ Shutter topic 與 Click的 payload給 broker, 再由已訂閱此主題的ESP32 Cam 做拍照的動作 用 ParkingLot/ Shutter topic 與 MQTT 傳圖方式 的 payload 給broker ,再由 Alpr 做解析.
當 Alpr 解析成功 由 RecognizeLP 程式 顯示訊息 PERMIT or DENY 並且發送出 ParkingLot/GateArm 的 topic與 "Lift", "Drop"的payload 來決定辨識出的車牌號碼是否在名單中予以打開 柵欄與關閉. 當柵欄開啟後, 車輛離開時 再發送一個 Drop 的 payload 讓 ESP32 Cam 關起柵門.這樣便完成單一循環作業流程
硬體接線圖 : (原圖)
如圖一:
硬體接線圖 : (調整)
如圖二:
調整動機 :
1. 由於原系統pc端會用訊息視窗呈現辨識後的車牌是否允許進入,覺得不易辨識
2. 在模擬辨識過程中,並無法知道何時拍照完成,常常車牌都無法正確入鏡
3. 以語音與 SSD1306 OLED 方式呈現與播報,能讓測試模擬者知道目前進行狀況
4. 用語音正確唸出車牌號碼,方便檢視有無辨識錯誤
5. 用燈號來顯示目前系統狀態, 較容易辨識. 綠燈: 允許通行 紅燈: 拒絕進入
6. 改用 vl53l1x 來取代 PIR ,模擬判斷車子進入會更準確
7. 結合 Blynk ,更方便於手機上控制與輸入 MQTT 訊息強制啟動 (模擬因辨識系統無法正常運作改為手動模式)
8. 結合 T-Watch, 當辨識到不允許進入的車牌會傳送 圖片到LINE 與 T-Watch 上,藉由 觸控面板點選 開啟柵欄 ,系統也會記錄異常開放進入
9. T-Watch 與 blynk上都會呈現 MQTT 傳送與接收的資訊,以利檢測狀況