【问题标题】:Unable to OCR alphanumerical image with Tesseract无法使用 Tesseract 对字母数字图像进行 OCR
【发布时间】:2021-10-26 16:22:14
【问题描述】:

我正在尝试使用 pytesseract 在 python 中读取一些字母数字字符串。 我对图像进行了预处理以减少噪音并使它们变成黑白,但我一直在读取字符串中的数字时遇到问题。

原文:

清理后:

提取文本:WISOMW

使用的代码:

def convert(path):    
    image = cv2.imread(path)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    blur = cv2.GaussianBlur(gray, (3, 3), 0)
    thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
    invert = 255 - thresh
    cv2.imwrite("processed.jpg", invert)

    # Perform text extraction
    return pytesseract.image_to_string(invert, config="--psm 7")

我已经为 tesseract 尝试了不同的配置选项:

  • oem: 试过1、3
  • psm: 尝试了不同的模式
  • tessedit_char_whitelist:仅限字母数字字符

我觉得我错过了一些明显的东西,因为它可以可靠地读取字母字符。有什么想法吗?

【问题讨论】:

  • 也许如果你尝试对图像进行腐蚀,它可能会更多地分离字符,并且 Tesseract 可能有更好的机会识别它们。

标签: python tesseract python-tesseract


【解决方案1】:

你离得很近。扩张有助于增加白色/减少黑色。分辨率较低,因此使用小内核进行扩张。如果您从阈值步骤中删除 _INV,则无需再进行反演。

import cv2
import numpy as np
import pytesseract

img = cv2.imread('wis9mw.jpg', cv2.IMREAD_GRAYSCALE )

img = cv2.GaussianBlur(img, (3, 3), 0)
img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

kernel = np.ones((1,1), np.uint8)
img = cv2.dilate(img, kernel, iterations=1)

cv2.imwrite('processed.jpg', img)

text = pytesseract.image_to_string(img, config="--psm 6")
print(text)

给予

WIS9MW

【讨论】:

    猜你喜欢
    • 2020-01-25
    • 1970-01-01
    • 2015-05-10
    • 2021-03-11
    • 1970-01-01
    • 2013-05-11
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多