Python 如何使用Tesseract获取图像文本

Python 如何使用Tesseract获取图像文本,python,python-tesseract,Python,Python Tesseract,我从我的pdf中获得了这张裁剪过的图像: 在预处理之后,这就是我将其馈送给Tesseract OCR的方式 text = pytesseract.image_to_string(img, lang='eng') 但是ocr'ed文本是空的 编辑: 我加载完整的图像并将其裁剪到这个位置。一旦它被裁掉,我就用磨刀过滤器把它磨掉,然后去掉盐和胡椒 pages = convert_from_path("../data/2.pdf", fmt='JPEG',

我从我的pdf中获得了这张裁剪过的图像:

在预处理之后,这就是我将其馈送给Tesseract OCR的方式

text = pytesseract.image_to_string(img, lang='eng')
但是ocr'ed
文本
是空的

编辑:

我加载完整的图像并将其裁剪到这个位置。一旦它被裁掉,我就用磨刀过滤器把它磨掉,然后去掉盐和胡椒

pages = convert_from_path("../data/2.pdf", fmt='JPEG',
                          poppler_path=r"D:\poppler-0.68.0\bin")

reader = easyocr.Reader(['en']) # need to run only once to load model into memory
for page in pages:

      page.save('image.jpg', 'JPEG')
      image = cv2.imread('image.jpg')
        
      img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
      img = img[cord[2]:cord[3], cord[0]:cord[1]]
      kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
      img = cv2.filter2D(img, -1, kernel)
      img = cv2.medianBlur(img, 3)
      text = pytesseract.image_to_string(img)
此图像是PDF的一部分。PDF转换为jpg,然后再次加载,然后通过给出BB坐标裁剪出该部分

编辑: 使用以下示例,这是预处理后的输出:

但它打印的ocr'ed
文本
输出仍处于关闭状态:

AQ@O FCI

我有一个两步解决方案


  • 应用膨胀,然后进行腐蚀()
  • 应用阈值

现在我们为什么要先扩张,再侵蚀

正如我们所见,输入图像由每个字符周围的伪影组成。应用关闭操作将减少工件

人工制品减少了,但没有完全消失。因此,如果我们申请,结果将是:

现在图像适合阅读:

AOF CIF
代码:


导入cv2
从PyteSeract导入图像到字符串
img=cv2.imread(“7UGLJ.png”)
gry=cv2.CVT颜色(img,cv2.COLOR\u BGR2GRAY)
(h,w)=灰色形状[:2]
gry=cv2。调整大小(gry,(宽*2,高*2))
cls=cv2.形态学(gry,cv2.形态闭合,无)
thr=cv2.自适应阈值(cls,255,cv2.自适应阈值平均值,
cv2.THRESH_二进制,41,10)
txt=图像到字符串(thr)
打印(txt)

我有一个两步解决方案


  • 应用膨胀,然后进行腐蚀()
  • 应用阈值

现在我们为什么要先扩张,再侵蚀

正如我们所见,输入图像由每个字符周围的伪影组成。应用关闭操作将减少工件

人工制品减少了,但没有完全消失。因此,如果我们申请,结果将是:

现在图像适合阅读:

AOF CIF
代码:


导入cv2
从PyteSeract导入图像到字符串
img=cv2.imread(“7UGLJ.png”)
gry=cv2.CVT颜色(img,cv2.COLOR\u BGR2GRAY)
(h,w)=灰色形状[:2]
gry=cv2。调整大小(gry,(宽*2,高*2))
cls=cv2.形态学(gry,cv2.形态闭合,无)
thr=cv2.自适应阈值(cls,255,cv2.自适应阈值平均值,
cv2.THRESH_二进制,41,10)
txt=图像到字符串(thr)
打印(txt)


这个问题正在cc@GINOMEMPINY上讨论。您的代码会给您带来一个缩进错误-因此这不是您正在运行的。这对so来说不是一个好问题。你的代码是有效的——只是tesseract所做的OCR并没有达到你大脑所能做到的“标准”——这让人大吃一惊。要进行的预处理的选择高度依赖于输入-对一个图像有效的方法可能对其他图像有效,也可能对其他图像无效。Diskussing为预处理做的事情更像是一个教程,而不是这里可以/应该做的事情。我建议研究预处理图像的方法——甚至有一些更老的帖子可以做到这一点:一些其他的ocr问题可能会帮助你:。。。(谷歌:ocr dilatate侵蚀改善网站:stackoverflow.com)编辑:将斑点图像重新插入(没有这个Q是没有意义的)并修复了缩进错误(早期的修订版没有,所以可能是编辑造成的)这个问题正在cc@GINOMEMPINY上讨论。你的代码会给你一个缩进错误-所以这不是你正在运行的。这对so来说不是一个好问题。你的代码是有效的——只是tesseract所做的OCR并没有达到你大脑所能做到的“标准”——这让人大吃一惊。要进行的预处理的选择高度依赖于输入-对一个图像有效的方法可能对其他图像有效,也可能对其他图像无效。Diskussing为预处理做的事情更像是一个教程,而不是这里可以/应该做的事情。我建议研究预处理图像的方法——甚至有一些更老的帖子可以做到这一点:一些其他的ocr问题可能会帮助你:。。。(google with:ocr dilatate侵蚀改善网站:stackoverflow.com)编辑:将斑点图像重新插入(没有这个Q是没有意义的)并修复了缩进错误(早期的修订版没有,所以可能是编辑引起的)。这个问题可能是离题的,但如何选择具体的图像处理步骤来应用呢?这是一次试射吗?或者通过经验学习图像更清晰,但它不会打印任何东西你的pytesseract版本是什么?也许你应该更新'0.3.7'…。@PatrickArtner很抱歉,我希望输出
print(pytesseract.get\u tesseract\u version())
,它是4.1.1。你说得对,谢谢你的警告。下次我会更加小心。这个问题可能会偏离主题,但如何选择具体的图像处理步骤来应用呢?这是一次试射吗?或者通过经验学习图像更清晰,但它不会打印任何东西你的pytesseract版本是什么?也许你应该更新'0.3.7'…。@PatrickArtner很抱歉,我希望输出
print(pytesseract.get\u tesseract\u version())
,它是4.1.1。你说得对,谢谢你的警告。下次我会更小心的。