13

プロジェクトのゲーム ボードから文字を抽出しようとしています。現在、ゲーム ボードを検出し、それを個々の正方形に分割し、すべての正方形の画像を抽出できます。

私が得ている入力は次のようなものです(これらは個々の文字です):

ここに画像の説明を入力ここに画像の説明を入力ここに画像の説明を入力ここに画像の説明を入力ここに画像の説明を入力ここに画像の説明を入力

最初は、画像ごとの黒いピクセルの数を数え、それをさまざまな文字を識別する方法として使用していました。これは、制御された入力画像ではある程度うまくいきました。ただし、私が抱えている問題は、これらとわずかに異なる画像に対してこれを機能させることができないことです。

トレーニングに使用する各文字のサンプルが約 5 つありますが、これで十分なはずです。

これに使用するのに適したアルゴリズムを知っている人はいますか?

私のアイデアは(画像を正規化した後):

  • 画像とすべての文字画像の違いを数えて、どれが最小量のエラーを生成するかを確認します。ただし、これは大規模なデータセットでは機能しません。
  • コーナーの検出と相対位置の比較。
  • ???

どんな助けでも大歓迎です!

4

7 に答える 7

14

これはある種の教師あり学習だと思います。画像に対していくつかの特徴抽出を行い、各画像に対して計算した特徴ベクトルに基づいて分類を行う必要があります。

特徴抽出

一見すると、その特徴抽出部分はHu-Momentsの良いシナリオのように見えます。画像のモーメントを計算し、これらからcv::HuMomentsを計算します。次に、7 次元の実数値特徴空間 (画像ごとに 1 つの特徴ベクトル) があります。または、この手順を省略して、各ピクセル値を個別の特徴として使用することもできます。この回答の提案はこの方向に進んでいると思いますが、特徴空間の次元を減らすために PCA 圧縮を追加します。

分類

分類部分に関しては、好きなほとんどすべての分類アルゴリズムを使用できます。文字ごとに SVM を使用したり (バイナリのはい/いいえ分類)、NaiveBayes (可能性のある最大の文字) を使用したり、k-NearestNeighbor (kNN、特徴空間での最小空間距離) アプローチを使用したりできます。例えばフラン

特に距離ベースの分類器 (kNN など) の場合は、特徴空間の正規化を検討する必要があります (たとえば、すべての次元値をユークリッド距離の特定の範囲にスケーリングするか、マハラノビス距離などを使用します)。これは、分類プロセスで値の差が大きい特徴を過剰に表すことを避けるためです。

評価

もちろん、正しい文字が与えられた画像の特徴ベクトルであるトレーニングデータが必要です。そして、プロセスを評価するためのプロセス (クロス検証など)。


この場合、テンプレート マッチングも参照してください。この場合、トレーニング セットで利用可能なパターンを使用して候補画像を畳み込みます。出力画像の高い値は、パターンがその位置にある可能性が高いことを示しています。

于 2012-04-04T20:55:28.047 に答える
5

これは認識の問題です。私は個人的にPCAと機械学習技術(おそらくSVM)を組み合わせて使用​​します。これらはかなり大きなトピックなので、あまり詳しく説明することはできませんが、非常に基本的なプロセスは次のとおりです。

  1. トレーニング画像を収集します(1文字に複数の画像を収集しますが、気が狂うことはありません)
  2. それらにラベルを付けます(多くのことを意味する可能性があります。この場合、文字を論理グループにグループ化することを意味します-すべてのA画像-> 1、すべてのB画像-> 2など)
  3. 分類器をトレーニングする
    • PCA分解を介してすべてを実行します
    • すべてのトレーニング画像をPCA空間に投影します
    • 投影された画像をSVMで実行します(1クラスの分類器の場合は、一度に1つずつ実行します。それ以外の場合は、一度にすべて実行します)。
    • PCA固有ベクトルとSVMトレーニングデータを保存します
  4. 実行認識
    • PCAスペースにロードします
    • SVMトレーニングデータをロードします
    • 新しい画像ごとに、それをPCA空間に投影し、SVMに分類を依頼します。
    • 答え(数字)を取得したら、それを文字にマップし直します(1-> A、2-> Bなど)。
于 2012-04-04T20:28:36.837 に答える
4
于 2012-04-04T21:02:09.473 に答える
3

私は数日前に同様の問題を抱えていました。しかし、それは数字の認識でした。アルファベット用ではありません。

そして、OpenCV で kNearestNeighbour を使用して、このための単純な OCR を実装しました。

以下はリンクとコードです:

OpenCV-Python での単純な数字認識 OCR

アルファベット用に実装します。それがうまくいくことを願っています。

于 2012-04-05T05:42:42.633 に答える
1

トレーニング データ (1 秒、2 秒、3 秒、....9 秒の最大 50 枚の画像) をdemo.nanonets.ai (無料で使用できます)にアップロードして、モデルの構築を試すことができます。

1) ここにトレーニング データをアップロードします。

demo.nanonets.ai

2) 次に、次の (Python コード) を使用して API をクエリします。

import requests
import json
import urllib
model_name = "Enter-Your-Model-Name-Here"
url = "http://images.clipartpanda.com/number-one-clipart-847-blue-number-one-clip-art.png"
files = {'uploadfile': urllib.urlopen(url).read()}
url = "http://demo.nanonets.ai/classify/?appId="+model_name
r = requests.post(url, files=files)
print json.loads(r.content)

3) 応答は次のようになります。

{
  "message": "Model trained",
  "result": [
    {
      "label": "1",
      "probability": 0.95
    },
    {
      "label": "2",
      "probability": 0.01
    },

     ....

    {
      "label": "9",
      "probability": 0.005
    }
  ]
}
于 2016-12-13T11:33:34.150 に答える
0

OCRに関連するこれら2つの回答を見てください

OpenCV を使用したスコアボードの数字認識

そしてここ

スクリーンショットからの低解像度テキストの OCR

于 2012-04-05T05:38:08.717 に答える