python-3.x - Pytesseract 混淆了零 ('0' )和大写 O ('O' )

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

我正在使用基于 Python 的 OCR (Pytesseract) 来读取图像作为 PDF 的一部分,以从中提取某些 ISIN 值。在某些情况下,OCR 算法将零 (0) 读作字母“O”。
我得到的输出是:

IEOOBQZJ1775 mULeyN USD Unhedged Accumulation
预期的输出是:
IE00BQZJ1775 mULeyN USD Unhedged Accumulation
负责此的代码块是:
import pytesseract 
from PIL import Image
import cv2

img = Image.open('out.jpg')
new_image = cv2.bitwise_not(img)
new_image = cv2.resize(new_image, (0,0), fx=1.5, fy=1.5)


target = pytesseract.image_to_string(new_image, lang='eng', config='--psm 7 --oem 3')
我尝试了不同的 --oem 和不同的 --psm,但问题仍然存在。任何见解都将非常有帮助。通过 Opencv 进行图像预处理的任何可能有助于检测的东西。
enter image description here

最佳答案

对于ISIN,可能你可以利用它的结构来验证它的有效性。根据wikipedia页,ISIN 由

  • 发行国的两个字母字符
  • 九个字母数字字符 NSIN,必要时用前导零填充
  • 使用“Luhn 算法”
  • 计算的一个数字校验位

    至少,通过校验位,我们可以判断 OCR 是否成功,并可能更正它。当然,tesseract 可能会弄错某些字符,包括校验位,因此,也许您可​​以获取每个字符的置信度(如果存在,我已经多年没有使用 tesseract)来了解其准确性。
    如果要进行图像处理,对于 0 和 O,可以拟合椭圆并检查偏心率,但这取决于字体。

    关于python-3.x - Pytesseract 混淆了零 ('0' )和大写 O ('O' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62557704/

    相关文章:

    android - Tesseract - 帮助我理解数据路径

    python - 如何检查图像是否有文字?

    c++ - 如何使用 Opencv 按列对矩阵进行子采样

    opencv - 使用 OpenCV 2.2 筛选实现

    python-3.x - 大数据集,使用 unstack() 时收到 "Unstacked DataFrame is too big, causing int32 overflow"

    python - 如何处理 boost::python 中的 Python 切片对象?

    java - 使用 OpenCV Haar 级联进行面部特征检测

    java - 在拥挤的图像中使用 opencv 确定文本区域

    python - 如何显示自定义消息而不是 Argparse 生成的默认帮助消息?

    python - 对矩阵本身求幂 N 次?