如何使用边界矩形纠正 OCR 分割错误?

Posted

技术标签:

【中文标题】如何使用边界矩形纠正 OCR 分割错误?【英文标题】:How to correct OCR segmentation errors using bounding rectangles? 【发布时间】:2012-04-29 23:12:56 【问题描述】:

我正在使用 tesseract 进行 OCR 并注意到,有时会出现分段错误,并且“显然”属于一起的字符被拆分为单独的字符串。

根据在一个文本行中找到的字符列表及其边界框和初步 OCR 结果提示,这些字符中的哪些属于一个单词,我可以应用哪些算法来纠正分割错误或验证结果?

所以这是可用的数据:

List<Word> words;
for(Word word : words)
    for(Char c : word.getChars())
        char ch = c.getValue();
        Rectangle rect = c.getRect();
    

【问题讨论】:

【参考方案1】:

对于OCR 后校正,它考虑了字符和单词,但诚然不是边界框,一种常见的做法是

使用有效单词字典,尽可能全面 对照该词典检查 OCR 算法产生的单词 如果在字典中找不到一个完全匹配的词,尝试找到一个相似的一个

要实现这一点,您需要准备字典实现,以便搜索类似字符串,也称为近似字符串匹配模糊字符串匹配

我知道的两种主要方法是

Levenshtein atomata,如 Schulz et al 所述(DOI:10.1007/s10032-002-0082-8) 度量树,例如Baeza-Yates and Navarro 描述的 BK 树(DOI:10.1109/SPIRE.1998.712978)

这些方法以及一般的近似字符串匹配方法(例如搜索尝试、q-gram 匹配和 n-gram 匹配)都固有地使用某种编辑距离度量,或多或少类似于Levenshtein distance。在分析您正在处理的特定 OCR 错误之后,您可能需要调整编辑距离算法以及您正在使用的其他资源以满足您的特定需求。这可能涉及以下内容:

假设您的 OCR 程序经常混淆的字符之间的替换距离较小,或者在使用您正在处理的字体或样式呈现时看起来特别相似的字符 通过将频繁出现的词对放入字典中(除了单个词)来考虑可能的切分错误 确保您的字典包含尽可能多的命名实体和其他特定领域(或特定语料库)元素

此外,您可以尝试使用语法和/或统计语言模型,例如隐马尔可夫模型或条件随机场模型——类似到 POS 标注器使用的模型——在上下文中进行单词更正

【讨论】:

以上是关于如何使用边界矩形纠正 OCR 分割错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何从图像中提取不同边缘强度的矩形?

C ++ / OpenGL - 2D - 如何在矩形边界框中剪切圆

如何找到 QLineF 超出父边界矩形

如何按位置对矩形数组进行排序?

opencv 5 图像轮廓与图像分割修复 2 使用多边形将轮廓包围

如何使用 Pytesseract 文本识别改进 OCR?