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