最近在学习ocr的时候会出现一些问题:
1.识别图片上面的数字会出现倒转,比如0428会变成82h0
2.识别图片上面的数字时一些特殊的数字会识别成字母,比如4变成h
如何能在识别的时候解决这个问题,但不能重新训练模型,我所使用的模型是
ch_PP-OCRv3_det_infer
ch_PP-OCRv3_rec_infer
ch_ppocr_mobile_v2.0_cls_infer
ocr识别纯数字会将数字翻转,并且会识别成字母
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
12条回答 默认 最新
杨同学* 2024-10-31 16:30关注该回答引用ChatGPT4o及杨同学*共同作答, 如有帮助,还请采纳。
在 OCR 识别时遇到数字翻转和误识别成字母的问题,尤其在使用 PaddleOCR 提供的ch_PP-OCRv3和ch_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的问题,可以使用正则表达式或简单的规则来进行字符替换。例如,在结果中可以将识别出的h或H替换成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_text4. 设置
rec_char_dict_path如果可以修改
rec_char_dict_path配置文件,可以尝试自定义字符集文件,以减小模型输出的字符范围,限制模型仅输出数字和极少数的英文字母,这样可以在一定程度上避免数字误识别成字母的情况。5. 增加输出过滤
可以在识别结果输出时,过滤掉不符合预期格式的字符。例如,如果知道 OCR 结果应为纯数字,可以使用正则表达式仅提取数字部分,或者忽略掉不是数字的字符。
import re def filter_non_digits(text): return ''.join(re.findall(r'\d+', text))总结
这些方法主要是通过调整方向分类器、进行图像预处理和结果后处理来避免重新训练模型,同时在一定程度上提升识别准确度。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录- 确保方向分类器的