如何使用Python檢測和識別車牌?
譯文?譯者 | 布加迪
審校 | 孫淑娟
車牌檢測與識別技術用途廣泛,可以用于道路系統、無票停車場、車輛門禁等。這項技術結合了計算機視覺和人工智能。
本文將使用Python創建一個車牌檢測和識別程序。該程序對輸入圖像進行處理,檢測和識別車牌,最后顯示車牌字符,作為輸出內容。
一、創建Python環境
要輕松地完成本教程,您需要熟悉Python基礎知識。應先創建程序環境。
在開始編程之前,您需要在環境中安裝幾個庫。打開任何Python IDE,創建一個Python文件。在終端上運行命令以安裝相應的庫。您應該在計算機上預先安裝Python PIP。
- OpenCV-Python:您將使用這個庫對輸入圖像進行預處理,并顯示各個輸出圖像。pip install OpenCV-Python
- imutils:您將使用這個庫將原始輸入圖像裁剪成所需的寬度。pip install imutils
- pytesseract:您將使用這個庫提取車牌字符,并將它們轉換成字符串。pip install pytesseractpytesseract庫依賴Tesseract OCR引擎進行字符識別。
二、如何在您的計算機上安裝Tesseract OCR?
Tesseract OCR是一種可以識別語言字符的引擎。在使用pytesseract庫之前,您應該在計算機上安裝它。步驟如下:
1. 打開任何基于Chrome的瀏覽器。
2. 下載Tesseract OCR安裝程序。
3. 運行安裝程序,像安裝其他程序一樣安裝它。
準備好環境并安裝tesseract OCR后,您就可以編寫程序了。
1.導入庫
首先導入在環境中安裝的庫。導入庫讓您可以在項目中調用和使用它們的函數。
- import cv2
- import imutils
- import pytesseract
您需要以cv2形式導入OpenCV-Python庫。使用與安裝時相同的名稱導入其他庫。
2.獲取輸入
然后將pytesseract指向安裝Tesseract引擎的位置。使用cv2.imread函數將汽車圖像作為輸入。將圖像名稱換成您在使用的那個圖像的名稱。將圖像存儲在項目所在的同一個文件夾中,以方便操作。
您可以將下面的輸入圖像換成想要使用的圖像。
3.預處理輸入
將圖像寬度調整為500像素,然后將圖像轉換成灰度圖像,因為canny邊緣檢測函數只適用于灰度圖像。最后,調用bilateralFilter函數以降低圖像噪聲。
4.在輸入端檢測車牌
檢測車牌是確定汽車上有車牌字符的那部分的過程。
(1)執行邊緣檢測
先調用cv2.Canny函數,該函數可自動檢測預處理圖像上的邊緣。
我們將通過這些邊緣找到輪廓。
(2)尋找輪廓
調用cv2.findContours函數,并傳遞邊緣圖像的副本。這個函數將檢測輪廓。使用cv2.drawContours函數,繪制原始圖像上已檢測的輪廓。最后,輸出所有可見輪廓已繪制的原始圖像。
該程序繪制它在汽車圖像上找到的所有輪廓。
找到輪廓后,您需要對它們進行篩選,以確定最佳候選輪廓。
(3)篩選輪廓
根據最小面積30對輪廓進行篩選。忽略小于這個面積的輪廓,因為它們不太可能是車牌輪廓。復制原始圖像,在圖像上繪制前30個輪廓。最后,顯示圖像。
現在輪廓數量比開始時要少。唯一繪制的輪廓是那些近似含有車牌的輪廓。
最后,您需要遍歷已篩選的輪廓,確定哪一個是車牌。
(4)遍歷前30個輪廓
創建遍歷輪廓的for循環。尋找有四個角的輪廓,確定其周長和坐標。存儲含有車牌的輪廓的圖像。最后,在原始圖像上繪制車牌輪廓并加以顯示。
循環之后,程序已識別出含有車牌的那個輪廓。
5.識別檢測到的車牌
識別車牌意味著讀取已裁剪車牌圖像上的字符。加載之前存儲的車牌圖像并顯示它。然后,調用pytesseract.image_to_string函數,傳遞已裁剪的車牌圖像。這個函數將圖像中的字符轉換成字符串。
已裁剪的車牌如下所示。上面的字符將是您稍后在屏幕上輸出的內容。
檢測并識別車牌之后,您就可以顯示輸出了。
6.顯示輸出
這是最后一步。您將提取的文本輸出到屏幕上。該文本含有車牌字符。
程序的預期輸出應該如下圖所示:
車牌文本可以在終端上看到。
三、磨礪您的Python技能
用Python檢測和識別車牌是一個有意思的項目。它有挑戰性,所以應該會幫助您學到關于Python的更多知識。
說到編程,實際運用是掌握一門語言的關鍵。為了鍛煉技能,您需要開發有意思的項目。
原文鏈接:https://www.makeuseof.com/python-car-license-plates-detect-and-recognize/