7

Python で Tesseract OCR を使用して画像ファイルからテキストを抽出しようとしていますが、対処方法を理解できるというエラーに直面しています。Pythonのocrでサンプル画像をテストしたので、私の環境はすべて良好です!

ここにコードがあります

from PIL import Image
import pytesseract
strs = pytesseract.image_to_string(Image.open('binarized_image.png'))

print (strs)

以下は、Eclipseコンソールから取得したエラーです

strs = pytesseract.image_to_string(Image.open('binarized_body.png'))
  File "C:\Python35x64\lib\site-packages\pytesseract\pytesseract.py", line 167, in image_to_string
    return f.read().strip()
  File "C:\Python35x64\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 20: character maps to <undefined>

Windows10でpython 3.5 x64を 使用しています

4

2 に答える 2

8

問題は、Python がコンソールのエンコーディング (CP1252) を本来の使用 (UTF-8) ではなく使用しようとしていることです。PyTesseract は Unicode 文字を発見し、現在それを CP1252 に変換しようとしていますが、これはできません。別のプラットフォームでは、UTF-8 が使用されるため、このエラーは発生しません。

別の関数を使用してみることができます (エンコーディングについて心配する必要がないようbytesに、代わりに返される可能性があります)。strコメントの1つに記載されているように、Pythonのデフォルトのエンコーディングを変更できますが、Windowsコンソールで文字列を印刷しようとすると問題が発生します。または、これが私の推奨する解決策です。Cygwin をダウンロードし、その上で python を実行して、きれいな UTF-8 出力を取得することもできます。

(まだ)何も壊さない手っ取り早い解決策が必要な場合は、次の方法を検討してください。

import builtins

original_open = open
def bin_open(filename, mode='rb'):       # note, the default mode now opens in binary
    return original_open(filename, mode)

from PIL import Image
import pytesseract

img = Image.open('binarized_image.png')

try:
    builtins.open = bin_open
    bts = pytesseract.image_to_string(img)
finally:
    builtins.open = original_open

print(str(bts, 'cp1252', 'ignore'))
于 2015-12-15T15:48:34.937 に答える