Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 屏幕截图中低分辨率文本的OCR_Python_Opencv_Ocr - Fatal编程技术网

Python 屏幕截图中低分辨率文本的OCR

Python 屏幕截图中低分辨率文本的OCR,python,opencv,ocr,Python,Opencv,Ocr,我正在编写一个OCR应用程序,从截图图像中读取字符。目前,我只关注数字。我的方法部分基于以下博文: 我可以使用一些巧妙的阈值成功地提取每个单独的字符。事情变得有点棘手的地方是匹配角色。即使使用固定的字体和大小,也有一些变量,例如背景颜色和字距,会导致相同的数字以稍微不同的形状出现。例如,下图分为3个部分: 上图:我从截图中成功提取的目标数字 中间:模板:我的培训集中的一个数字 底部:顶部和中间图像之间的误差(绝对差) 所有零件都已缩放(两条绿色水平线之间的距离表示一个像素) 您可以看到,尽管顶

我正在编写一个OCR应用程序,从截图图像中读取字符。目前,我只关注数字。我的方法部分基于以下博文:

我可以使用一些巧妙的阈值成功地提取每个单独的字符。事情变得有点棘手的地方是匹配角色。即使使用固定的字体和大小,也有一些变量,例如背景颜色和字距,会导致相同的数字以稍微不同的形状出现。例如,下图分为3个部分:

  • 上图:我从截图中成功提取的目标数字
  • 中间:模板:我的培训集中的一个数字
  • 底部:顶部和中间图像之间的误差(绝对差)
  • 所有零件都已缩放(两条绿色水平线之间的距离表示一个像素)

    您可以看到,尽管顶部和中间的图像都清楚地表示了2,但它们之间的误差相当大。当匹配其他数字时,这会导致误报——例如,不难看出放置良好的7如何比中间图像更好地匹配上面图像中的目标数字

    目前,我通过为每个数字创建一堆训练图像来处理这个问题,并将目标数字与这些图像一一匹配。我尝试拍摄训练集的平均图像,但这并不能解决问题(其他数字的误报)

    我有点不愿意使用移位模板执行匹配(这与我现在所做的基本相同)。有没有比简单的绝对差更好的方法来比较这两幅图像?我在想2D中的EMD(地球移动者距离,s_距离):基本上,我需要一种比较方法,这种方法对全局移动和局部小变化(白色像素旁边的像素变为白色,或黑色像素旁边的像素变为黑色)不敏感,但对全局变化敏感(不接近白色像素的黑色像素变为黑色,反之亦然)

    有人能提出一种比绝对差更有效的匹配方法吗


    我在OpenCV中使用C风格的Python包装器(
    import-cv
    )来完成所有这些工作。

    我会研究如何使用Haar级联。我已经将它们用于人脸检测/头部跟踪,看起来你可以用足够的“2”、“3”、“4”等构建一组非常好的级联


    在有噪声的图像上进行OCR并不容易,因此简单的方法不可能很好地工作

    所以,我建议您使用SVM来提取特征和分类。HOG似乎是描述形状最强大的方法之一

    整个处理管道是在OpenCV中实现的,但是我不知道python包装中的函数名。您应该能够使用最新的haartraining.cpp进行培训-它实际上还支持更多的haar-HOG和LBP

    我认为最新的代码(来自trunk)比官方版本(2.3.1)有了很大的改进


    但是,如果要对部分被排除(或丢失)的形状进行分类,HOG通常只需要其他识别方法使用的训练数据的一小部分,您应该确保在训练中包含一些这样的形状。

    根据我的经验和阅读几篇有关字符分类的论文,我可以告诉您,一个好的开始方法是阅读主成分分析(PCA)、费舍尔线性判别分析(LDA)和支持向量机(SVM)。这些分类方法对于OCR非常有用,事实证明OpenCV已经包括了和上的优秀实现。我还没有看到任何用于OCR的OpenCV代码示例,但您可以使用一些修改版本的人脸分类来执行字符分类。这是一个非常好的人脸识别代码资源r OpenCV是

    我向您推荐的另一个Python库是“scikits.learn”。将CVArray发送到scikits.learn并在您的数据上运行机器学习算法非常容易。使用SVM的OCR的一个基本示例是


    使用流形学习进行手写字符识别的另一个更复杂的例子是。

    谢谢!我一定会看一看Haar cascades。你认为它与简单的图像减法相比效率有多高?我预计它会慢一些。但是,如果它慢5倍,但替换了10次图像检查以获得相同的效果,那么ness,那么它肯定是值得的。你必须生成级联,这是一个相当耗时的过程(但也愚蠢地可并行)。它还需要大量输入数据(我会使用桌面上所有字体的数字)。比减法慢,但您可以一次搜索某个级联的所有实例的图像。我不认为图像本身有噪声,但我知道您来自何处。我将查看HOG。谢谢。