【问题标题】:OCR match frame´s position to field in credit cardOCR 匹配框架的位置到信用卡中的字段
【发布时间】:2014-11-21 04:30:03
【问题描述】:

我正在开发一种 OCR 来检测信用卡。

扫描图像后,我得到一个包含位置的单词列表。 关于检测信用卡的每个字段(号码、日期、姓名)对应的单词的最佳方法的任何提示/建议?

例如:

    position = 96.00 491.00
    text = CARDHOLDER

提前致谢

【问题讨论】:

  • 据我所知,某些字段(卡号、持卡人姓名、开始/到期日期)的位置是标准化的(不是 100% 确定,如果错误请更正。)所以这是一个专业的分割算法启发式地将图像分解成某些区域的情况可以真正帮助你。大多数 OCR(例如 Tesseract)都针对连续文本页面或具有多列的文本进行了优化(有时它们与列有冲突)。在这种情况下,您想了解如何覆盖或提示使用的页面分割算法,或编写您自己的预处理程序。

标签: ocr tesseract


【解决方案1】:

您的第一个问题是,大多数 OCR 并未针对在空间分离的块中占据大部分“页面”(或卡片图像,在您的情况下)的少量文本进行优化。他们期望扫描的书或报纸上的行或文本页。所以他们在分析图像方面不太可能做得很好

因为字体相当统一,他们可能会很好地识别字符,但布局会混淆页面分割算法,因此您输出的文本可能没有正确的顺序。比如卡号的“1234”和它下面较小的“1234”构成单列文字,同样是后两组四个数字和有效期。

对于您提前知道布局的特殊情况,您确实希望开发自己的页面分割算法来将图像分成多个区域,例如卡号、持卡人姓名、开始和到期日期。这不应该难,因为我认为这些组件的位置在信用卡上是标准化的。假设良好的预处理和二值化,您基本上可以做一个水平直方图并在波谷处分割图像。

然后将每个区域提取为单独的图像,仅包含一行文本,并将其提供给 OCR。

交替(快速而肮脏的方法)

  • 指示 OCR 您要识别的内容由 单列 组成(即阻止它尝试找出页面布局本身)。您可以使用 Tesseract 执行此操作,使用 -psm(页面分段模式)参数设置为,可能为 6(但尝试看看什么能给您最好的结果)
  • 使 Tesseract 输出 hOCR 格式,您可以在配置文件中设置。 hOCR 格式包括相对于整个图像获取输出的行的边界框。
  • 编写一个算法,将 hOCR 中的边界框与 您知道每个卡片组件应该在的位置进行比较(寻找一定百分比的重叠,由于显而易见的原因,它不会完全匹配。)

【讨论】:

    【解决方案2】:

    除了 Mikesname 提供的好技巧之外,如果使用图像处理将图像转换为双色调(纯黑白),无论使用哪种 OCR 引擎,都可以大大提高识别结果,如附件你的形象。

    【讨论】:

    • 你能提供/解释你使用了什么类型的过滤器吗?只是一个二进制过滤器??我申请了一个阈值,但结果最差
    • 嗯……我从未来来告诉你,过滤器是自适应阈值……哈哈哈
    猜你喜欢
    • 2015-10-13
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    相关资源
    最近更新 更多