我试图使用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
问题是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'))