web-dev-qa-db-ja.com

Tesseract OCRは、水平方向に整列していないさまざまなフォントサイズと文字を検出できません

私は常に明確に前処理されているこれらの価格ラベルのテキストを検出しようとしています。上に書かれたテキストは簡単に読むことができますが、価格の値を検出できません。 python bindings pytesseract を使用していますが、CLIコマンドからの読み取りも失敗します。ほとんどの場合、価格が1つまたは2つの部分を認識しようとします文字。

サンプル1:

tesseract D:\tesseract\tesseract_test_images\test.png output

そして、サンプル画像の出力はこれです。

je Beutel

13

ただし、価格を切り取って拡大し、それらが分離されて同じフォントサイズであるように見える場合、出力は問題ありません。

処理された画像(トリミングされた価格と縮小された価格):

je Beutel

1,89

多くの類似画像を検討するため、OCR tesseractを意図したとおりに機能させるにはどうすればよいですか? 編集:価格タグを追加しました:
sample2sample3sample4sample5sample6sample7

15
NONONONONO

問題は、Tesseractエンジンがこの種のテキストトポロジを読み取るように訓練されていないことです。

あなたはできる:

  • 独自のモデルをトレーニングします。特に、さまざまなトポロジ(キャラクターの位置)の画像を提供する必要があります。実際に同じ画像を使用して、キャラクターの位置を入れ替えることができます。
  • 画像をテキストのクラスターに再編成し、テセラクトを使用します。特に、セントの部分を考慮し、コマの右側に移動します。その場合、テセラクトをそのまま使用できます。関連する基準はほとんどありませんクラスターの高さ(セントと整数を区別するため)、および位置cluster(左から右に読む)。

一般に、コンピュータービジョンアルゴリズム(CNNを含む)は、画像(機能または記述子)のより高い表現を持つツールを提供しますが、特定の方法で中間結果を処理するためのロジックまたはアルゴリズムを作成できません。

あなたの場合には:

  • 「それらの文字の高さが小さい場合、セントです」、
  • 「高さと垂直方向の位置が同じ場合、コマの左側またはコマの右側のいずれかとほぼ同じ数です」.

問題は、トレーニングを通してそれを達成することは難しいことであると同時に、人間のためにアルゴリズムとしてこれを書くことは非常に簡単です。実際の実装を提供していないことで申し訳ありませんが、私のテキストは擬似コードです

TrainingTesseract2

TrainingTesseract4

深い表現と画像クラスターの教師なし学習の共同

6
Soleil

問題は、使用している画像のサイズが小さいことです。 tesseractが画像を処理するとき、「8」、「9」を考慮します'および' 'は単一の文字であるため、'3」または「8」および「」を1つの文字と「9」を別の文字として使用すると、誤った出力が生成されます。以下に示す画像はそれを説明しています。

detected contours of original(small) image

簡単な解決策は、元の画像のサイズに応じてサイズを2倍または3倍またはさらに大きくし、次に示すように各文字を個別に検出するようにtesseractに渡すことです。 (ここでサイズを2倍に増やしました)

detected contours of resized(larger) image

Bellowはシンプルなpython目的を解決するスクリプトです

import pytesseract
import cv2

img = cv2.imread('dKC6k.png')
img = cv2.resize(img, None, fx=2, fy=2)

data = pytesseract.image_to_string(img)
print(data)

検出されたテキスト:

je Beutel

89
1.

これで、必要なデータをテキストから簡単に抽出し、要件に従ってフォーマットできます。

data = data.replace('\n\n', '\n')
data = data.split('\n')

dollars = data[2].strip(',').strip('.')
cents = data[1]

print('{}.{}'.format(dollars, cents))

望ましい形式:

1.89
7