Pytesseract 有时无法处理完全清晰的图像

Pytesseract not working sometimes on perfectly clear Images

我有非常高分辨率的工程 drawings/Circuit 图表,其中包含许多不同区域的文本。目的是从此类图像中提取文本。

我正在使用 pytesseract 来完成这项任务。直接应用 pytesseract 是不可能的,因为在这种情况下,来自不同区域的文本会在输出中混乱。因此,我正在识别包含文本的不同边界框,然后将这些区域迭代传递给 pytesseract。边界框逻辑工作正常,但有时我从裁剪后的图像或部分文本中得不到任何文本。如果裁剪后的图像分辨率低或模糊,我会理解,但事实并非如此。请查看随附的两个示例。

图片 1

图 2

这是我获取文本的代码:

source_img_simple = cv2.imread('image_name.tif')
source_img_simple_gray = cv2.cvtColor(source_img_simple, cv2.COLOR_BGR2GRAY)
img_text = pytesseract.image_to_string(source_img_simple_gray)

# Export the text file
with open('Output_OCR.txt', 'w') as text:
    text.write(img_text)

第一张图片的实际结果 - 无输出(空白文本文件) 对于第二张图片-部分文字(所有杂项管道和连接尺寸) 我想知道如何提高 OCR 的质量。如果需要,我也愿意使用任何其他工具(除了 pytesseract)。但不能使用 API 的(Google、AWS 等),因为这是一个限制。注意:我已经完成了下面的 post 并且它不是我的案例的重复,因为我在白色背景上有黑色文本:

Pytesseract dont reconize a very clear image

由于您的图像看起来已经很干净,因此不需要进行任何预处理。一种简单的方法是在将图像放入 Pytesseract 之前对图像进行阈值和高斯模糊以平滑图像。这是简单处理后的结果和 Pytesseract

的输出

  1. SYSTEM CODE IS 3CAB, EXCEPT AS INDICATED.

对于第二张图片

  1. ALL MISCELLANEOUS PIPING AND CONNECTION SIZES SHALL BE 1 INCH. EXCEPT AS INDICATED.

我们使用 --psm 6 配置标志,因为我们希望将图像视为单个统一的文本块。这里还有一些可能有用的

代码

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

image = cv2.imread('2.jpg',0)
thresh = cv2.threshold(image, 150, 255, cv2.THRESH_BINARY_INV)[1]

result = cv2.GaussianBlur(thresh, (5,5), 0)
result = 255 - result

data = pytesseract.image_to_string(result, lang='eng',config='--psm 6')
print(data)

cv2.imshow('thresh', thresh)
cv2.imshow('result', result)
cv2.waitKey()