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识别图片验证码

Python - 开发截图识别OCR小工具

[转老马的文章]MODI中的OCR模块

python pytesseract模块,报错

UnicodeDecodeError 与 Python 中的 Tesseract OCR

Python,OpenCV中的光学字符识别(OCR Optical Character Recognition)