ホームページ  >  記事  >  バックエンド開発  >  Python を使用してナンバー プレートを検出および認識するにはどうすればよいですか?

Python を使用してナンバー プレートを検出および認識するにはどうすればよいですか?

王林
王林転載
2023-04-14 12:34:022128ブラウズ

翻訳者|Bugatti

レビュアー|Sun Shujuan

ナンバープレートの検出および認識テクノロジーは広く使用されており、道路システム、チケットレス駐車場、車両入退室管理などこのテクノロジーは、コンピューター ビジョンと人工知能を組み合わせたものです。

この記事では、Python を使用してナンバー プレートの検出および認識プログラムを作成します。プログラムは入力画像を処理し、ナンバー プレートを検出および認識し、最終的にナンバー プレートの文字を出力として表示します。

1. Python 環境を作成する

このチュートリアルを簡単に完了するには、Python の基本を理解している必要があります。最初にプログラム環境を作成する必要があります。

プログラミングを開始する前に、環境にいくつかのライブラリをインストールする必要があります。任意の Python IDE を開き、Python ファイルを作成します。ターミナルでコマンドを実行して、対応するライブラリをインストールします。 Python PIP がコンピューターにプリインストールされている必要があります。

  • #OpenCV-Python: このライブラリを使用して、入力画像を前処理し、個々の出力画像を表示します。 pip install OpenCV-Python
  • imutils: このライブラリを使用して、元の入力画像を希望の幅にトリミングします。 pip install imutils
  • pytesseract: このライブラリを使用して、ナンバー プレートの文字を抽出し、文字列に変換します。 pip install pytesseract pytesseract ライブラリは、文字認識のために Tesseract OCR エンジンに依存しています。

2. Tesseract OCR をコンピュータにインストールするにはどうすればよいですか?

Tesseract OCR は、言語の文字を認識できるエンジンです。 pytesseract ライブラリを使用する前に、コンピュータにインストールする必要があります。手順は次のとおりです:

#1. 任意の Chrome ベースのブラウザを開きます。

2. Tesseract OCR インストーラーをダウンロードします。

3. インストーラーを実行し、他のプログラムと同様にインストールします。

環境を準備し、tesseract OCR をインストールしたら、プログラムを作成できます。

1. ライブラリのインポート

まず、環境にインストールされているライブラリをインポートします。ライブラリをインポートすると、プロジェクト内でその関数を呼び出して使用できるようになります。

  • import cv2
  • import imutils
  • import pytesseract

必要なものOpenCV-Python ライブラリを cv2 形式でインポートします。インストール時と同じ名前を使用して他のライブラリをインポートします。

2. 入力

を取得し、pytesseract に Tesseract エンジンがインストールされている場所を指定します。 cv2.imread 関数を使用して、車の画像を入力として取得します。イメージ名を、使用しているイメージの名前に置き換えます。使いやすくするために、画像をプロジェクトと同じフォルダーに保存します。

pytesseract.pytesseract.tesseract_cmd = 'C:\Program Files\Tesseract-OCR\tesseract.exe'
original_image = cv2.imread('image3.jpeg')

以下の入力画像を使用したい画像に置き換えることができます。

3. 入力の前処理

画像の幅を 500 ピクセルに調整し、鋭いエッジ検出機能のみを使用して画像をグレースケールに変換しますグレースケール画像で動作します。最後に、画像ノイズを低減するために、関数 bilarateFilter が呼び出されます。

original_image = imutils.resize(original_image, width=500 )
gray_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
gray_image = cv2.bilateralFilter(gray_image, 11, 17, 17)

4. 入力端でナンバー プレートを検出する

ナンバー プレートの検出は、車のどの部分が故障しているかを判断するプロセスです。ナンバープレートの文字が入っています。

(1) エッジ検出の実行

まず、前処理エッジを自動的に検出できる cv2.Canny 関数を呼び出します。画像上にあります。

edged_image = cv2.Canny(gray_image, 30,200)

これらのエッジを通して輪郭を見つけます。

(2) 輪郭の検索

cv2.findContours 関数を呼び出し、エッジ イメージのコピーを渡します。この機能は輪郭を検出します。 cv2.drawContours 関数を使用して、検出された輪郭を元の画像上に描画します。最後に、目に見える輪郭がすべて描かれた元の画像を出力します。

contours, new = cv2.findContours(edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = original_image.copy()
cv2.drawContours(img1, contours, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)

プログラムは、車の画像上で見つかったすべての輪郭を描画します。

Python を使用してナンバー プレートを検出および認識するにはどうすればよいですか?

等高線を見つけたら、それをフィルタリングして最適な候補の等高線を特定する必要があります。

(3) 等高線のフィルタリング

最小面積 30 に基づいて等高線をフィルタリングします。この領域より小さい輪郭は、ナンバー プレートの輪郭である可能性が低いため、無視されます。元の画像のコピーを作成し、画像上に最初の 30 個の輪郭を描画します。最後に画像が表示されます。

contours = sorted(contours, key = cv2.contourArea, reverse = True)[:30]
# stores the license plate contour
screenCnt = None
img2 = original_image.copy()

# draws top 30 contours
cv2.drawContours(img2, contours, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)

アウトラインの数は最初よりも減りました。描画される輪郭は、ナンバー プレートをほぼ含む輪郭のみです。

Python を使用してナンバー プレートを検出および認識するにはどうすればよいですか?

最後に、フィルタリングされたアウトラインを繰り返し処理し、どれがナンバー プレートであるかを判断する必要があります。

(4) 最初の 30 個の輪郭を横断する

輪郭を横断する for ループを作成します。 4 つの角を持つ輪郭を見つけて、その周囲と座標を決定します。ナンバープレートの輪郭を含む画像を保存します。最後に、元の画像上にナンバープレートの輪郭を描画して表示します。

count = 0
idx = 7

for c in contours:
# approximate the license plate contour
contour_perimeter = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.018 * contour_perimeter, True)

# Look for contours with 4 corners
if len(approx) == 4:
screenCnt = approx

# find the coordinates of the license plate contour
x, y, w, h = cv2.boundingRect(c)
new_img = original_image [ y: y + h, x: x + w]

# stores the new image
cv2.imwrite('./'+str(idx)+'.png',new_img)
idx += 1
break

# draws the license plate contour on original image
cv2.drawContours(original_image , [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("detected license plate", original_image )

ループの後、プログラムはナンバー プレートを含む輪郭を特定しました。

Python を使用してナンバー プレートを検出および認識するにはどうすればよいですか?

5.识别检测到的车牌

识别车牌意味着读取已裁剪车牌图像上的字符。加载之前存储的车牌图像并显示它。然后,调用pytesseract.image_to_string函数,传递已裁剪的车牌图像。这个函数将图像中的字符转换成字符串。

# filename of the cropped license plate image
cropped_License_Plate = './7.png'
cv2.imshow("cropped license plate", cv2.imread(cropped_License_Plate))

# converts the license plate characters to string
text = pytesseract.image_to_string(cropped_License_Plate, lang='eng')

已裁剪的车牌如下所示。上面的字符将是您稍后在屏幕上输出的内容。

Python を使用してナンバー プレートを検出および認識するにはどうすればよいですか?

检测并识别车牌之后,您就可以显示输出了。

6.显示输出

这是最后一步。您将提取的文本输出到屏幕上。该文本含有车牌字符。

print("License plate is:", text)
cv2.waitKey(0)
cv2.destroyAllWindows()

程序的预期输出应该如下图所示:

Python を使用してナンバー プレートを検出および認識するにはどうすればよいですか?

车牌文本可以在终端上看到。

三、磨砺您的Python技能

用Python检测和识别车牌是一个有意思的项目。它有挑战性,所以应该会帮助您学到关于Python的更多知识。

说到编程,实际运用是掌握一门语言的关键。为了锻炼技能,您需要开发有意思的项目。

原文链接:https://www.makeuseof.com/python-car-license-plates-detect-and-recognize/

以上がPython を使用してナンバー プレートを検出および認識するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。