使用Python进行外语文字提取的Pytesseract

12

我正在使用Python 2.7,Pytesseract-0.1.7和Tesseract-ocr 3.05.01在Windows机器上。

我尝试提取韩语和俄语的文本,并且我相信我已经成功提取了。

现在我需要将其与从图像中提取的字符串进行比较。

但我无法对这些字符串进行比较,并得到正确的结果,它只是显示不匹配。

这是我的代码:

# -*- coding: utf-8 -*-
from PIL import Image
import pytesseract
import argparse
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--input", required=True, help="path to the image")
args = vars(ap.parse_args())
img = Image.open(args["input"])
img.load()
text = pytesseract.image_to_string(img)
print(text)
text = text.encode('ascii')
print(text)
i = 'Сред. Скорость'
print i
if ( text == i):
    print "Match"
else :
    print "Not Match"

附上了用于提取文本的图像。

现在我需要一种匹配它的方法。而且我还需要知道从pytesseract提取的字符串是否为Unicode,如果有将其转换为Unicode的方法(就像我们在Wordpad中将字符转换成Unicode的选项一样)。

俄语文本图像


我不知道在提取俄语时是否做错了什么。比如,我需要提及我正在提取的文本类型吗? - Deepan Raj
1
没有图像。如果在文件顶部(coding行下面)包含from __future__ import print_function,那么这将帮助您一致地使用print函数。现在,print(text)是一个print语句,后跟具有非功能括号的text - Anthon
抱歉,现在我已经更新了帖子并添加了图片。 - Deepan Raj
1个回答

24

如果您正在使用Tesseract进行非英语语言的识别,请先确保已安装相应语言的学习数据集,具体操作可以参考这里(仅适用于Linux系统)。

另外,如果您需要处理非ASCII语言(例如斯洛文尼亚语),我强烈建议您切换到Python 3。因为Python 3自带Unicode编码支持,可以避免在字符串编码和解码方面的繁琐操作。

# python3 obligatory !!!    
from PIL import Image
import pytesseract

img = Image.open("T9esw.png")
img.load()
text = pytesseract.image_to_string(img, lang="rus")  #Specify language to look after!
print(text)
i = 'Сред. Скорость'
print(i)
if (text == i):
    print("Match")
else :
    print("Not Match")

输出结果为:

Фред скорасть
Сред. Скорость
Not Match

这意味着这些单词并不完全匹配,但是考虑到编码工作的最小量和输入图像的糟糕质量,我认为表现相当惊人。无论如何,这个例子显示编码和解码不再是问题。


好的,这与您原来的编码解码问题完全无关。如果库只能识别ASCII字符并强制使用这些字符,则Python级别的编码和解码都无法帮助。 - Marjan Moderc
这只是表明你还没有转换到Python 3。在上面,您可以找到解决您问题的精炼答案。如先前所述,请确保使用Python3。使用Anaconda或其他虚拟环境切换非常容易。 - Marjan Moderc
我尝试了不同的图像和不同的语言。对于英语没有问题,但是对于其他语言仍然面临上述问题。 - Deepan Raj
Marjan Moderc - 请问您使用的是哪个 Python 版本和 Tesseract-OCR 版本?我的意思是我尝试过 Python 3.6.1 和 Tesseract-OCR 3.05.01 ... 我提取的文本是这样的“???? ???????”,我已经指定了俄语语言。 - Deepan Raj
2
这一切都与系统编码有关。Tesseract计算一切都没问题,但Windows无法正确显示它。看看你的窗口IDE的编码是什么,并尝试将其设置为类似utf8的编码,这样在Windows上也应该能正常运行! - Marjan Moderc
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接