Linux中的Python OCR模块?

问题描述:

我想在Linux中找到一个易于使用的OCR python模块,我发现pytesser http://code.google.com/p/pytesser/,但它包含一个.exe可执行文件。Linux中的Python OCR模块?

我试着改变了代码使用葡萄酒,它确实有效,但它太慢了,真的不是一个好主意。

是否有任何Linux的替代品,因为它易于使用?

+1

为什么关闭的问题?它肯定适用于“程序员常用的软件工具”和“编程专业特有的实用,可回答的问题”,这些问题在http://stackoverflow.com/help/on-topic – 2013-07-26 08:31:26

你可以只是包装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

+0

中定义。该代码错误,句柄。 close()'调用不存在的str.close()'。 – OneOfOne 2011-04-27 05:59:44

+0

Gotcha。我在写这篇文章的时候重写了一段,因为我有两个占用空间的'.close()'函数。不知道是否遗漏它们是不好的,但我听说Python自己清理了所有的东西。 – Blender 2011-04-27 06:01:27

+0

是的,pytesser也是类似于你的函数,它可以将tesseract可执行文件打包并获取stdout。但tessetact.exe使用临时文件,阻止我使用多线程(文件冲突) – 2011-04-27 06:58:19

除了Blender的答案,这只是执行Tesseract可执行文件,我想补充说,还有其他的OCR替代方案,也可以称为外部进程。

ABBYY COMAND在线OCR工具:http://ocr4linux.com/en:start

这不是免费的,所以值得考虑的只有正方体准确性不够好为你的任务,或者你需要更复杂的布局analisys或需要导出PDF, Word和其他文件。

更新:这里的ABBYY和正方体的准确性比较:http://www.splitbrain.org/blog/2010-06/15-linux_ocr_software_comparison

声明:我ABBYY

+0

我认为Tesseract比ABBY FineReader具有更好的准确性,因为我已经用它来数字化几百本书。 – Blender 2011-04-27 22:54:51

+1

@Blender:下面是几个引擎的比较:http://www.splitbrain.org/blog/2010-06/15-linux_ocr_software_comparison您可以看到,ABBYY一般来说准确得多,在大多数样本上都可以达到100%的准确率,但仍然有些地方比tesseract差。我的经验表明:一般而言,ABBYY确实更精确,而且(对我而言最重要的)即使没有经过培训也能很好地工作。你培训tesseract的文件?你是否还训练ABBYY或比较它? – Tomato 2011-04-28 08:34:57

+0

根本没有针对Tesseract的培训。但是我使用的是Tesseract的'svn'版本,与普通的稳定版本大不相同。 – Blender 2011-05-02 17:47:35

你应该尝试的机器学习优秀scikits.learn库工作。您可以找到两个准备运行的代码herehere

蟒蛇正方体

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() 

你有一大堆的选择这里。

其他人指出的一种方法是使用tesseract。看起来现在有一堆包装,所以最好的方法是do a quick pypi search。最常用的人这几天都:

寻找类似引擎的另一个有用的网站是alternative.to。根据他们的一些基于Linux的系统有:

  • ABBYY
  • 正方体
  • 楔形文字
  • Ocropus
  • GOCR