Linux中的Python OCR模块?
Posted
技术标签:
【中文标题】Linux中的Python OCR模块?【英文标题】:Python OCR Module in Linux? 【发布时间】:2011-08-13 14:02:12 【问题描述】:我想在linux中找一个好用的OCR python模块,我找到了pytesserhttp://code.google.com/p/pytesser/,但是里面包含一个.exe可执行文件。
我尝试将代码更改为使用wine,它确实有效,但是它太慢了,真的不是一个好主意。
有没有像它一样易于使用的 Linux 替代品?
【问题讨论】:
为什么要结束这个问题?它肯定适合***.com/help/on-topic中定义的“程序员常用的软件工具”和“编程行业特有的实用、可回答的问题”。 【参考方案1】:您可以将tesseract
包装在一个函数中:
import os
import tempfile
import subprocess
def ocr(path):
temp = tempfile.NamedTemporaryFile(delete=False)
process = subprocess.Popen(['tesseract', path, temp.name], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
process.communicate()
with open(temp.name + '.txt', 'r') as handle:
contents = handle.read()
os.remove(temp.name + '.txt')
os.remove(temp.name)
return contents
如果您想要文档分割和更高级的功能,请尝试OCRopus。
【讨论】:
该代码错误,handle.close()
调用了不存在的str.close()
。
明白了。我在写这篇文章的时候重新写了一点,因为我有两个 .close()
函数占用了空间。不确定省略它们是否不好,但我听说 Python 会自行清理所有内容。
是的,pytesser 也类似于您的函数,它可以对 tesseract 可执行文件进行外壳处理并获取标准输出。但是 tessetact.exe 使用了一个临时文件,阻止我使用多线程(文件冲突)
嗯,你会如何多线程? Tesseract 不支持它(AFAICT,但 Tesseract 的 svn 版本通过它的布局分析为我创造了奇迹),并且由于我使用临时文件,它是唯一的并且不会冲突。
@david_adler: ocr('path/to/your/image.png')
?【参考方案2】:
除了 Blender 的回答,它只是执行 Tesseract 可执行文件,我想补充一点,OCR 存在其他替代方案,也可以称为外部进程。
ABBYY 命令行 OCR 实用程序:http://ocr4linux.com/en:start
它不是免费的,所以只有在 Tesseract 精度不足以满足您的任务,或者您需要更复杂的布局分析或需要导出 PDF、Word 和其他文件时才值得考虑。
更新:这里是 ABBYY 和 tesseract 精度的比较:http://www.splitbrain.org/blog/2010-06/15-linux_ocr_software_comparison
免责声明:我为 ABBYY 工作
【讨论】:
我认为 Tesseract 比 ABBY FineReader 具有更好的准确性,因为我已经使用这两种方法对数百本书进行了数字化。 @Blender:以下是几个引擎的比较:splitbrain.org/blog/2010-06/15-linux_ocr_software_comparison 你可以看到 ABBYY 总体上要准确得多,在大多数样本上都可以达到 100% 的准确度,但仍有一些地方更差比正方体。我的经验也一样:总的来说,ABBYY 确实更准确,而且(对我来说最重要的是)即使没有经过培训也能很好地工作。您是否为文档训练了 tesseract?您是否也训练过 ABBYY 或与原样进行比较? 完全没有针对 Tesseract 的培训。但我使用的是svn
版本的 Tesseract,这与正常的稳定版本有很大不同。
我用这些图片测试了tesseract
,它只有2个字符与原始字符不同。 ABBYY 可以很好地处理打印文本,但对于我拍照的粗暴打字文本,Tesseract 的效果要好一些。除此之外,我没有钱买 ABBYY ;)【参考方案3】:
python 正方体
http://code.google.com/p/python-tesseract
import cv2.cv as cv
import tesseract
api = tesseract.TessBaseAPI()
api.Init(".","eng",tesseract.OEM_DEFAULT)
api.SetPageSegMode(tesseract.PSM_AUTO)
image=cv.LoadImage("eurotext.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
tesseract.SetCvImage(image,api)
text=api.GetUTF8Text()
conf=api.MeanTextConf()
【讨论】:
【参考方案4】:您应该尝试用于机器学习的优秀 scikits.learn 库。您可以找到两个可以运行的代码here 和here。
【讨论】:
【参考方案5】:这里有很多选择。
正如其他人指出的那样,一种方法是使用 tesseract。看起来现在有一堆包装器,所以最好的方法是do a quick pypi search。这些天最常用的是:
pytesseract pytesser tesserwrap pyocr另一个查找类似引擎的有用站点是alternative.to。根据他们的说法,一些基于 linux 的系统是:
ABBYY Tesseract CueiForm 章鱼 GOCR【讨论】:
以上是关于Linux中的Python OCR模块?的主要内容,如果未能解决你的问题,请参考以下文章
python+selenium+Tesseract-OCR识别图片验证码