如何使用 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 获得图像中最大的文本?