风丶飞 2024-10-31 15:45 采纳率: 66.7%
浏览 42
已结题

ocr识别纯数字会将数字翻转,并且会识别成字母

最近在学习ocr的时候会出现一些问题:
1.识别图片上面的数字会出现倒转,比如0428会变成82h0
2.识别图片上面的数字时一些特殊的数字会识别成字母,比如4变成h
如何能在识别的时候解决这个问题,但不能重新训练模型,我所使用的模型是
ch_PP-OCRv3_det_infer
ch_PP-OCRv3_rec_infer
ch_ppocr_mobile_v2.0_cls_infer

  • 写回答

12条回答 默认 最新

  • 杨同学* 2024-10-31 16:30
    关注

    该回答引用ChatGPT4o及杨同学*共同作答, 如有帮助,还请采纳。
    在 OCR 识别时遇到数字翻转和误识别成字母的问题,尤其在使用 PaddleOCR 提供的 ch_PP-OCRv3ch_ppocr_mobile_v2.0_cls_infer 模型时,可以尝试以下几种方法来改善结果,而无需重新训练模型:

    1. 使用 cls 方向分类器

    你已经在使用 ch_ppocr_mobile_v2.0_cls_infer 方向分类器,但是方向分类器可能没有完全纠正图像的方向。可以尝试以下调整:

    • 确保方向分类器的 cls_threshold 参数适当。例如将 cls_threshold 设置得稍微低一些(比如 0.8 或更低),可能会让方向分类器更加灵敏,减少翻转错误。
    • 确保方向分类器在识别前启用,如果你在代码中手动调用模型,要确保在文本检测后,识别之前使用方向分类器进行调整。
    from paddleocr import PaddleOCR
    
    ocr = PaddleOCR(cls=True)  # 确保开启 cls 分类器
    result = ocr.ocr(img_path, cls=True)
    

    2. 预处理图像

    • 旋转和对齐图像:在输入 OCR 识别之前,先检查图片中的数字方向。如果发现有倒置的数字,可以尝试对图像进行旋转。可以先使用 OpenCV 进行简单的图像方向检查(如边缘检测),如果检测到明显的倒置或翻转,再进行 OCR 识别。
    • 图像增强:有时候数字识别出错可能是因为图像清晰度或对比度不足。可以在图像进入 OCR 前,使用一些增强技术,比如灰度转换、增加对比度或锐化,以提高识别的准确度。

    3. 后处理结果

    • 翻转检测和纠正:在识别结果中检查是否出现了翻转的模式,比如类似 82h0 的字符串。可以编写一个函数来检测数字顺序和识别的异常情况,然后手动进行结果纠正。
    • 字母到数字的映射:为了解决 OCR 将 4 识别成 h 的问题,可以使用正则表达式或简单的规则来进行字符替换。例如,在结果中可以将识别出的 hH 替换成 4,或者编写一个简单的字母-数字映射来纠正这些常见误识别。
    def correct_ocr_result(ocr_text):
        corrections = {'h': '4', 'H': '4', 'B': '8', 'O': '0', 'I': '1'}
        corrected_text = ''.join([corrections.get(char, char) for char in ocr_text])
        # 检测可能的翻转模式
        if corrected_text[::-1].isdigit():  # 如果翻转后为数字
            corrected_text = corrected_text[::-1]
        return corrected_text
    

    4. 设置 rec_char_dict_path

    如果可以修改 rec_char_dict_path 配置文件,可以尝试自定义字符集文件,以减小模型输出的字符范围,限制模型仅输出数字和极少数的英文字母,这样可以在一定程度上避免数字误识别成字母的情况。

    5. 增加输出过滤

    可以在识别结果输出时,过滤掉不符合预期格式的字符。例如,如果知道 OCR 结果应为纯数字,可以使用正则表达式仅提取数字部分,或者忽略掉不是数字的字符。

    import re
    
    def filter_non_digits(text):
        return ''.join(re.findall(r'\d+', text))
    

    总结

    这些方法主要是通过调整方向分类器、进行图像预处理和结果后处理来避免重新训练模型,同时在一定程度上提升识别准确度。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(11条)

报告相同问题?

问题事件

  • 系统已结题 11月8日
  • 已采纳回答 10月31日
  • 创建了问题 10月31日