自動車牌識別(ANPR )變得越來越普遍。曾經是警察的專有領域,現在可以在超市和機場停車場找到用於準確讀取汽車車牌的技術。
不久之前,ANPR技術的購買和實施成本非常昂貴。現在,即使是Raspberry Pi也可以使用Pi Camera Module和開源軟件來高精度讀取車牌號。讓我們通過構建一個系統來檢測和提醒汽車何時駛入車道,來演示可能的方法。
本教程由PJ Evans撰寫,首次出現在The MagPi 79中。單擊此處訂閱The MagPi雜誌。
ANPR Raspberry Pi:選擇一個位置
首先,我們要放在哪裡?儘管該項目有很多應用程序,但我們將通過閱讀在車道上來回行駛的汽車的車號牌來了解誰在家裡。這意味著Raspberry Pi可能要住在室外。因此,許多環境制約因素都應運而生。儘管該軟件令人驚訝地可以承受角度和高度,但您需要為Pi配備USB 5 V電源以及適合於讀板的安裝位置,因此,如果無法完美對齊,請不要擔心太多。
獲取附件
由於我們的樹莓派將要居住在室外(除非您有一個放置良好的窗戶),因此您需要一個合適的外殼。為了獲得正確的構造,請獲取IP67防水盒。
我們選擇自製,並在帶有RainBerry的Raspberry Pi 3 A +上使用– 3D可打印外殼,一旦添加一些橡膠密封墊,便可以提供足夠的保護。確保選擇的任何東西都在相機上有孔。
準備你的Pi
由於我們不需要圖形用戶界面,因此Raspbian Stretch Lite是我們選擇的操作系統。任何Pi都可以處理此任務,儘管如果您想要最快的圖像處理速度,則可能要避免使用“零”模型並獲得一個漂亮的,快速的3B或3B +模型。設置操作系統,確保已完成必要的sudo apt更新&& sudo apt -y升級,並且如果不使用以太網,則已配置WiFi。最後,確保您的Pi攝像頭模塊已連接並啟用。您可以通過運行sudo raspi-config並在“接口選項”下查看來進行檢查。
安裝openALPR
幸運的是,我們不需要成為機器學習和圖像處理方面的專家即可實施ANPR。openALPR是一個開源項目,僅從攝像機圖像即可提供快速而準確的處理。“ ALPR”不是錯誤:該美國項目是“自動車牌識別”。借助APT,安裝非常簡單。在命令行中,輸入以下內容:
sudo apt install openalpr openalpr-daemon openalpr-utils libopenalpr-dev
這可能需要一段時間,因為需要安裝許多支持軟件包,例如Tesseract,一種開源光學字符識別(OCR)工具。這與標識車牌的代碼結合在一起,才是神奇的方法。
考試時間
安裝完成後,您將毫不客氣地退回到命令提示符。OpenALPR安裝了一個命令行工具,以使其功能測試更加容易,並且還提供了示例圖像。在命令行上,輸入以下內容:
cd
wget http://plates.openalpr.com/ea7the.jpg
這是美國板塊圖像的樣本,也是一張困難的圖像。Wget從Web上獲取文件並將其放置在您的主目錄中。讓我們看看是否可以識別它:
alpr -c us ea7the.jpg
一切順利,您會在屏幕上看到報告。最可能的“匹配項”應與文件名EA7THE相同。
安裝Python庫
我們也可以在Python中使用openALPR。首先,使用pip安裝庫。如果沒有安裝pip,請運行:
sudo apt install python-pip
要安裝庫:
pip install openalpr picamera python-pushover
現在,通過運行Python來測試一切是否正常,並在>>>提示符下逐行輸入以下代碼:
import json
from openalpr import Alpr
alpr = Alpr("us", "/etc/openalpr/openalpr.conf", "/usr/share/openalpr/runtimedata")
results = alpr.recognize
file("/home/pi/ea7the.jpg")
print(json.dumps(results, indent=4))
alpr.unload()
如果您以前沒有看過JSON格式的文本,這看起來可能有點多,但是您應該看到返回的正確車牌號是第一個結果。
獲取Pushover令牌
為了使我們能夠在汽車駛入或駛出時獲得警報,我們使用了最喜歡的舊Pushover ,這使向手機發送通知變得輕而易舉。有免費試用版,之後每台設備固定費用為4.99美元,沒有訂閱或限制。登錄後,轉到“您的應用程序”並記下您的用戶密鑰。然後點擊“創建應用程序/ API令牌”。將其命名為“ ANPR”,將所有其他字段保留為空白,然後單擊“創建應用程序”。現在記下API令牌;您將需要此代碼和用戶密鑰。
打字時間
現在,您擁有創建ANPR應用程序所需的一切。輸入此處顯示的代碼清單或從GitHub下載。將其另存為anpr.py在您的主目錄中。編輯文件,並在出現提示時輸入您的用戶和應用令牌。保存文件,然後輸入以下內容進行測試:
python anpr.py
該代碼串聯使用了Pi攝像頭模塊和openALPR。攝像機每五秒鐘拍攝一張照片,然後將其傳遞給openALPR進行分析。如果找到車牌,我們會得到號碼。如果發生了更改,警報將發送到Pushover,然後將其轉發到任何已註冊的移動設備。
列出您的清單
如果您想擁有更友好的名稱而不只是車牌號,請嘗試在import語句之後添加Python字典,如下所示:
lookup = {
"ABC123": "Steve McQueen",
"ZXY123": "Lewis Hamilton"
}
然後,如下更改警報文本中number_plate的所有實例:
lookup[number_plate]
現在,您將得到一個友好的名稱。看看如果無法識別車牌,是否可以處理。
開機啟動
任何“免提” Raspberry Pi安裝的關鍵部分都是確保在電源故障的情況下再次啟動所需的服務。有很多方法可以做到這一點。我們將使用較簡單的方法之一。
sudo nano /etc/rc.local
找到最後一行,退出0,然後在上面的行中輸入以下內容:
#Start ANPR Monitoring
/usr/bin/python /home/pi/anpr.py
按CTRL + X,然後按Y保存文件。最後,再次運行先前的pip命令,這次使用sudo為root用戶安裝庫:
sudo pip install openalpr picamera python-pushover
重新啟動後,代碼將啟動並在後台運行。
添加日誌記錄和宵禁
這種安裝方式的一種用途是跟踪汽車出入的時間。這對於宵禁對其保險實行限制的年輕駕駛員尤其有用。查看是否可以擴展代碼以檢查一段時間後是否未看到車牌。例如,如果您的年輕家庭成員有這樣的限制,如果他們的汽車不在開車前30分鐘,則向他們的手機發送警報。您可以為他們節省保費增加額!另外,為什麼不將所有來回記錄到文件中呢?少量數據分析可能有助於減少汽車使用或燃料成本。
自己做
和以往一樣,一切都結束了。現在,您可以跟踪和記錄車牌,有許多不同的應用程序可供您探索。由於所有圖像分析都是在本地完成的,因此無需互聯網連接即可使系統正常工作。是否有人在工作中“借用”您的停車位?趕快行動吧!為什麼不把Car Spy Pi帶到路上呢?它可以記錄您遇到的每輛車,如果發生意外,這可能會很有用。將Raspberry Pi Zero和ZeroView結合起來 ,一切就緒。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | from openalpr import Alpr from picamera import PiCamera from time import sleep import pushover # Pushover settings PUSHOVER_USER_KEY = "<REPLACE WITH USER KEY>" PUSHOVER_APP_TOKEN = "<REPLACE WITH APP TOKEN>" # 'gb' means we want to recognise UK plates, many others are available alpr = Alpr( "gb" , "/etc/openalpr/openalpr.conf" , "/usr/share/openalpr/runtime_data" ) camera = PiCamera() pushover.init(PUSHOVER_APP_TOKEN) last_seen = None try : # Let's loop forever: while True : # Take a photo print ( 'Taking a photo' ) camera.capture( '/home/pi/latest.jpg' ) # Ask OpenALPR what it thinks analysis = alpr.recognize_file( "/home/pi/latest.jpg" ) # If no results, no car! if len (analysis[ 'results' ]) = = 0 : print ( 'No number plate detected' ) # Has a car left? if last_seen is not None : pushover.Client( PUSHOVER_USER_KEY).send_message( last_seen + " left" , title = "Driveway" ) last_seen = None else : number_plate = analysis[ 'results' ][ 0 ][ 'plate' ] print ( 'Number plate detected: ' + number_plate) # Has there been a change? if last_seen is None : pushover.Client( PUSHOVER_USER_KEY).send_message( number_plate + " has arrived" , title = "Driveway" ) elif number_plate ! = last_seen: pushover.Client( PUSHOVER_USER_KEY).send_message( number_plate + " arrived and " + last_seen + " left" , title = "Driveway" ) last_seen = number_plate # Wait for five seconds sleep( 5 ) except KeyboardInterrupt: print ( 'Shutting down' ) alpr.unload() |
資料來源: https://www.cnblogs.com/kekeoutlook/p/12013791.html