web-dev-qa-db-ja.com

画像からテキストを読む

これらの画像をテキストに変換するための提案はありますか?私はpytesseractを使用していますが、これを除いてほとんどの場合、うまく機能しています。理想的には、これらの数字を正確に読みます。最悪の場合、PILを使用して、「/」の左側の数値がゼロかどうかを判断できます。左から始めて、最初の白いピクセルを見つけてから、

enter image description hereenter image description here

from PIL import Image
from pytesseract import image_to_string

myText = image_to_string(Image.open("tmp/test.jpg"),config='-psm 10')
myText = image_to_string(Image.open("tmp/test.jpg"))

真ん中のスラッシュはここで問題を引き起こします。また、PILの「.paste」を使用して、画像の周囲に黒を追加してみました。私が試すことができる他のいくつかのPILトリックがあるかもしれませんが、私がしなければならない場合を除いて、私はむしろそのルートに行きたくありません。

Config = '-psm 10'を使用してみましたが、8が「:」として表示されることもあれば、ランダムな文字が表示されることもありました。そして、私の0は何もないものとしてやって来ていました。

参照先: pytesseractは1桁の画像では機能しません -psm10の場合

_____________ EDIT _______________追加のサンプル:

enter image description here 1BJ2I]

enter image description here DIS

enter image description here 10.I'10

enter image description here 20.I20

だから私は今のところ機能しているように見えるいくつかのブードゥー変換を行っています。しかし、非常にエラーが発生しやすいように見えます。

def ConvertPPTextToReadableNumbers(text):
    text = RemoveNonASCIICharacters(text)
    text = text.replace("I]", "0")
    text = text.replace("|]", "0")
    text = text.replace("l]", "0")
    text = text.replace("B", "8")
    text = text.replace("D", "0")
    text = text.replace("S", "5")
    text = text.replace(".I'", "/")
    text = text.replace(".I", "/")
    text = text.replace("I'", "/")
    text = text.replace("J", "/")
    return text

最終的に生成します:

ConvertPPTextToReadableNumbers return text =  18/20
ConvertPPTextToReadableNumbers return text =  0/5
ConvertPPTextToReadableNumbers return text =  10/10
ConvertPPTextToReadableNumbers return text =  20/20
7
LampShade

一般的に、ほとんどのOCRツール(Tesseractなど)は、印刷されたテキストの高解像度スキャンを処理するように調整されています。これらは、低解像度またはピクセル化された画像ではうまく機能しません。

ここで考えられる2つのアプローチは次のとおりです。

  1. 画像のフォント、背景、レイアウトが完全に予測可能な場合は、Tesseractはまったく必要ありません。それは問題を複雑にしているだけです。認識する必要のある各文字を表す画像のライブラリを作成し、 画像の一部が参照画像と等しいかどうかを確認します

  2. それがオプションではない場合、または難しすぎると思われる場合は、 hq * xアルゴリズム のいずれかを使用してピクセル化された画像をアップスケールできます。追加された詳細は、Tesseractに文字を確実に認識させるのに十分な場合があります。

4