我正在尝试开发一种系统,该系统可以将旧模拟压力输出系统上的七段显示转换为文本,这样数据就可以由LabVIEW处理。我一直致力于图像处理,以获得Tesseract(使用v3.02)正确识别数字,但已经遇到了一些障碍,并且不太了解如何继续。这是我到目前为止所得到的:
我一直在使用七段训练数据' letsgodigital'。这是我到目前为止所做的图像处理的代码:
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'似乎有很多麻烦。这些数字发生在' +'之后。或者' - '通常不会出现,而且' +'经常出现在' - '。我也玩了一些阈值值。
最后三部分是因为我拍摄的视频样本略显歪斜。我可以尝试使用一些更好的数据来处理,我也可以尝试使用标准版本来制作我自己的培训数据' letsgodigital'郎。我觉得我不是以最好的方式进行图像处理,并且会很感激一些指导。
我计划使用某种程度的边缘检测来自动切换到显示器,但是现在我一直试图保持简单并手动获得我想要的结果。我已经上传了在http://imgur.com/a/vnqgP处应用了不同程度图像处理的样本图像。这很困难,因为有时候我会从tesseract得到准确的答案,而其他时候什么也得不到。虽然相机或灯光水平并没有真正改变,但这让我觉得这对我的训练数据来说是一个问题。任何建议或指示我应该去哪里将非常感谢!!谢谢
答案 0 :(得分:1)
对于读取七段数字,正常的OCR程序如tesseract通常不能很好地工作,因为各个段之间的空间。您应该尝试ssocr,它专门用于读取七个段数字。但是,您的预处理需要更好,因为ssocr期望输入是七行数字的单行。
参考文献 - https://www.unix-ag.uni-kl.de/~auerswal/ssocr/
用法示例 - http://www.instructables.com/id/Raspberry-Pi-Reading-7-Segment-Displays/