Pytesseract有时无法在完全清晰的图像上工作

时间:2019-08-30 03:03:46

标签: python image-processing ocr tesseract python-tesseract

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

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

图片1

enter image description here

图片2

enter image description here

这是我获取文本的代码:

    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
        <table width="90%">
        <tr>
            <td width="20%"><b>Factory Name</b></td>
            <td width="50%"><input type="text" onkeyup="this.value = this.value.toUpperCase();" class="form-control" name="Fac_ID" required></td>
        </tr>
    </table>
        <br>
        <input type="submit" name="Submit" value="Add" class="btn btn-primary btn-block" onclick="return confirm('Do you want to add this factory?');">
    </form>

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

Pytesseract dont reconize a very clear image

1 个答案:

答案 0 :(得分:0)

由于图像已经看起来很干净,因此无需进行预处理。一种简单的方法是在将图像丢入Pytesseract之前对阈值和高斯模糊进行平滑处理。这是经过简单处理的结果以及Pytesseract的输出

enter image description here

  
      
  1. 系统代码为3CAB,除非另有说明。
  2.   

对于第二张图片

enter image description here

  
      
  1. 所有其他管道和连接尺寸   应为1英寸。除非另有说明。
  2.   

我们使用--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()