使用OpenCV进行记分牌数字识别

pyr*_*nfo 16 ocr opencv image-processing computer-vision

我试图从你在高中体育馆找到的典型记分牌中提取数字.我将每个数字都用数字"闹钟"字体,并设法透视正确,阈值并从视频输入中提取给定数字

样本输入

这是我的模板输入示例

模板输入

我的问题是没有一种分类方法能准确地确定所有数字0-9.我尝试了几种方法

1)Tesseract OCR - 这个在4上一直混乱并经常返回奇怪的结果.只需使用命令行版本.如果我真的尝试用"闹钟"字体训练它,我每次都会得到未知的角色.

2)kNearest与OpenCV - 我搜索由我的模板图像(0-9)组成的数据库,并查看哪一个最近.我经常在3/1和7/1之间混淆

3)cvMatchShapes - 这个很糟糕,它通常无法区分每个输入数字的2位数字

4)切线距离 - 这一个是最接近的,但输入和我的模板之间的最小切线距离最终每次都将"7"映射到"1"

对于这样一个简单的问题,我真的很茫然得到一个分类算法.我觉得我已经很好地清理了输入,这是一个相当简单的分类案例,但我无法获得足够可靠的实际用途.任何有关在何处查找分类算法或如何正确使用它们的想法都将受到赞赏.我没有清理输入吗?那个更好的输入数据库怎么样?我不知道还有什么用于输入,此时每个数字和模板看起来都很明显.

Sam*_*Sam 10

经典的数字识别(在这种情况下应该可以很好地工作)是在图像周围裁剪图像,将其大小调整为4x4像素,最终应用dct进一步减小searc空间.(然后你可以先选择4-6值).使用这些值,训练分类器.SVM是一个很好的,可以在OpenCV中使用.

它不像艾玛或马丁的建议那么简单,但更优雅,我认为更强大.

编辑

给定输入的宽高比,您可以选择一些不同的小分辨率.喜欢3x4


Emm*_*mma 5

鉴于您输入的高度规则性,您可以定义一组 7 个图像目标区域以进行检查。每个区域应包含显示器每个数字的 7 个段之一的一些重要部分,但不重叠。

然后,您可以检查每个区域并平均像素的颜色/亮度以生成给定二进制状态的概率。如果您在所有区域的概率都很高,那么您可以轻松找出数字是什么。

它不像纯 ML 类型算法那么优雅,但 ML 更适合不规则的输入,在这种情况下似乎不适用 - 因此您可以用优雅来换取准确性。