我正在处理一个项目,需要从存储为PDF格式的科学论文中提取文本。对于大多数论文,使用PDFMiner很容易完成,但一些旧的论文将它们的文本存储为大图像。实质上,一篇论文被扫描并且该图像文件(通常是PNG或JPEG)组成整个页面。
我尝试使用Tesseract引擎通过其python-tesseract绑定,但结果令人失望。
在深入研究我对这个库的问题之前,我想提到我对OCR库的建议持开放态度。似乎很少有原生的Python解决方案。 此处是我正在尝试提取文本的一个这样的图像(JPEG)。我使用了我链接到的python-tesseract谷歌代码页面上的示例片段中提供的确切代码。我应该提到文档有点稀少,所以我的代码中的许多选项可能配置不正确。任何建议(或深入教程的链接)都将不胜感激。
我尝试使用Tesseract引擎通过其python-tesseract绑定,但结果令人失望。
在深入研究我对这个库的问题之前,我想提到我对OCR库的建议持开放态度。似乎很少有原生的Python解决方案。 此处是我正在尝试提取文本的一个这样的图像(JPEG)。我使用了我链接到的python-tesseract谷歌代码页面上的示例片段中提供的确切代码。我应该提到文档有点稀少,所以我的代码中的许多选项可能配置不正确。任何建议(或深入教程的链接)都将不胜感激。
这里是我尝试OCR的输出结果。
我的问题如下:
- 我使用的代码是否存在不足之处?有更好的方法吗?也许可以使用其他库?
- 我可以进行哪些预处理来提高检测效果?这些图像都是黑白的,但是我应该设置一个阈值,并将其上方的所有内容设置为单值黑色,并将其下方的所有内容设置为空值白色吗?还有其他什么方法吗?
- 更具体的问题:通过对单词执行OCR可以提高性能吗?如果可以,有人可以建议一种在图像文件(例如上面链接的文件)中定界单词并将其提取到单独的图像中以便独立处理的方法吗?
- PDF页面图像中嵌入的图形和其他图像是否会干扰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()
请问有人能解释一下这两个片段之间的区别吗?