Tesseractocrを使用して画像からテキストを抽出しています。ドキュメントの構造を維持することは私にとって非常に重要です。現在、正八胞体は構造を保持していません。実際、テキストの順序を変更しています。私の入力は下の画像です。
私が得ている出力は次のとおりです。
Someto the left
Someto the left
Some in the middle
Some in the middle
Some with some tab
Some with some tab
Some with some space between them
Some with some space between them
Sometext here
Sometext here
this much
this much
画像内の同じ構造の目的の出力を取得するにはどうすればよいですか?
つまり、次のようになります。
Some text here
Some text here
Some to the left
Some to the left
Some in the middle
Some in the middle
Some with some tab
Some with some tab
Some with some space between them this much
Some with some space between them this much
新しいバージョンのtesseract(3.04)には、preserve_interword_spaces
というオプションがあり、これで必要な処理を実行できます。
Tesseractが単語間で検出するスペースの数は、類似した行間で常に同じであるとは限らないことに注意してください。したがって、(例のように)前にスペースが並んでいる単語は、この方法で出力されない場合があります。preserve_interword_spaces
オプションは、特別なことを何もしようとせず、見つかったスペースの抽出を保持するだけです。 。デフォルトでは、正八胞体はスペースの実行を1つにまとめます。
このオプションの詳細は ここ です。
唯一の信頼できる方法は、hOCR出力を有効にして解析することです。元の画像と同様に、ページ上の各単語の位置がピクセル単位で含まれます。
これを行うには、Tesseractの構成ファイルまたは使用するAPIでtessedit_create_hocr 1
を指定します。
hOCRはHTMLのサブセットであり、Tesseractが生成するものが常に有効なXMLであるとは限らないため、HTMLパーサーを使用することも、独自に作成することもできますが、XMLパーサーを確実に使用することはできません。
Tesseractコードは、出力のスペースを圧縮します。それらを保持するには、コードを変更する必要があります。 Tesseract-スペースとタブのあいまいさ 投稿を参照してください。
連続したテキストの単一の列を保持したい複数列のドキュメント(たとえば、列1、次に列2を読む)または写真付きのドキュメント(たとえば、新聞記事)の場合、ページのセグメンテーション方法を調整することを検討する価値があります。 tesseractを使用したデフォルトのページセグメンテーション方法は、「自動ページセグメンテーション」のみを実行し、「方向とスクリプトの検出(OSD)」は実行しません。
psm
設定を1にすると、tesseractは「OSDによる自動ページセグメンテーション」を使用するように指示されます。これにより、tesseractは(ページを単一のテキストブロックとして扱うのではなく)複数列のドキュメントを認識できるようになり、写真のような非テキストブロックをOCRしようとするのを回避できます。
ページのセグメンテーション方法の詳細については、以下を参照してください: https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality
これは、ページのセグメンテーション方法を調整するためのコマンドライン構文のサンプルです。
tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]
構文の詳細については、以下を参照してください: https://github.com/tesseract-ocr/tesseract/wiki
私の場合、--psm 6
オプションの追加は機能します(コマンドライン)