当前位置:  开发笔记 > 编程语言 > 正文

Python中使用Tesseract OCR的UnicodeDecodeError

如何解决《Python中使用TesseractOCR的UnicodeDecodeError》经验,为你挑选了1个好方法。

我试图使用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 

我在Windows10上 使用python 3.5 x64



1> randomuserna..:

问题是python试图使用控制台的编码(CP1252)而不是它的意思(UTF-8).PyTesseract找到了一个unicode字符,现在正在尝试将其转换为CP1252,这是它无法做到的.在另一个平台上,您不会遇到此错误,因为它将使用UTF-8.

您可以尝试使用不同的函数(可能是一个返回bytes而不是str因此您不必担心编码).你可以改变蟒蛇的默认编码作为一个评论提到,尽管当你去尝试,并打印在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'))

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有