如何使用 Tesseract 获取图像文本 [关闭]

Posted

技术标签:

【中文标题】如何使用 Tesseract 获取图像文本 [关闭]【英文标题】:How to get text of image using Tesseract [closed] 【发布时间】:2021-05-01 03:15:45 【问题描述】:

我从我的 pdf 中得到这个裁剪的图像:

在预处理之后,这就是我将它提供给 Tesseract OCR 的方式

text = pytesseract.image_to_string(img, lang='eng')

但是 ocr'ed text 是空的。

编辑:

我加载完整图像并将其裁剪为此。裁剪后,我对其应用锐化滤镜,然后去除盐和胡椒

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 text 输出仍然关闭:

AQ@O FCI

【问题讨论】:

这个问题正在Meta Stack Overflow cc @GinoMempin 上讨论 你的代码会给你一个 IndentationError - 所以这不是你正在运行的。 这对 SO 来说真的不是一个好问题。您的代码有效 - 只是 tesseract 完成的 OCR 并没有达到您的大脑可以做的“标准” - 大惊喜。要进行的预处理的选择高度依赖于输入 - 对一张图像有效的方法可能适用于其他图像,也可能不适用于其他图像。讨论预处理要做的事情更像是一个教程,而不是可以/应该在这里完成的事情。我建议研究预处理图像方法 - 甚至还有更早的帖子这样做:tesseract ocr 其他一些可能对您有所帮助的 ocr 问题:***.com/questions/54940022/…,***.com/questions/60624019/…,***.com/questions/64099248/…,***.com/questions/9480013/…,...(谷歌与:ocr dilatate erode 改进网站: ***.com) 已编辑:重新包含斑点图像(没有此 Q 没有意义)并修复了 IndentationError(早期版本没有它 - 所以可能是由编辑引起的) 【参考方案1】:

我有一个两步解决方案


    先膨胀再腐蚀 (Closing)
    应用阈值。

现在我们为什么要先膨胀再腐蚀?

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

文物减少了,但并未完全消失。因此,如果我们申请adaptive-threshold,结果将是:

现在图片适合阅读了:

AOF CIF

代码:


import cv2
from pytesseract import image_to_string

img = cv2.imread("7UGLJ.png")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
(h, w) = gry.shape[:2]
gry = cv2.resize(gry, (w*2, h*2))
cls = cv2.morphologyEx(gry, cv2.MORPH_CLOSE, None)
thr = cv2.adaptiveThreshold(cls, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
                            cv2.THRESH_BINARY, 41, 10)
txt = image_to_string(thr)
print(txt)

【讨论】:

这个问题可能跑题了,但是如何选择特定的图像处理步骤来应用呢?是命中和审判吗?或通过经验学习 图像更清晰,但没有打印出来 你的 pytesseract 版本是什么?也许你应该更新 '0.3.7' ....... @PatrickArtner 对不起,我期待的输出为 print(pytesseract.get_tesseract_version()),即 4.1.1。你是对的,谢谢你的警告。下次我会更小心的。

以上是关于如何使用 Tesseract 获取图像文本 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 Tesseract 上获取文本方向 - Python API

Tesseract,openCV,python:如何获取句子或同一行文本的边界框?

如何在 Python 中使用 tesseract 获得图像中最大的文本?

从图像 iPhone SDK 中读取文本 [关闭]

如何使用 openCV 或 OCR tesseract 从图像中提取文本? [复制]

如何使用tesseract ocr仅在图像中提取蓝色文本