使用DFRobot的ESP32-S3 AI Cam & Gemini API的AI驅動ANPR
智能監(jiān)控:自動車牌識別系統(tǒng),用于智能交通和安全系統(tǒng),具有實時車輛洞察
什么是ANPR系統(tǒng)
自動車牌識別(ANPR)系統(tǒng)是一種使用專用攝像頭和軟件從圖像或視頻流中自動檢測、讀取和記錄車輛車牌的技術。
它的工作原理是:捕獲印版圖像,對其進行處理以隔離印版區(qū)域,然后應用光學字符識別(OCR)將印版字符圖像轉換為數(shù)字文本數(shù)據(jù)。這些數(shù)據(jù)通常用于執(zhí)法(識別被盜車輛或交通違規(guī))、收費、停車管理、交通監(jiān)控和安全區(qū)域的訪問控制等應用。
世界各地的汽車牌照
世界各地的汽車牌照差異很大,反映了政府法規(guī)、用途和設計美學的差異。一般來說,車牌可以根據(jù)功能分為幾種類型:私人車輛號牌、商業(yè)號牌、外交號牌、軍用號牌和臨時或過境號牌。在許多國家,出租車、出租車輛、警察和公共交通工具都有專用車牌。它們通常在背景顏色、字母數(shù)字格式、前綴或符號方面有所不同。
例如,在印度,私家車使用白色背景和黑色字母,而商用車輛使用黃色車牌和黑色文字。同樣,在英國,外交車牌有一個明顯的“D”或大使館代碼,而在美國,軍用車牌通常帶有各自武裝部隊的標志。
在設計方面,盤子的形狀、大小和字體各不相同。歐盟國家通常使用左邊有藍色歐盟帶的標準化車牌,而北美車牌則更加多樣化,通常包括州/省名稱和獨特的圖形元素。像日本這樣的一些國家使用漢字和彩色車牌來指示車輛類別和發(fā)動機大小。
此外,隨著科技的興起,一些地區(qū)已經(jīng)開始試驗數(shù)字車牌,這些車牌可以電子更新,并可以集成跟蹤或防盜功能。這些全球性的變化使得車牌識別系統(tǒng)在計算機視覺領域尤其具有挑戰(zhàn)性和吸引力。
項目的靈感
你有沒有想過,一個口袋大小的設備是否可以識別汽車號牌并將結果發(fā)送到云端?隨著邊緣計算和AI api(如Gemini)的蓬勃發(fā)展,現(xiàn)在可以在沒有繁重GPU設置的情況下構建ANPR系統(tǒng)。我想將谷歌的Gemini AI的強大功能與DFRobot的緊湊型ESP32-S3 AI相機模塊結合起來,構建一個便攜式、低成本、實時的車牌檢測系統(tǒng)。
現(xiàn)有的技術
在深入研究之前,讓我們看看傳統(tǒng)的ANPR系統(tǒng)是如何工作的:
我們這個項目的實現(xiàn)屬于最后一類-邊緣相機+云AI,在成本,可移植性和性能方面取得了很好的平衡。
介紹
該項目采用DFRobot的ESP32-S3 AI攝像頭模塊和谷歌Gemini Vision API,是一款智能、經(jīng)濟高效的自動車牌識別(ANPR)系統(tǒng)。它捕獲車輛圖像,使用基于云的人工智能處理它們,并可選擇將識別的車牌數(shù)據(jù)與時間戳和Base64圖像一起發(fā)送到Firebase。
與傳統(tǒng)的樹莓派或繁重的Linux環(huán)境不同,它使用一個支持攝像頭的微控制器,幾乎可以在邊緣運行所有東西。
我非常感謝DFRobot為我提供了他們出色的硬件,并支持我的項目構想與ESP32-S3 AI相機模塊
現(xiàn)在讓我們詳細看看項目的實現(xiàn)。
硬件
在這個項目中,我們將使用以下設備——ESP32-S3 AI Camera Module
ESP32-S3 AI攝像頭模塊-(視頻由DFRobot提供和提供)
設備帶有以下組件
ESP32-S3 AI Camera是一款基于高性能ESP32-S3芯片的尖端智能攝像頭模塊,旨在實現(xiàn)高效的視頻處理、邊緣AI和語音交互。它具有廣角紅外攝像頭,板載麥克風和揚聲器,非常適合電子窺視孔,嬰兒監(jiān)視器和車牌識別等應用。
人工智能助手
憑借強大的人工智能處理能力,它無縫集成到物聯(lián)網(wǎng)生態(tài)系統(tǒng)中,通過Wi-Fi連接支持邊緣圖像識別和在線人工智能模型交互,使其成為物聯(lián)網(wǎng)應用的重要組成部分,從安全監(jiān)控到人工智能助手。
ESP32-S3 AI攝像頭模塊主要特性
?處理器:Xtensa®雙核32位LX7微處理器,240 MHz
?內置OV3660 300萬像素攝像頭。
?16mb閃存,8MB PSRAM平滑圖像捕獲
?機載麥克風和工具包配有揚聲器
?USB: USB 2.0 OTG全速接口
?SD卡插槽
?ALS: lr -308環(huán)境光傳感器
?4個LED用于IR:紅外線照明
相機規(guī)格
ESP32-S3 AI camera上的廣角紅外攝像頭,結合紅外照明和光傳感器,即使在低光或完全黑暗的情況下,也能確保出色的圖像清晰度。無論白天還是夜晚,ESP32-S3 AI Camera都能保證監(jiān)控畫面的穩(wěn)定性和清晰度,為安防和監(jiān)控系統(tǒng)提供可靠的支持。
?傳感器型號:OV3660
?像素:300萬像素
?靈敏度:可見光,940nm紅外線
?視野:160°
?焦距:0.95
?光圈:2.0
?失真:< 8%
這都是關于這個很棒的硬件。你可以在它的維基頁面上了解更多。他們解釋了詳細的細節(jié),功能,規(guī)格,引腳,入門指南等。
開始使用DFRobot ESP32-S3 AI相機
查看我們在Hackster上的博客文章,了解有關ESP32-S3 AI相機模塊的更多信息。
項目如何運作
現(xiàn)在讓我們看看這個項目是如何運作的。以下是重要的步驟
?捕獲:ESP32-S3使用板載OV3660傳感器捕獲圖像。
?Encode:將圖像轉換為Base64格式。
?AI檢測:向Gemini Vision API發(fā)送請求,檢測并提取車牌號碼。
?驗證:邏輯濾波和驗證輸出,以確保板的質量。
?存儲(可選):將結果與日期/時間和圖像一起推送到Firebase Realtime DB。
?重復:每20秒周期性運行一次。
在這個項目中,ESP32-S3 AI攝像頭捕獲車輛圖像并將其轉換為base64編碼的字符串,然后將其嵌入到JSON有效載荷中,并伴有請求提取車牌的自然語言提示。此有效負載通過HTTP POST請求發(fā)送到b谷歌的Gemini API (generateContent端點)。Gemini API處理圖像并返回json格式的響應,其中提取的車牌(或相關消息)在嵌套的文本字段中找到。ESP32然后使用ArduinoJson解析這個JSON響應,提取純文本號牌,如果有效,將其記錄下來或將其發(fā)送到Firebase進行存儲和進一步監(jiān)控。
軟件
在這個項目中,我們需要以下軟件組件-
?Arduino IDE(帶ESP32板包)
?用于圖像理解的Gemini Vision API
?Firebase實時數(shù)據(jù)庫(可選)
圖書館使用:
?Wi-Fi - Wi-Fi連接
?h - REST API通信
?ArduinoJson.h - JSON解析
?esp_camera.h -攝像頭接口
?time.h -通過NTP同步日期和時間
獲得Gemini API密鑰
為什么我們需要Gemini API ?
Gemini API是自動車牌識別(ANPR)系統(tǒng)的智能核心。雖然ESP32-S3 AI相機可以捕獲高質量的圖像,但它缺乏準確執(zhí)行光學字符識別(OCR)和解釋復雜圖像數(shù)據(jù)所需的計算能力和深度學習模型。Gemini通過使用其強大的多模式功能來分析圖像、理解內容和提取車牌文本,填補了這一空白。與傳統(tǒng)的OCR庫不同,Gemini利用先進的視覺語言模型健壯而靈活地執(zhí)行這項任務——所有這些都來自一個簡單的API請求。它只需一個HTTP調用就可以將原始圖像轉換為可操作的洞察(車牌),使其成為低功耗邊緣設備的理想選擇。
Firebase實時數(shù)據(jù)庫
為什么我們需要Firebase實時數(shù)據(jù)庫?
Firebase實時數(shù)據(jù)庫作為一個安全的、基于云的存儲系統(tǒng),用于記錄和監(jiān)控檢測到的車牌以及相關的時間戳和圖像。由于ESP32是一種瞬時設備,板載內存有限,沒有持久存儲,因此Firebase可以確保保留有價值的檢測數(shù)據(jù),以供將來參考、分析或警報系統(tǒng)使用。它允許多個利益相關者(如管理員、安全人員或應用程序)從任何地方實時訪問數(shù)據(jù)。此外,F(xiàn)irebase與其他谷歌服務無縫集成,并提供可擴展性,使其成為在智能停車、訪問控制或監(jiān)視場景中部署該項目的理想后端。
代碼
一旦你得到Gemini API Key和Firebase數(shù)據(jù)庫(Realtime)的URL,然后將它們輸入到代碼中。
你還需要輸入你的WiFi證書。
對于Firebase數(shù)據(jù)庫實現(xiàn)-我們將其保留為可選的。
如果不想使用Database,可以將上述定義設置為false。
如果您使用谷歌Firebase Database -那么不要忘記輸入正確的URL
在上面的URL中不要忘記添加data.json
在Firebase實時數(shù)據(jù)庫中,只有在通過REST API訪問數(shù)據(jù)庫時才需要URL末尾的.json,這正是ESP32使用HTTPClient所做的。這是在你的臺詞里的意思:
Data指的是要在數(shù)據(jù)庫中存儲數(shù)據(jù)的節(jié)點或路徑。您可以輸入任何名稱。例如:numberplate。Json或車牌。json等
.json是Firebase REST API指定發(fā)送或接收json格式數(shù)據(jù)所必需的。
這個URL告訴Firebase:
“訪問數(shù)據(jù)庫根節(jié)點中的數(shù)據(jù),并將請求體視為JSON?!?
NTP定時設置
以上代碼以秒為單位設置與GMT/UTC的時區(qū)偏移量。值為0表示您正在使用GMT/UTC時間(沒有偏移)。
所以對于印度,我們遵循印度標準時間(IST),即UTC +5小時30分鐘。
所以把它設為印度,把5小時30分鐘換算成秒:
這確保您的ESP32將同步并顯示正確的當?shù)貢r間為印度時,使用NTP服務器。
代碼的解釋
項目代碼運行在DFRobot ESP32-S3 AI Camera模塊上,并使用谷歌的Gemini API執(zhí)行自動車牌識別(ANPR)。它首先連接到Wi-Fi,并通過NTP同步實時時鐘。相機用正確的GPIO引腳初始化,并定期捕獲圖像
每個圖像都是base64編碼的,并作為HTTP POST請求的一部分發(fā)送給Gemini API,并提示它檢測車輛的車牌。
響應從JSON中解析,如果提取出有效的車牌號,代碼將檢測時間和車牌號記錄到串行監(jiān)視器中。如果啟用了Firebase集成,結果(車牌號碼、時間戳和圖像)也會發(fā)送到Firebase實時數(shù)據(jù)庫。這為實時車輛監(jiān)控和記錄創(chuàng)造了一個緊湊但智能的邊緣人工智能管道。
當ESP32使用generateContent端點(例如,對于模型Gemini -2.0-flash)向Gemini API發(fā)送圖像和提示時,返回的響應是JSON格式的。
但是,您感興趣的實際車牌文本(或任何ai生成的響應)都嵌入在特定字段下的JSON中。以下是一個示例回復格式:
在ESP32上,我們:
從http.getString()獲取字符串形式的響應;
使用ArduinoJson解析它
使用以下命令提取有用的文本值:
因此我們的最后
響應是JSON
號牌是嵌套在JSON中的純文本字符串
項目演示
如下圖所示,系統(tǒng)正確檢測到車牌號/車牌
在firebase實時數(shù)據(jù)庫中,我們使用時間戳獲取車牌號
項目的潛在應用
有幾個地方/領域可以使用這個項目
?智能停車系統(tǒng)
?執(zhí)法和交通監(jiān)控
?出入口自動化
?住宅智能監(jiān)控
?車隊管理系統(tǒng)
?AI 驅動的邊緣圖像測試平臺
未來的改進
在未來,我想升級這個項目與車庫門打開器的下一個應用。但這塊板沒有分離引腳接口。因此,我們必須使用帶有MQTT接口的另一個ESP32板。
本文編譯自hackster.io