【问题标题】:Not getting correct results from pytesseract没有从 pytesseract 得到正确的结果
【发布时间】:2020-06-30 14:21:14
【问题描述】:

我正在尝试在 python 中进行 OCR,但没有得到正确的输出。这是代码。我尝试了原始图像,灰度也但没有得到任何结果

from PIL import Image
import pytesseract

def convert_to_monochrome(image):
    pixels = image.load()
    for i in range(image.size[0]): # for every pixel:
        for j in range(image.size[1]):
            r, g, b = pixels[i, j]
            if r > 200 and g > 200 and b > 200:
                pixels[i, j] = (255, 255, 255)
            else:
                pixels[i, j] = (0, 0, 0)
    return image

def interpret_chips(image):
    #image = image.resize((image.size[0] * 10, image.size[1] * 10), Image.ANTIALIAS)
    #image = image.convert("LA")
    #image.show()
    _image = convert_to_monochrome(image)
    _image.show()
    _image.save("chips.jpg")
    config = "--psm 7 -c tessedit_char_whitelist=0123456789KMT"
    rank_string = pytesseract.image_to_string(_image, config=config)  # expensive
    return _image, rank_string

for i in range(1, 6):
    print(i)
    img = Image.open("temp/sample" + str(i) + ".jpg")
    img, text = interpret_chips(img)
    print(text)
    img.save("temp/monochrome" + str(i) + ".jpg")

感谢您的帮助

我附上了一些结果错误的原始图像。应用定义的单色函数后获得预处理图像,请查看。文本可以是 4、400、4000、459K、29M 等类型。我得到的结果非常尴尬。

Raw Image 1

Raw Image 2

Raw Image 3

Pre processed 1

Pre processed 2

Pre processed 3

【问题讨论】:

    标签: python image ocr python-tesseract


    【解决方案1】:

    问题在于 tesseract 需要在浅色背景上带有深色文本的图像。您的情况下的预处理图像正好相反。所以你可以反转预处理的图像。 下面的代码对我有用:

    from PIL import Image
    import pytesseract
    
    
    def convert_to_monochrome(image):
        pixels = image.load()
        for i in range(image.size[0]): # for every pixel:
            for j in range(image.size[1]):
                r, g, b = pixels[i, j]
                if r > 200 and g > 200 and b > 200:
                    pixels[i, j] = (0, 0, 0)
                else:
                    pixels[i, j] = (255, 255, 255)
        return image
    
    
    def interpret_chips(image):
        #image = image.resize((image.size[0] * 10, image.size[1] * 10), Image.ANTIALIAS)
        #image = image.convert("LA")
        #image.show()
        _image = convert_to_monochrome(image)
        _image.show()
        _image.save("chips.jpg")
        config = "--psm 6 -c tessedit_char_whitelist=0123456789KMT"
        rank_string = pytesseract.image_to_string(_image, config=config)  # expensive
        return _image, rank_string
    
    
    img = Image.open("orig.jpg")
    img, text = interpret_chips(img)
    print(text)
    
    
    

    orig.jpg:

    text23.000,

    【讨论】:

    • 非常感谢,确实有效。我只需要看看精度。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2015-11-23
    • 2020-05-01
    相关资源
    最近更新 更多