用Pytesseract识别picross / nonogram板中的数字很困难

问题描述

我正在尝试用Python编写一个程序,该程序可以读取Picross / Nonogram板。

A 20x20 one in the format I'm working on looks like this

我在读取图像时遇到了麻烦,正在使用PyTesseract,它可以识别一些数字为不正确的字符,例如,将五分之五(“ 5”)作为美元符号(“ $”)。我曾尝试只将0到9的数字列入白名单,但这样做仍然是将其读为常规字符,而忽略它。

是否有任何方法可以迫使Tesseract将其检测到的每个字符转换为数字?因此,如果它显示为“ $”,则迫使该美元符号进入具有最大相似度的数字。否则,我可以对图像预处理进行一些调整以使结果更好吗?

到目前为止,这是我的代码,只包括读取板子左侧数字的部分:

import numpy as np
import cv2
import PyTesseract as tess
from PyTesseract import Output

tess.PyTesseract.tesseract_cmd = 'C:/Program Files/Tesseract-OCR/tesseract'

class Image:
    
    def __init__(self,file):
        self.image = cv2.imread(file,cv2.IMREAD_GRAYSCALE)
        self.imgLeft = self.image[416:901,10:104]
        self.imgLeft = cv2.resize(self.imgLeft,(280,1200))
        
    def leftLimits(self):
        limits = []
        for i in range(20):
            # pre-processing
            column = self.imgLeft[1200//20*i:1200//20*(i+1),:]
            column = cv2.GaussianBlur(column,(9,9),0)
            _,column = cv2.threshold(column,180,255,cv2.THRESH_BINARY)
            rowLimits = []
            # put each character in a Box and check if it's part of a one-digit number or a two-digit number
            numbers = tess.image_to_Boxes(column,output_type=Output.DICT,config = '--psm 6')
            # up here I tried to add '-c tessedit_char_whitelist=0123456789' but it just erased the char
            for j in range(len(numbers['bottom'])):
                value = numbers['char'][j]
                if j == 0:
                    rowLimits.append(value)
                else:
                    if numbers['left'][j] - numbers['right'][j-1] < 12:
                        rowLimits[-1] = rowLimits[-1] + value
                    else:
                        rowLimits.append(value)
            limits.append([limit for limit in rowLimits])
        return limits

i = Image("filename")
print(i.leftLimits())

谢谢:)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)