我有非常高分辨率的工程图纸/电路图,其中包含许多不同区域的文字。其目的是从这些图像中提取文本。
我正在使用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等)因为这是个限制。注:我已通过下面的帖子,这不是复制我的情况,因为我有黑色文本的白色背景:
发布于 2019-08-30 03:17:08
由于您的图像已经看起来干净,不需要预处理。一种简单的方法是通过阈值和高斯模糊来平滑图像,然后将其投到Pytesseract中。下面是简单处理后的结果和Pytesseract的输出
第二张图片
我们使用--psm 6
配置标志,因为我们希望将图像作为单一的统一文本块来处理。以下是一些可能有用的附加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()
https://stackoverflow.com/questions/57719983
复制相似问题