Tesseract 输出从非常清晰的图像中更改、添加和删除数字

Tesseract output changing, adding, and removing numbers from very clear image

我正在开发一个程序,该程序使用网络摄像头使用 pytesseract(长话短说)从屏幕上读取不断变化的数字。它拍摄整个屏幕的图像,然后使用存储在名为 'roi' 的列表中的预定坐标裁剪出每个需要记录的数字(共有 23 个)。还有一些其他步骤,但这是最重要的部分。目前是不断增删改号,但不是一贯。以下是一些示例:

它误读为“32.0”

它正确地将其读作“52.0”

它误读为“39.3”

它误读为“2499.1”

这些图像已经使用OpenCV进行了处理,是roi集中所有图像的样子。根据其他答案,我将其二值化,尝试清理边缘,并在图像周围放置一个白色边框(参见代码)。

此程序每 30 秒读取一次屏幕,有时正确,有时错误。很多时候它喜欢把 5s 变成 3s,3s 变成 5s,5s 变成 9s。有时它只是完全遗漏或添加数字。下面是我处理图像的代码。

pytesseract.pytesseract.tesseract_cmd = #tesseract file path
scale = 1.4
img = cv2.imread(#image file path#)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.rotate(img, cv2.ROTATE_180)
width = int(img.shape[1] / scale)
height = int(img.shape[0] / scale)
dim = (width, height)
img = cv2.resize(img, dim, interpolation=cv2.INTER_AREA)                                    
cv2.destroyAllWindows()

myData = []
cong = r'--psm 6 -c tessedit_char_whitelist=+0123456789.-'

for x,r in enumerate(roi):                                                                 
    imgCrop = img[r[0][1]:r[1][1], r[0][0]:r[1][0]]        
    scalebig = 0.2
    wid = int(imgCrop.shape[1] / scalebig)
    hei = int(imgCrop.shape[0] / scalebig)
    newdims = (wid, hei)
    imgCrop = cv2.resize(imgCrop, newdims)

    imgCrop = cv2.threshold(imgCrop,155,255,cv2.THRESH_BINARY)[1]

    kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))                              
    imgCrop = cv2.morphologyEx(imgCrop, cv2.MORPH_CLOSE, kernel2, iterations=2)

    value = [255,255,255]
    imgCrop = cv2.copyMakeBorder(imgCrop, 10, 10, 10, 10, cv2.BORDER_CONSTANT, None, value = value)

    datapoint = pytesseract.image_to_string(imgCrop, lang='eng', config=cong)
    myData.append(datapoint)

输出就是我上面链接的图片。

我研究过对其进行微调,但我有一台 Windows 机器,我似乎找不到好的教程。我不是职业程序员,我花了 2 个月自学 Python 来做这件事,但 Tesseract 的机器学习方面让我头晕目眩,我不知道还有什么办法可以解决明显不一致的读数。如果您需要任何进一步的信息,请询问,我很乐意告诉您。

编辑:增加了一些误读图片以供参考

  1. 确保使用正确的图像格式(jpeg 是 OCR 的错误格式)
  2. 在 tesseract LSTM 引擎的情况下,确保字母大小不大于 35 点。

使用 tesseract best_tessdata 我得到了这些结果:

tesseract 593_small.png -
59.3

tesseract 520_small.png -
52.0

tesseract 2491_small.png -
249.1