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

Ped*_*dro 5 algorithm ocr tesseract error-correction

我正在使用tesseract进行OCR并注意到,有时会出现分段错误,"明显"属于一起的字符会被拆分为分段字符串.

基于在一个文本行中找到的字符列表及其边界框以及建议的主要OCR结果,这些字符属于哪一个字,我可以应用哪些算法来纠正分段错误或验证结果?

所以这个数据可用:

List<Word> words;
for(Word word : words){
    for(Char c : word.getChars()){
        char ch = c.getValue();
        Rectangle rect = c.getRect();
    }
}
Run Code Online (Sandbox Code Playgroud)

jog*_*pan 5

对于考虑到字符和单词的OCR后置校正,但不可否认的是边界框,一种常见的做法是

  • 使用有效单词词典,尽可能全面
  • 检查OCR算法对该字典产生的单词
  • 如果一个字不能被发现在词典中的精确匹配,以试图找到一个类似的一个

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

我所知道的两个主要方法是

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

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

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