Pytesseract无法识别数字

我在使用Python和Pytesseract编写一个简单的程序来识别图像中的数字,但问题是它总是返回♀,我正在分析这样的图像:

我的图像

我读取数字的代码如下:

import pytesseractfrom pytesseract import (    Output,    TesseractError,    TesseractNotFoundError,    TSVNotSupported,    get_tesseract_version,    image_to_boxes,    image_to_data,    image_to_osd,    image_to_pdf_or_hocr,    image_to_string,    run_and_get_output)def analizar_resultado(path):     image = cv2.imread(path, 1)        text = pytesseract.image_to_string(image, config = 'digits')    print('texto detectado:', text)

但我无法让它正常工作,我尝试了更多这类图像,包括质量更好的和其他类型的,但始终无法识别出任何数字,我该如何解决这个问题?非常感谢


回答:

我有一个三步解决方案


    1. 分别获取每个数字
    1. 应用阈值
    1. 读取输出

第一部分:分别获取每个数字

  • 你可以通过使用索引变量来获取每个数字。例如:

    • s_idx = 0  # 开始索引e_idx = int(w/5) - 10  # 结束索引
  • 首先获取图像的高度和宽度,然后对于每个数字,增加索引

    • for _ in range(0, 6):    gry_crp = gry[0:h, s_idx:e_idx]    s_idx = e_idx    e_idx = s_idx + int(w/5) - 20
  • 结果

    • 0 0 9 9 7 6
      enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here
  • 第二部分:应用阈值

    • 0 0 9 9 7 6
      enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here
  • 第三部分:读取

    • 0.9976

遗憾的是,由于图像中的伪影,第二个零无法被识别为数字。

如果无法读取图像,可以尝试不同的psm 配置

代码:


import cv2from pytesseract import image_to_stringimg = cv2.imread("A3QRw.png")gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)(h, w) = gry.shape[:2]s_idx = 0  # 开始索引e_idx = int(w/5) - 10  # 结束索引result = []for i, _ in enumerate(range(0, 6)):    gry_crp = gry[0:h, s_idx:e_idx]    (h_crp, w_crp) = gry_crp.shape[:2]    gry_crp = cv2.resize(gry_crp, (w_crp*3, h_crp*3))    thr = cv2.threshold(gry_crp, 0, 255,                        cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]    txt = image_to_string(thr, config="--psm 6 digits")    result.append(txt[0])    s_idx = e_idx    e_idx = s_idx + int(w/5) - 20    cv2.imshow("thr", thr)    cv2.waitKey(0)print("".join([digit for digit in result]))

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注