Pythonでナンバープレートを読み取る仕組み
ナンバープレートの読み取りには、主に画像処理とOCR(光学文字認識)技術を組み合わせて使用します。OpenCVを使って画像内からナンバープレートの位置を検出し、TesseractなどのOCRエンジンで文字部分を抽出・認識するのが一般的な流れです。
必要なライブラリのインストール
ナンバープレート検出には以下のPythonライブラリが必要です。
インストールはpipコマンドで行います。
pip install opencv-python pytesseract imutils
Tesseract OCR本体も別途インストールしておく必要があります。Windowsの場合、

(https://github.com/tesseract-ocr/tesseract) からインストーラーを入手し、環境変数にパスを通しておきましょう。
GitHub - tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)
Tesseract Open Source OCR Engine (main repository) - tesseract-ocr/tesseract
OpenCVで画像からナンバープレートを検出
まずは車両画像からナンバープレートの領域を検出します。画像をグレースケールに変換し、輪郭検出で矩形を抽出し、縦横比などでナンバープレートらしき領域を特定します。
import cv2
import imutils
image = cv2.imread('car.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray, 11, 17, 17)
edged = cv2.Canny(gray, 30, 200)
cnts = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)[:10]
plate_cnt = None
for c in cnts:
approx = cv2.approxPolyDP(c, 10, True)
if len(approx) == 4:
plate_cnt = approx
break
if plate_cnt is not None:
x, y, w, h = cv2.boundingRect(plate_cnt)
plate_img = image[y:y+h, x:x+w]
cv2.imwrite('plate.jpg', plate_img)
Tesseractでナンバープレートの文字を読み取る
検出したナンバープレート領域の画像をOCRにかけて文字列を取得します。文字の傾き補正やノイズ除去を事前に行うと精度が向上します。
import pytesseract
from PIL import Image
# Tesseractのパスを設定(Windows)
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
img = Image.open('plate.jpg')
text = pytesseract.image_to_string(img, config='--psm 8')
print('読み取ったナンバー:', text)
応用例:リアルタイムカメラ映像からの読み取り
監視カメラなどのライブ映像からナンバープレートを自動検出・読み取りすることで、駐車場管理や来訪者記録などに応用可能です。OpenCVの`VideoCapture`を使えば、リアルタイムのナンバー読み取りも可能になります。
まとめ
PythonとOpenCV、Tesseractを組み合わせることで、ナンバープレートの検出と読み取りを比較的簡単に実装できます。画像の前処理やOCR精度の調整によって、実用レベルの制度に引き上げることも可能です。車両管理や入退場記録などの自動化に活用してみてください。