web-dev-qa-db-ja.com

画像から車両ライセンス/ナンバープレート(ANPR)を認識する方法は?

ユーザーが車の画像をアップロードできるWebサイトがあります。プライバシーフィルターを配置して、車両のナンバープレートを検出し、ぼかします。

ぼかしは問題ではありませんが、写真内のライセンスを見つけるのに役立つライブラリまたはコンポーネント(オープンソースを推奨)はありますか?

警告;

  1. 完璧なものは何もないことを知っており、このタイプの画像認識は偽陽性と陰性を提供します。
  2. ぼかす領域を選択するようにユーザーに求めることができ、これも同様に行うことができますが、問題は特にそのデータをプログラムで見つけることです。そのため、「すべての画像を確認してもらう」などの回答は役に立ちません。
  3. このソフトウェア方式は、英国では「自動ナンバープレート認識」と呼ばれていますが、ライブラリとして実装されていることは確認できません。
  4. .Netが推奨されますが、どの言語でも優れています。
66
Ryan O'Neill

Java ANPRに基づいてC#バージョンをコーディングしましたが、OpenCVでawtライブラリ関数を変更しました。 http://anprmx.codeplex.com で確認できます。

29
Jivan Miranda

[〜#〜] edit [〜#〜]:このために Pythonスクリプト を書きました。

(プライバシー保護のため)目的がぼやけているため、基本的に最初のステップとして高度な recall 検出器が必要です。これを行う方法を次に示します。付属のコードヒントでは、PythonでOpenCVを使用しています。

  1. グレースケールに変換します。
  2. ガウスぼかしを適用します。

    _img = cv2.imread('input.jpg',1)
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    img_gray = cv2.GaussianBlur(img_gray, (5,5), 0)  
    _

入力画像を次のようにします。

enter image description here

  1. ソーベルフィルターを適用して、垂直エッジを検出します。
  2. 厳密なしきい値またはOTSUの2値化を使用して、結果の画像のしきい値を設定します。

    _cv2.Sobel(image, -1, 1, 0)
    cv2.threshold() 
    _
  3. 適切な構造化要素を使用してモルフォロジークロージング操作を適用します。 (16x4を構造化要素として使用しました)

    _se = cv2.getStructuringElement(cv2.MORPH_RECT,(16,4))
    cv2.morphologyEx(image, cv2.MORPH_CLOSE, se)  
    _

手順5の結果の画像。

enter image description here

  1. この画像の外部輪郭を見つけます。

    _cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
    _
  2. 各輪郭について、それを囲むminAreaRect()を見つけます。

  3. 縦横比、最小および最大面積、水平線との角度に基づいて長方形を選択します。 (2.2 <=アスペクト比<= 8、500 <=面積<= 15000、角度<= 45度を使用しました)

すべてのminAreaRect() sはオレンジ色で表示され、基準を満たすものは緑色で表示されます。

enter image description here

  1. このステップの後、誤検出が発生する可能性があります。フィルタリングするには、エッジ密度を使用します。エッジ密度は、白いピクセルの数/長方形のピクセルの総数として定義されます。エッジ密度のしきい値を設定します。 (0.5を使用しました)

enter image description here

  1. 検出された領域をぼかします。

enter image description here

リコールと精度を高めるのに適していると思われる他のフィルターを適用できます。 HOG + SVMを使用して検出をトレーニングし、精度を高めることもできます。

26
Abdul Fatir

GitHubには、米国および欧州版のANPRを行う新しいオープンソースライブラリがあります。かなり正確に見え、必要なことを正確に行う必要があります(プレート領域を認識します)。 GitHubプロジェクトは次のとおりです。 https://github.com/openalpr/openalpr

13
Derrick Johnson

Java javaANPR で記述されたこのコードに出会いました。C#ライブラリも探しています。

ビデオカメラをいくつかの帆船に向けることができるシステムが欲しいのですが、すべての帆船には大きな識別可能な番号があり、ボートを識別して、ビデオカメラを通過するときにツイートを送信します。

10
Bruce McLeod

私は数か月前にこれについていくつかのグーグルをしました。このトピックについて かなりの数の論文 がありますが、具体的なオープンソースの実装は見つかりませんでした。 多くの商用実装 がありますが、価格見積もりの​​あるものはないため、おそらくかなり高価です。

8

このシンプルな自動ナンバープレート認識システムをお試しください

http://opos.codeplex.com/

C#で書かれたオープンソース

5
Birol Kuyumcu

Java ANPR をご覧ください。無料のナンバープレート認識...

3
Ralph Wegner

高性能ANPRライブラリ- http://www.dtksoft.com/dtkanpr.php 。これは商用ですが、トライアルキーを提供します。

2
codeguru

はい、 http://jocr.sourceforge.net/ でgocrを使用しています。これは、アプリケーションから実行できるコマンドラインアプリケーションです。いくつかのアプリケーションで使用しています。

2
keyoke

http://licenseplate.sourceforge.net Python(テストしていません)

2
Somatik