【发布时间】:2017-09-21 17:45:11
【问题描述】:
我正在尝试开发一个系统,可以将旧模拟压力输出系统上的七段显示转换为文本,以便 LabVIEW 可以处理数据。我一直在进行图像处理以使 Tesseract(使用 v3.02)正确识别数字,但遇到了一些障碍并且不太知道如何进行。这是我到目前为止所得到的:
- 图像的高度必须在 50-100 像素之间,Tesseract 才能正确读取。我找到了高度为 50 的最佳结果。
- 图像需要被裁剪成只有一行文字。
- 图片应该是黑白的
- 图像从左到右应该相对水平。
我一直在使用七段训练数据“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 得到确切的正确答案,而其他时候却一无所获。相机或光照水平并没有真正改变,这让我认为这是我的训练数据的问题。任何关于我应该去哪里的建议或方向将不胜感激!谢谢
【问题讨论】:
-
我绝不是专家(只在我的一个项目中使用过 tesseract-ocr),但根据我的经验,tesseract 可以很容易地处理像你这样的文本。我已经让它在结构化背景上读取不寻常的字体,结果仍然是合理的。这就是为什么我认为您的图像非常好,您可能应该专注于获得更好的训练数据。
标签: python opencv image-processing ocr tesseract