web-dev-qa-db-ja.com

テッセラクトの非常に一貫性のないOCR結果

enter image description here

これは元のスクリーンショットであり、画像を4つの部分にクロップし、画像の背景を可能な範囲までクリアしましたが、tesseractはここで最後の列のみを検出し、残りは無視します。

enter image description here

結果の処理中に削除した空白スペースがあるため、tesseractからの出力が表示されます

  Femme—Fatale.



  DaRkLoRdEIa
  aChineseN1gg4

  Noob_Diablo_

enter image description here

結果の処理中に削除した空白スペースがあるため、tesseractからの出力が表示されます

Kicked.

NosNoel
ChikiZD
Death_Eag|e_42

Chai—.

enter image description here

3579 10 1 7 148

2962 3 O 7 101

2214 2 2 7 99

2205 1 3 6 78

enter image description here

8212

7198

6307

5640

4884

15

40

40

6O

80

80

の出力をダンプしています

result = `pytesseract.image_to_string(Image.open("D:/newapproach/B&W"+str(i)+".jpg"),lang="New_Language")`

しかし、一貫した結果を得るためにここから先に進む方法がわかりません.tesseractにテキスト領域を認識させ、それをスキャンさせるために、とにかくそこにあります。トレーナー(SunnyPage)では、デフォルトの認識でtesseractがそれをスキャンします一部の領域を認識できませんが、手動で選択すると、すべてが正しく検出され、テキストに正しく変換されます

コード

9
codefreaK

使用するpsm値を決定するオプションを提供するコマンドラインを試してみました。

あなたはこれで試すことができます:

pytesseract.image_to_string(image, config='-psm 6')

あなたが提供した画像で試した結果は次のとおりです。

画像から抽出されたテキスト

私が直面している唯一の問題は、私のテッセラクト辞書があなたのイメージで提供された "1"を "" I "に解釈することです。

以下は、使用可能なpsmオプションのリストです。

pagesegmodeの値は次のとおりです。0 =方向とスクリプト検出(OSD)のみ。

1 = OSDによる自動ページ分割。

2 =自動ページ分割、ただしOSDまたはOCRなし

3 =全自動のページ分割、ただしOSDなし。 (デフォルト)

4 =可変サイズのテキストの単一の列を想定します。

5 =垂直方向に整列したテキストの単一の均一なブロックを想定します。

6 =テキストの単一の均一なブロックを想定しています。

7 =画像を単一のテキスト行として扱います。

8 =画像を1つの単語として扱います。

9 =画像を円の1つの単語として扱います。

10 =画像を単一の文字として扱います。

3
Manoj

このリンクを使用しました

https://www.howtoforge.com/tutorial/tesseract-ocr-installation-and-usage-on-ubuntu-16-04/

精度を最大50%向上させる可能性がある以下のコマンドを使用してください `

Sudo apt update

Sudo apt install tesseract-ocr

Sudo apt-get install tesseract-ocr-eng

Sudo apt-get install tesseract-ocr-all

Sudo apt install imagemagick

convert -h

tesseract [image_path] [file_name]

convert -resize 150% [input_file_path] [output_file_path]

convert [input_file_path] -type Grayscale [output_file_path]

tesseract [image_path] [file_name]

太字のみを表示します

ありがとう

1
akshat dashore
fn = 'image.png'
img = cv2.imread(fn, 0)
img = cv2.bilateralFilter(img, 20, 25, 25)
ret, th = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
# Image.fromarray(th)
print(pytesseract.image_to_string(th, lang='eng'))
0
0x01h