[英]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 的机器学习方面让我感到困惑,而且我不知道如何解决非常不一致的读数。 如果您需要任何进一步的信息,请询问,我很乐意告诉您。
编辑:添加了更多错误读取的图像以供参考
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.