web-dev-qa-db-ja.com

文字認識(OCRアルゴリズム)

私はOCRアルゴリズムを開発しなければならないプロジェクトに取り組んでいます(画像からテキストを読み取ってから別の言語に変換する必要があります)。したがって、最初のタスクは画像からテキストを取得することです。

最初のタスクを完了する手順。

  1. 指定されたソースから任意の画像形式(bmp、jpg、png)を読み込みます。次に、画像をグレースケールに変換し、しきい値(Otsuアルゴリズム)を使用して2値化します。 //完了(出力画像からノイズを除去する方法???)

結果

Input Image

Output Image

  1. 解像度や反転などの画像機能の検出。これにより、さらに処理するために最終的に直線化された画像に変換できます。 (画像の回転のコードを完成しましたが、画像を回転させる必要がある画像の角度を検出できませんでしたので、角度検出部で作業中です)

  2. 行の検出と削除。このステップは、ページレイアウト分析の改善、下線付きテキストの認識品質の向上、テーブルの検出などに必要です(最終的にその部分を完了することに決定)

  3. ページレイアウト分析。このステップでは、画像に存在するテキストゾーンを特定しようとしています。そのため、その部分のみが認識に使用され、残りの領域は除外されます。

  4. テキスト行と単語の検出。ここでは、異なるフォントサイズと単語間の小さなスペースにも注意する必要があります。

  5. 文字の認識。これがOCRの主要なアルゴリズムです。すべての文字の画像を適切な文字コードに変換する必要があります。このアルゴリズムは、不確かな画像に対していくつかの文字コードを生成する場合があります。たとえば、「I」文字の画像を認識すると、「I」、「|」が生成されます。 「1」、「l」コード、および最終的な文字コードは後で選択されます。

  6. 検索可能なPDF、DOC、RTF、TXTなどの選択した出力形式に結果を保存します。列、フォント、色、写真、背景など、元のページレイアウトを保存することが重要です。

だから私はpart6で助けが必要です。行検出部(n行を含む段落からn個の画像を取得)を完了しましたが、次の部分で立ち往生し、単語と文字認識を取得しています.OCRと文字認識部分に関連する良いリンクを知っているなら、投稿してくださいここに。

文字認識のために、私はasprise(Javaライブラリ)を使用することを考えています http://asprise.com/product/ocr/index.php?lang=Java

34
TLE

回転角度を検出するには、 ハフ変換 を使用します。

ノイズリダクションでは、同じ色(同様の色、許容しきい値を使用して)、近隣の平均値を使用します。

レイアウト検出の垂直ホワイトギャップを検索します。垂直ギャップに沿ってスライスします。スライスごとに、水平方向のギャップとスライスを検索します。スライスの高さが同じ(同様の)場合、行レベルになります。それ以外の場合は、行のみが残るまで、垂直/水平スライスを繰り返します。最後のステップは、縦方向のスライスです。これにより、単一の文字(または場合によっては合字)が得られます。長いスライスと狭いスライス、または短いスライスと広いスライスは線です。

文字スライスを文字ライブラリと比較します。パフォーマンスが主な関心事ではない場合は、使用するフォントを特定できるまで、異なるフォントライブラリ内の文字を見つけてください。その後、文字認識のためにそのフォントを使い続けます。

元の画像で、各文字を背景色に置き換えます。背景色は、文字の各ピクセルについて、文字の一部ではないピクセルを補間することによって決定されます。これにより、背景画像があります。

18
nibra

あなたは大津法の代わりに適応閾値を使用すべきです。 参考になると思います。 SPIE08.pdf このメソッドは、ノイズを自動的に除去します。

5
Stupi

文字認識部分については、 Tesseract を調べてください。

3
Engineero

Potraceを使用してノイズを減らすことができます。指定された画像(bmp)をベクトル化し、svg、pdfおよびその他の形式に変換します。

http://potrace.sourceforge.net/potrace.html

1
Magesh Vs