Pytesseract有时对非常清晰的图像不起作用

2024-05-16 09:50:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有非常高分辨率的工程图纸/电路图,其中包含许多不同区域的文本。其目的是从这些图像中提取文本。在

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

图片1

enter image description here

图像2

enter image description here

以下是我获取文本的代码:

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等),因为这是一个限制。注:我已经看过下面的帖子,它不是我的案件的副本,因为我有白底黑字:

Pytesseract dont reconize a very clear image


Tags: text图像image文本区域sourceimgsimple
1条回答
网友
1楼 · 发布于 2024-05-16 09:50:07

因为你的图像看起来已经很干净了,所以不需要进行预处理。一种简单的方法是在将图像放入Pytesseract之前先对图像进行阈值和高斯模糊平滑处理。下面是简单处理后的结果和Pytesseract的输出

enter image description here

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

对于第二张图片

enter image description here

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

我们使用 psm 6config标志,因为我们希望将图像视为单个统一的文本块。这里有一些附加的configuration flags可能有用

代码

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()

相关问题 更多 >