Tesseract OCR误将项目符号识别为ASCII字符e的解决方法咨询
Tesseract 项目符号被误识别为零散ASCII字符的解决方案
问题核心成因
Tesseract 4 默认训练集的匹配逻辑是优先把所有连通图形映射到最接近的可印刷文本字符,列表用的实心圆点、短横类项目符号没有独立的语义映射,很容易因为形态接近被错匹配成小写e、c这类单字符。你当前用的--psm 1模式会自动拆分页面所有独立块,对这类小尺寸孤立图形的识别优先级更高,进一步放大了误识别概率。
具体可落地的修正方案
- 调整识别配置,替换不匹配的psm参数
停用当前的--psm 1配置,根据实际页面布局更换适配模式:- 单栏无复杂排版的常规文档,改用
--psm 6(将整块页面识别为统一的单块文本,减少孤立小图形的独立识别通道) - 带多段列表的可变文本排版,改用
--psm 4(识别单列、字号有细微差异的文本块,过滤位置不符合文本基线的孤立图形)
注意不要直接加tessedit_char_blacklist=e这类全局黑名单,会把正文里正常出现的e字符过滤掉,造成文本漏识别
- 单栏无复杂排版的常规文档,改用
- 图像预处理阶段直接隔离项目符号
这是准确率最高的解决路径:
读入图片后先做二值化,再通过连通域分析筛选符合项目符号特征的图形块——一般这类块的尺寸比正文单字小30%以上、水平位置比同行正文首字靠左至少15-20像素、和正文行垂直居中对齐,直接在图像上把这类块涂成和背景一致的白色,再喂给Tesseract识别,从根源上杜绝项目符号被当成文本字符识别的可能。 - 增加文本后处理的规则过滤
识别完成后对输出文本做正则校验,把行首的孤立误识别单字符过滤掉:匹配规则为“行首空白后单独出现的e/c类字符、后面紧跟大写开头的正文内容”,这类行99%都是项目符号被误识别的结果,不会误伤正常文本。
参考正则写法:re.sub(r'^\s*[ec]\s+(?=[A-Z])', '', ocr_result) - 替换适配文档场景的训练集
如果长期识别带列表排版的文档,可以将默认的通用英文训练集替换为带文档场景标注的细分训练集,这类训练集对带项目符号的排版场景优化过,孤立图形的误匹配率会比通用版本低60%以上。
内容的提问来源于stack exchange,提问作者user_12
相关产品推荐
相关产品推荐

