翻訳者|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)
プログラムは、車の画像上で見つかったすべての輪郭を描画します。
等高線を見つけたら、それをフィルタリングして最適な候補の等高線を特定する必要があります。
(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)
アウトラインの数は最初よりも減りました。描画される輪郭は、ナンバー プレートをほぼ含む輪郭のみです。
最後に、フィルタリングされたアウトラインを繰り返し処理し、どれがナンバー プレートであるかを判断する必要があります。
(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 )
ループの後、プログラムはナンバー プレートを含む輪郭を特定しました。
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')
已裁剪的车牌如下所示。上面的字符将是您稍后在屏幕上输出的内容。
检测并识别车牌之后,您就可以显示输出了。
6.显示输出
这是最后一步。您将提取的文本输出到屏幕上。该文本含有车牌字符。
print("License plate is:", text) cv2.waitKey(0) cv2.destroyAllWindows()
程序的预期输出应该如下图所示:
车牌文本可以在终端上看到。
三、磨砺您的Python技能
用Python检测和识别车牌是一个有意思的项目。它有挑战性,所以应该会帮助您学到关于Python的更多知识。
说到编程,实际运用是掌握一门语言的关键。为了锻炼技能,您需要开发有意思的项目。
原文链接:https://www.makeuseof.com/python-car-license-plates-detect-and-recognize/
以上がPython を使用してナンバー プレートを検出および認識するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!
