Python 低质量数字图像的OCR预处理方法?

Python 低质量数字图像的OCR预处理方法?,python,ocr,tesseract,sudoku,python-tesseract,Python,Ocr,Tesseract,Sudoku,Python Tesseract,我目前正在从事一个项目,该项目将读取数独网格的图像,检测网格,识别数字,解决难题,并将解决方案覆盖在图像上。为了识别数字,我将网格划分为n*2个图像,其中每个图像都是一个单独的网格(示例:),并将它们运行到pytesseract中。然而,我的所有图像都没有检测到任何文本,即使它只是一个数字图像,没有噪音/边框/等等 我尝试过平滑图像的常用方法、各种阈值方法、调整图像大小、反转图像以及将数字裁剪到边界框,但这些方法似乎都不起作用。我已经在其他图像上测试了我为pytesseract编写的代码,这些代

我目前正在从事一个项目,该项目将读取数独网格的图像,检测网格,识别数字,解决难题,并将解决方案覆盖在图像上。为了识别数字,我将网格划分为n*2个图像,其中每个图像都是一个单独的网格(示例:),并将它们运行到pytesseract中。然而,我的所有图像都没有检测到任何文本,即使它只是一个数字图像,没有噪音/边框/等等

我尝试过平滑图像的常用方法、各种阈值方法、调整图像大小、反转图像以及将数字裁剪到边界框,但这些方法似乎都不起作用。我已经在其他图像上测试了我为pytesseract编写的代码,这些代码似乎都工作得很好,只是对于我的图像,它们不工作

有人能为我的尝试和/或为什么我的图像看起来不容易处理提供建议吗

以下是我一直在使用的pytesseract的image_to_字符串的设置,仅供参考:

text = image_to_string(im, config='--psm 10 --oem 3' + '-c tessedit_char_whitelist=123456789')

我找到了一个解决方案,但它绝对不漂亮。 我发现pytesseract在捕捉数字量很少的数字方面很差劲。我的灵感来自CNN,它在进行图像识别时使用“零填充”。现在请注意,我唯一的灵感来源是它的实际名称,而不是方法(这比本文将要讨论的任何内容都要复杂得多)

我找到了一个包含0的图像,并创建了一个包含三个零(任意选择的数字和数量)的“零填充图像”。无论如何,我发现pytesseract能够完美地扫描数字图像!15/15例,而不是3/15例。记住将OCR扫描的数字除以1000(如果使用三个0)

我使用了本文所示的水平图像叠加技术:

相关:
import numpy as np
from PIL import Image
def concat_images(imga, imgb):
    """
    type(imga): string of filename
    type(imgb): string of filename
    type(new_img): PIL.Image.Image

    """
    imga = np.asarray(Image.open(imga).convert('LA') )
    imgb = np.asarray(Image.open(imgb).convert('LA') )

    ha,wa = imga.shape[:2]
    hb,wb = imgb.shape[:2]
    max_height = np.max([ha, hb])
    total_width = wa+wb
    new_img = np.zeros(shape=(max_height, total_width, 2) , dtype = 'uint8')
    new_img[:ha,:wa]=imga
    new_img[:hb,wa:wa+wb]=imgb
    new_img = Image.fromarray(new_img)

    return new_img