RapidOCR调优尝试教程

引言

  • 由于小伙伴们使用OCR的场景多种多样,单一的参数配置往往不能满足要求,这就涉及到基于现有模型,通过调节参数来达到正确识别的目的。
  • 基本的原则是尽量不去动模型内部,降低使用成本。
  • 本篇文章就来说说在识别效果不好时,如何去调优。
  • 因此博客为一家之言,难免会挂一漏万,希望小伙伴多多指出,共同维护这份教程。
  • 以下尝试情况,均已经在在线demo中实现,看完之后,可移步那里去尝试。

常见错例种类

本地使用过程中,识别结果:

  • 个别字丢失
  • 个别字识别错误

个别字丢失调优篇

  1. 查看图像是否shape太小,导致文本检测丢失。

    • 对于长度较长,高度较小的图像,可尝试对该图像高度做上下补充,来减小文字在原始图像中比例,利于文本检测。类似下图这种,左侧一条为原始图像,右侧为上下补边的图像。
      在这里插入图片描述

    • padding代码参考:

    from typing import Tuple
    
    import cv2
    import numpy as np
    
    
    def padding_img(img: np.ndarray,
                    padding_value: Tuple[int, int, int, int],
                    padding_color: Tuple = (0, 0, 0)) -> np.ndarray:
        padded_img = cv2.copyMakeBorder(img,
                                        padding_value[0],
                                        padding_value[1],
                                        padding_value[2],
                                        padding_value[3],
                                        cv2.BORDER_CONSTANT,
                                        value=padding_color)
        return padded_img
    
    img = cv2.imread('xxx.jpg')
    
    # padding_value: (top, bottom, left, right)
    # 对该图像上下各补充10像素的白边
    padded_img = padding_img(img, (10, 10, 0, 0), (255, 255, 255))
    
    • 将padding之后的图像再次送入RapidOCR中尝试,查看是否仍然出现上述问题。
  2. 将该图像上传到在线demo中,查看能否复现问题?

    • 如不能复现,着重比对环境是否与在线demo中相关包使用版本不一致情况?
    • 在线demo所用的各个包版本情况:
      Python: 3.8
      onnxruntime: 1.14.1
      rapidocr_onnxruntime: 1.2.5
      
  3. 如能复现,尝试调节在线demo中的三个参数,注意控制变量调节参数

    1. 首先调节box_thresh参数,该参数用来控制文本检测部分检测所得框是文本的概率。个别字丢失,一般是单独的字丢失,很大可能是文本检测模型没有检测到该独立的文字。尝试调低box_thresh值,查看是否可以检出丢失的文字。(没有找到合适的例子)
    2. 固定box_thresh,调节text_score参数。该参数是控制识别文本结果正确的概率。尝试调低text_score值,查看是否可以识别出丢失的文字。
    3. 固定box_threshtext_score两个参数,调节unclip_ratio参数。该参数用来控制文本检测所得文本框的大小。尝试调大unclip_ratio值,查看是否可以识别出丢失的文字。
  4. 如果调节三个参数也不能解决问题,只能尝试server版的文本检测和文本识别模型了。

    1. 首先更换server版的文本检测模型,查看是否解决问题
    2. 在第1步基础上,更换server版的文本识别模型,查看是否解决问题
  5. 尝试更换不同版本模型,来查看效果。具体可在在线demo中尝试

个别字识别错误调优篇

  • 个别字错误的情况,例如:识别为,这种一般是文本识别模型的问题。
情况一:轻量中英文模型识别对个别汉字识别错误
  1. 尝试padding图像,再重新识别
  2. 更换不同版本的识别模型,包括v2v3server版尝试
情况二:轻量中英文模型对个别英文或数字识别错误
  1. 更换不同版本的识别模型,包括v2v3server版尝试
  2. 如果是只识别英文单词和数字,可以更换英文和数字专有模型(en_PP-OCRv3_rec_infer.onnxen_number_mobile_v2.0_rec_infer.onnx

相关链接

### RapidOCR 的训练教程和配置方法 #### 关于RapidOCR的概述 在 RapidOCR 中,启动文件通常是 `src` 目录下的一个 Python 脚本或者 Python 模块,例如 `main.py` 或者 `run_ocr.py`。这个文件通常包含了导入所需的包,比如 RapidOCR 类;初始化 RapidOCR 对象,可能需要指定语言或其他参数等内容[^1]。 然而,对于具体的训练过程,官方文档或现有资料中并未直接提及详细的训练流程。基于相似项目的实践经验和架构设计原理可以推测出一般性的训练步骤如下: #### 准备工作 为了准备训练环境,建议先熟悉 PaddleOCR 项目,因为 RapidOCR 可能借鉴了其设计理念和技术栈。PaddleOCR 是百度的一个开源项目,旨在提供丰富的、领先的以及实用的 OCR 工具库,这有助于理解如何构建高效的 OCR 应用程序[^2]。 #### 数据集收集与预处理 - **数据获取**:确保拥有足够的标注过的图像样本用于训练。 - **格式转换**:将原始图片及其对应的标签转化为适合输入给定框架的形式。 ```python from paddleocr import DatasetConverter converter = DatasetConverter() dataset_path = 'path_to_your_dataset' output_format = 'lmdb' # or other supported formats like txt, etc. converter.convert(dataset_path, output_format=output_format) ``` #### 配置模型结构及超参整 依据实际需求定制化网络层定义,并通过实验寻找最解来化性能指标。此阶段涉及但不限于学习率设定、批次大小选择等方面的工作。 #### 开始训练 一旦完成了上述准备工作之后就可以着手编写训练脚本来执行整个流程了。下面给出一段简单的伪代码作为参考实现方式之一: ```python import paddle from rapidocr import Trainer, Configurator config_file = './configs/train_config.yaml' trainer = Trainer(Configurator(config_file)) # 加载自定义的数据集 train_loader = trainer.load_data('training_set') val_loader = trainer.load_data('validation_set') # 启动训练循环 for epoch in range(num_epochs): for batch_idx, (images, labels) in enumerate(train_loader): loss = trainer.train_step(images, labels) if batch_idx % log_interval == 0: print(f'Train Epoch: {epoch} [{batch_idx}/{len(train_loader)}]\tLoss: {loss.item()}') val_loss = trainer.validate(val_loader) print(f'\nValidation Loss after Epoch {epoch}: {val_loss}\n') print("Training completed.") ``` 请注意以上代码仅为示意用途,在真实环境中还需要考虑更多细节因素如错误处理机制等。 #### 测试评估 完成一轮或多轮迭代更新后应当利用测试集合验证最终成果的有效性和可靠性,从而决定是否继续或是部署上线。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值