我正在尝试使用teseract-OCR在python中对图像文件进行OCR。 我的环境是 - Windows机器上的Python 3.5 Anaconda。
以下是代码:
dt2[dt1, .(sum = sum(Value)), on=.(ID, Date3>=Date1, Date3<=Date2), by=.EACHI]
# ID Date3 Date3 sum
# 1: 1 2016-03-01 2016-04-01 5
# 2: 1 2016-04-01 2016-05-01 14
# 3: 2 2016-03-14 2016-04-15 17
# 4: 2 2016-04-15 2016-05-17 2
# 5: 3 2016-05-01 2016-06-10 14
# 6: 3 2016-06-10 2016-07-15 3
我得到的错误是:
from PIL import Image
from pytesseract import image_to_string
out = image_to_string(Image.open('sample.png'))
我尝试了提到的解决方案current development version 黑客行不通
我在Mac OS上尝试了我的代码它正在运行。
我研究了pytesseract问题: 这是here
由于
答案 0 :(得分:2)
“latin1”有点像“无操作”编解码器,有时在Python中用于简单地将字节序列转换为unicode字符串(Python 3.x中的默认字符串)。编解码器“cp1252”几乎相同,在某些情况下它可以与latin1互换使用 - 但这个“\ x81”代码是两者之间的一个区别。在你的情况下,一个关键的。
正确的做法是尝试为image_to_string
函数提供可选的lang
参数 - 以便它可以使用正确的编解码器来解码您的文本 - 如果它能更好地识别出什么是它暴露的字符为“0x81”。但是,这可能不起作用 - 因为它可能仅仅是一个与语言无关的非常奇怪的角色的OCR错误。
所以,你的解决方法是monkeypatch“cp1252”编解码器,这样它就会填充一个Unicode“无法识别的”字符而不是错误 - 一种方法是在调用tesseract之前使这些行符合:
from encodings import cp1252
original_decode = cp1252.Codec.decode
cp1252.Codec.decode = lambda self, input, errors="replace": original_decode(self, input, errors)
但是,如果可以的话,请打开针对pytesseract项目的错误报告。我的猜测是他们应该使用“latin1”而不是“cp1252”编码。