首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pytesseract有时在完全清晰的图像上不起作用

Pytesseract有时在完全清晰的图像上不起作用
EN

Stack Overflow用户
提问于 2019-08-30 03:03:46
回答 1查看 3.7K关注 0票数 1

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

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

图1

图2

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

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-30 03:17:08

由于您的图像已经看起来干净,不需要预处理。一种简单的方法是通过阈值和高斯模糊来平滑图像,然后将其投到Pytesseract中。下面是简单处理后的结果和Pytesseract的输出

  1. 系统代码为3 3CAB,除所示外。

第二张图片

  1. 所有杂项管道和连接尺寸应为1英寸。但如所示。

我们使用--psm 6配置标志,因为我们希望将图像作为单一的统一文本块来处理。以下是一些可能有用的附加configuration flags

代码

代码语言:javascript
运行
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57719983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档