web-dev-qa-db-ja.com

車両ナンバープレートの検出に適したアルゴリズムは何ですか?

バックグラウンド

大学での最終プロジェクトでは、車両のナンバープレート検出アプリケーションを開発しています。私は自分自身を中級プログラマーと考えていますが、数学の知識には中等学校以上のものが不足しているため、適切な数式を作成するのがおそらく必要以上に難しくなります。

私は次のような学術論文を探すのにかなりの時間を費やしました。

数学に関して言えば、私は迷っています。このテストにより、さまざまなグラフィック画像が生産的であることが証明されました。たとえば:

alt text

alt text

ただし、このアプローチはその特定の画像に対してのみ有効であり、この手法を別の画像に適用すると、より悪い変換が発生するはずです。 「ボトムハット形態変換」と呼ばれる式について読んだことがありますが、これは次のことを行います。

基本的に、変換は画像のすべての暗いディテールを保持し、他のすべて(より大きな暗い領域と明るい領域を含む)を排除します。

これに関する多くの情報を見つけることはできませんが、レポートの終わり近くにあるドキュメント内の画像はその有効性を示しています。

その他の制約

  • C#での開発
  • プロジェクトを英国の登録プレートのみに限定する
  • デモンストレーションとして変換する画像を選択できます

質問

開発に焦点を当てる変換技術と、私に役立つアルゴリズムについてアドバイスが必要です。

編集: 続き-車両ナンバープレートの検出 に関する新しい情報

58
Ash

あなたが取ることができるいくつかのアプローチがありますが、頭に浮かぶ最初の戦略は次のとおりです:

  • 発見/研究:特定する必要のある色とフォントのセットを特定します。サンプル画像がほとんどの英国プレートの代表である場合、作業が簡単になります。例えば。シンプルで特異なフォントと白地に黒のレタリング
  • コード:色の大部分が白と黒である画像の長方形の領域を識別しようとします。これはひどく数学が重い問題ではなく、集中するためのナンバープレートの領域を提供する必要があります。
  • コード:純粋な黒と白(モノクロ)への変換や、おそらくニースのタイトな長方形へのスケーリング/シフトなど、サブリージョンをクリーンアップします。
  • APIを使用:次に、サブ選択された画像領域で既存のOCR(光学式文字認識)アルゴリズムを使用して、テキストを読み取れるかどうかを確認します。

私が言ったように、これは多くの戦略のうちの1つですが、必要なのは重い数学の最小量を必要とするものです...それはあなたのために働くOCR実装を見つけることができる場合です。

13
Paul Sasik

数年前にJavaで同様のプロジェクトを行いました。最初に Sobel演算子 を適用し、次にすべての画像をプレートの画像でマスクしました(Sobel演算子も適用しました)。最大の一致領域は、プレートがある場所です。次に、選択した地域にOCRを適用して、番号を取得します。

3
rodrigoap

このタスクを実行することをお勧めします。詳細な回答をお読みください こちら

  1. グレースケールに変換します。
  2. 3x3または5x5フィルターを使用したガウスぼかし。
  3. ソーベルフィルターを適用して、垂直エッジを見つけます。

    Sobel(gray, dst, -1, 1, 0)

  4. 結果のイメージをしきい値処理して、バイナリイメージを取得します。
  5. 適切な構造化要素を使用して、形態学的なクローズ操作を適用します。
  6. 結果の画像の輪郭を見つけます。
  7. 各輪郭のminAreaRectを見つけます。アスペクト比と最小および最大面積に基づいて長方形を選択します。
  8. 選択した各輪郭について、エッジ密度を見つけます。エッジ密度のしきい値を設定し、そのしきい値に違反する長方形をプレート領域として選択します。
  9. この後、いくつかの長方形が残ります。向きや適切と思われる基準に基づいて、それらをフィルタリングできます。
  10. 元の(グレースケール)画像のadaptiveThresholdの後の画像からこれらの検出された長方形部分を切り取り、OCRを適用します。
3
Abdul Fatir

英国にはすでにそれを行うシステムがあります。 10分以内にロンドンで車を見つけることができることを示したテレビ番組を見たことを思い出します(番号と車が運転していることを知っていると仮定します)。 http://en.wikipedia.org/wiki/Automatic_number_plate_recognition

1
Mircea

自動ナンバープレート認識ライブラリこのクエリ も参照できます。これにより、物事にアプローチする方法、および既存のソリューションがどのように存在するかについてのアイデアも得られます。

しかし、paulが答えたように、最初に完全な画像から長方形のナンバープレートを見つけ、それを二値化してから、利用可能なOCRライブラリを使用する必要があります(Tesseractをお勧めします)

これを参照できます link これは、長方形のプレートを見つけるのに役立ちます。 openCVライブラリを使用する必要があるので、多くの数学は必要ありませんが、はい、舞台裏で何が起こっているかについての基本的な理解は、より良い方法で問題を解決するのに役立ちます。

1
Mayank

それは、ボトムハット変換の計算方法を正確に教えてくれます(私にとっては、逆の段階的なしきい値変換のようなものです)。

最初に行うことは、膨張と収縮の2つのモルフォロジー関数を実装することです。

これを行うには、fとbが必要です。次に、見つかった最大値を保持するポイントで、画像の小さな領域で関数を計算します。

(f ⊕ b)(s, t) = max{f (s − x, t − y) + b(x, y)
|(s − x), (t − y) ∈ Df ; (x, y)∈Db}

つまり、ドメイン領域内のすべてのポイント(ポイント(s、t)を中心とする小さな長方形など)で式の最大値を取得します。

単純な擬似コードは

max = -infinity // for the point (s,t) on the image, must compute this for all points
for(x = -5 to 5)
for(y = -5 to 5)
max = Max(max, f(s - x, t - y) + b(x,y))

事実上、最大値の新しいイメージができました。

実際には非常に単純なので、それ以上難しくしないでください(領域の各ポイントにb(x、y)を追加し、どれが最大値を与えるかを見つけます)。

あなたは侵食に対して同じことを行います(上記と非常に似ています)

今、開閉は2つの構成です

最初に膨張を実行し、次に開口部の侵食を実行すると考えることができます。

最終的に元の画像からクロージングを差し引くと言うので、変換が必要です。

1

ナンバープレートの存在を検出するという問題に興味がある場合(認識とは対照的に)、画像のテキストの検出を見てください。

この質問はあなたのものに関連しています: 画像上のテキストの存在を検出するアルゴリズム

1
carlosdc

これにはサービスまたはサードパーティを使用することをお勧めします。 Open ALPRは、このサービスに非常に正確なオープンソースパッケージを提供します。

ALPRを開く- https://www.openalpr.com/

Video Open ALPRのデモ

https://www.youtube.com/watch?v=E-U_H9EbW6

または、APIを使用できます-

Macgyver Computer Vision API

https://askmacgyver.com/explore/program/license-plate-recognition/3X5D3d2k

このAPIでは、単に次のリクエストを送信します-

https://macgyver.services

ペイロードの例

{
id: "3X5D3d2k",
key: "free",
data: {
    "image_url": "https://storage.googleapis.com/marketing-files/program-markdown-assets/license-detection/license-plate.jpg",
    "country": "us",
    "numberCandidates": 2
  }
}

enter image description here

上記の画像は以下を返します-

"plate": "284FH8"
"confidence": 90.601013
1
Timothy Moody