【问题标题】:Tesseract ocr output with single characters in between the detected textTesseract ocr 输出在检测到的文本之间带有单个字符
【发布时间】:2021-01-12 12:21:59
【问题描述】:

我正在尝试使用 Tesseract 从下图中提取,

text = pytesseract.image_to_string(image, config='-c preserve_interword_spaces=1 --psm 1 --oem 1')

这是 tesseract 4 ocr 的结果,

print(text)

Wrote Datastream application 
e Used Kafka to get the accounts

如果您看到图像中的项目符号点被转换为e,我在文档中发现几个这样的点在 ascii 中转换为单个字符

如果有人熟悉此类问题并有解决方案,请告诉我。

【问题讨论】:

    标签: python python-3.x ocr tesseract python-tesseract


    【解决方案1】:

    我有一个建议,也许删除项目符号会更好。

    • 删除要点的一种解决方案是应用adaptive-threshold

    • 如果我们将adaptive-threshold 应用于当前图像:

    • 现在如果我们阅读它:

      • Wrote Datastream application |
        Used Kafka to get the accounts
        
        

    代码:


    import cv2
    import pytesseract
    
    img = cv2.imread("4XMue.png")
    gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    thr = cv2.adaptiveThreshold(gry, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
                                cv2.THRESH_BINARY, 11, 131)
    txt = pytesseract.image_to_string(thr)
    print(txt)
    

    请让我告诉您,我的示例代码可能不适用于所有图像。由于图像可能具有不同的伪影或需要额外的处理。您可能需要更改adaptive-thresholdblock-sizeC 参数。因此,请先阅读adaptive-threshold

    【讨论】:

    • 但我认为,tesseract 已经使用 otsu 算法对图像进行二值化了?所以,当我们这样做两次时,不要在大而密集的文档上降低质量
    • Tesseract OCR 内部应用 Otsu 二值化方法。然而,该方法根据图像直方图选择最佳全局阈值。如果图像上有阴影,则 tesseract 将无法提取字符。 source
    • 但是如果我们这样做两次,会不会降低图像质量?
    • but if we do it twice?你的意思是两次应用OTSU阈值?如果是这样,我没有对图像应用 OTSU 阈值。如果你看看我的adaptive-threhsold 方法,我只使用了cv2.THRESH_BINARY
    • 我们正在预处理图像以从图像中去除伪影。因此,多重预处理不应该降低图像的质量。否则我们无法从图像中收集特征。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多