我正在尝试开发一个系统,将旧模拟压力输出系统上的七段显示转换为文本,以便数据可以被LabVIEW处理。我一直在进行图像处理来使Tesseract (使用v3.02)正确识别数字,但一直遇到一些障碍,不知如何继续。这是我目前的成果:
一些数字比其他数字更好用 - 例如,“1”似乎有很多问题。在“+”或“-”后出现的数字经常不显示,而“+”经常显示为“-”。我已经尝试过调整阈值数值。最后三个部分是因为我使用的视频样本略微偏斜。我可以尝试采集更好的数据并制作自己的训练数据。但我感觉自己并没有以最佳方式进行图像处理,并希望得到一些指导。 我计划使用一定程度的边缘检测来自动裁剪显示屏,但现在我只是尝试保持简单并手动获得想要的结果。 我已在https://imgur.com/a/vnqgP上上传了应用各种程度图像处理的示例图像。这很困难,因为有时从tesseract获得完全正确的答案,而其他时候则一无所获。然而,摄像机或光线水平并没有真正改变,这使我认为这是我的训练数据的问题。非常感谢任何建议或指导!谢谢
- 图像高度需要在50-100像素之间,才能由Tesseract正确读取。我发现50像素高度的结果最佳。
- 必须裁剪图像,使得只有一行文本。
- 图像应为黑白色。
- 图像应从左到右相对平坦。
ret, i = video.read()
h,width,channels = i.shape #get dimensions
g = cv2.cvtColor(i,cv2.COLOR_BGR2GRAY)
histeq=cv2.equalizeHist(g) #spreads pixel values across entire spectrum
_,t = cv2.threshold(histeq,150,225,cv2.THRESH_BINARY) #thresholds histeq
cropped = t[int(0.4*h):int(.6*h), int(0.1*width):int(0.9*width)]
rotated = imutils.rotate_bound(cropped, angle)
resized = imutils.resize(rotated,height=resizing_height)
一些数字比其他数字更好用 - 例如,“1”似乎有很多问题。在“+”或“-”后出现的数字经常不显示,而“+”经常显示为“-”。我已经尝试过调整阈值数值。最后三个部分是因为我使用的视频样本略微偏斜。我可以尝试采集更好的数据并制作自己的训练数据。但我感觉自己并没有以最佳方式进行图像处理,并希望得到一些指导。 我计划使用一定程度的边缘检测来自动裁剪显示屏,但现在我只是尝试保持简单并手动获得想要的结果。 我已在https://imgur.com/a/vnqgP上上传了应用各种程度图像处理的示例图像。这很困难,因为有时从tesseract获得完全正确的答案,而其他时候则一无所获。然而,摄像机或光线水平并没有真正改变,这使我认为这是我的训练数据的问题。非常感谢任何建议或指导!谢谢