【问题标题】:Tips on performing OCR - not getting desired results执行 OCR 的技巧 - 没有得到想要的结果
【发布时间】:2015-06-10 00:56:51
【问题描述】:

所以我有以下图像:

我正在尝试提取三个数组:

var a = [30,31,32,35,37,40,44];
var b = [6,7,11,15,18,21,22];
var c = [5,11,15,18,23,37,28];

我尝试将此图像输入tesseract ~/Desktop/test.png out 无济于事:

9 % ooenesew @
5 ‘ 904399

这是ocrad ~/Desktop/test.ppm的结果:

o
?
28

任何 OCR 专家都可以建议我接下来可以尝试什么吗?我很喜欢使用 Python/OpenCV,但会尝试任何方法。

【问题讨论】:

  • 不是 OCR 专家,但您知道您总是要以相同的比例扫描不倾斜的图像吗?你知道每个可能的数字(我假设是 1-50 左右)是什么样的吗?如果是这样,您可以将此问题从 OCR 减少到特征匹配。
  • 您好,它始终是非偏斜的并且具有相同的比例。数字范围实际上是 [1-45]。是的,我也许可以进行特征匹配。
  • 这似乎是一种相当不寻常的字体,而且您只是试图匹配非常有限的一组字符。所以我认为你需要先Train Tesseract

标签: python opencv ocr


【解决方案1】:

如果您的图像始终如示例中所示,您可能需要进行一些整理以删除任何不是数字的内容(所有黑色背景和圆圈)。然后,在链接问题的接受答案中描述的方法可能足以满足您的需求,因为看起来您没有处理不同的字体和大小: Simple Digit Recognition OCR in OpenCV-Python

【讨论】:

  • 我不确定如何可靠地去除黑色。有没有办法在 OpenCV 中进行模糊选择?从0,0开始,模糊选择所有黑色像素,如果总面积大于某个阈值,则删除模糊区域。
  • 您可以使用 findContours 获取连接的组件,然后通过过滤不符合特定条件的字符来分离候选字符。在您的情况下,您可能会采用轮廓的边界框(boundingRect)的大小和/或纵横比来决定是否要过滤掉它。链接的代码已经采用了类似的方法,并实现了基于面积(如果 cv2.contourArea(cnt)>50:) 和高度(如果 h>28:) 的基本过滤形式。
猜你喜欢
  • 2016-03-14
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
相关资源
最近更新 更多