使用 OpenCV 識(shí)別車牌通常涉及幾個(gè)步驟,包括圖像讀取、預(yù)處理汁掠、車牌定位略吨、字符分割和字符識(shí)別。以下是一個(gè)簡單的車牌識(shí)別流程示例:
1. 安裝必要的庫
確保你已經(jīng)安裝了 OpenCV 和其他相關(guān)庫考阱,使用如下命令:
pip install opencv-python numpy pytesseract
pytesseract
是一個(gè)用于光學(xué)字符識(shí)別(OCR)的庫翠忠,它依賴于 Tesseract OCR 引擎。
2. 準(zhǔn)備 Tesseract OCR
安裝 Tesseract OCR:Tesseract GitHub
安裝后乞榨,設(shè)置環(huán)境變量秽之,將 Tesseract 的安裝路徑添加到系統(tǒng)環(huán)境變量中。
使用以下代碼設(shè)置
pytesseract
的路徑(假設(shè)你已安裝了 Tesseract OCR):
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
(替換為你自己的路徑)
3. 實(shí)現(xiàn)車牌識(shí)別
以下是簡單的車牌識(shí)別代碼示例:
import cv2
import numpy as np
import pytesseract
# 設(shè)置 Tesseract 路徑
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
# 讀取圖像
image_path = 'path_to_your_image.jpg'
image = cv2.imread(image_path)
# 灰度化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 使用高斯模糊去噪聲
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# 邊緣檢測
edges = cv2.Canny(blurred, 100, 200)
# 找到輪廓
contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 車牌定位
for contour in contours:
x, y, w, h = cv2.boundingRect(contour)
aspect_ratio = w / float(h)
# 車牌的寬高比一般在 2:1 到 5:1 之間
if 2 < aspect_ratio < 5:
# 提取車牌區(qū)域
plate = gray[y:y+h, x:x+w]
cv2.imshow("Plate Image", plate)
# 字符識(shí)別
plate_text = pytesseract.image_to_string(plate, config='--psm 8')
print("Detected License Plate Text:", plate_text.strip())
# 繪制矩形框
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
break
# 顯示結(jié)果
cv2.imshow("Detected License Plate", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
4. 代碼解釋
-
圖像預(yù)處理:
- 將圖像轉(zhuǎn)換為灰度圖吃既,以減少顏色維度考榨。
- 使用高斯模糊去除高頻噪聲,以改善邊緣檢測的效果鹦倚。
-
邊緣檢測:
- 使用 Canny 邊緣檢測算法找到圖像中的邊緣河质。
-
輪廓檢測:
- 找到邊緣圖像中的輪廓,繪制邊界框以定位車牌區(qū)域震叙。
-
字符識(shí)別:
- 對提取出的車牌區(qū)域使用 Tesseract 進(jìn)行 OCR 識(shí)別掀鹅,得到車牌文本。
5. 優(yōu)化和改進(jìn)
上述代碼是車牌識(shí)別的基本示例媒楼。在實(shí)際應(yīng)用中乐尊,你可能需要根據(jù)需求進(jìn)行以下優(yōu)化:
- 進(jìn)一步的圖像處理:如形態(tài)學(xué)操作(膨脹和腐蝕)來改善車牌定位和字符分割。
- 使用深度學(xué)習(xí)模型:對于復(fù)雜場景匣砖,可以考慮使用深度學(xué)習(xí)模型(如 YOLO科吭、SSD)進(jìn)行車牌檢測。
- 字符過濾與后處理:根據(jù)車牌的具體格式猴鲫,進(jìn)一步過濾和處理識(shí)別的字符对人。