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