我正在开展一个涉及提取以PDF格式存储的文本科学论文的项目。对于大多数论文而言,使用PDFMiner很容易实现,但一些较旧的论文将其文本存储为大图像。本质上,扫描纸张并且图像文件(通常是PNG或JPEG)包含整个页面。
我尝试通过它的python-tesseract绑定使用Tesseract引擎,但结果非常令人失望。
在深入研究我对这个库的问题之前,我想提一下我对OCR库的建议持开放态度。似乎很少有原生的python解决方案。
Here是一个这样的图像(JPEG),我试图提取文本。我在上面链接的python-tesseract google代码页上的示例代码段中提供了确切的代码。我应该提一下,文档有点稀疏,所以我的代码中很多选项中的一个很可能配置错误。任何建议(或深入教程的链接)都将非常感激。
Here是我尝试OCR的输出。
我的问题如下:
修改 为简单起见,这是我使用的代码。
import tesseract
api = tesseract.TessBaseAPI()
api.Init(".","eng",tesseract.OEM_DEFAULT)
api.SetPageSegMode(tesseract.PSM_AUTO)
mImgFile = "eurotext.jpg"
mBuffer=open(mImgFile,"rb").read()
result = tesseract.ProcessPagesBuffer(mBuffer,len(mBuffer),api)
print "result(ProcessPagesBuffer)=",result
以下是替代代码(虽然性能似乎非常相似,但其结果未显示在此问题中。)
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()
有人可以解释这两个片段之间的差异吗?
答案 0 :(得分:12)
如果你修补一下,Tesseract对干净的输入文本非常好(就像你的例子)。一些建议:
我会回到这里查看我是否可以提供更多帮助但是加入tesseract邮件列表,他们真的很有帮助。
旁注 - 我有一些pytesseract补丁,我应该发布这些补丁来获取角色和信心和通过API的话(几个月前不可能)。如果他们可能有用,请大喊。
答案 1 :(得分:6)
第一个示例将文件作为缓冲区读取,然后将其传递给tesseract-ocr而不进行任何修改,而第二个示例将文件读取为opencv格式,然后允许您进行一些图像修改,如更改宽高比,使用cv库的灰度等。如果你想在将图像传递给tesseract之前进行图像处理,第二种方法非常有用。
是的,我是python-tesseract的所有者。如果您想提问,可以随时欢迎将问题转发给http://code.google.com/p/python-tesseract乔