RapidOCR调优尝试教程

news2025/1/20 16:26:40

目录

      • 引言
      • 常见错例种类
      • 个别字丢失调优篇
      • 个别字识别错误调优篇
        • 情况一:轻量中英文模型识别对个别汉字识别错误
        • 情况二:轻量中英文模型对个别英文或数字识别错误
      • 相关链接

引言

  • 由于小伙伴们使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434636.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qt6.2.4下载在线安装

前言 qt官网声明5.15版本以后不提供安装包安装,均需在线安装:Due to The Qt Company offering changes, open source offline installers are not available any more since Qt 5.15。此文主要记录在线安装方法及遇到问题解决方式。 一. 在线安装执行文…

mingw32-make -j$(nproc) 命令含义

系列文章目录 文章目录 系列文章目录前言一、具体操作二、使用步骤 前言 在使用krita源码编译时遇到报错: 这段代码是 Krita 源码中的一个 CMakeLists.txt 文件片段,用于配置 Krita 项目的构建系统。以下是对这段代码的解释: find_package(…

如何写科技论文?(以IEEE会议论文为例)

0. 写在前面 常言道,科技论文犹如“八股文”,有固定的写作模式。本篇博客主要是针对工程方面的论文的结构以及写作链条的一些整理,并不是为了提高或者润色一篇论文的表达。基本上所有的论文,都需要先构思好一些点子,有…

一文带你快速了解业务流程分析和流程建模

🔥业务流程分析与建模 01业务流程分析要了解的问题 有哪些业务流程?业务流程如何完成?业务流程有谁参与?流程中有哪些控制流(如判断、 同步分支和会合)?多个不同流程建的关系?完成…

JUC线程池之线程池架构

JUC线程池之线程池架构 在多线程编程中,任务都是一些抽象且离散的工作单元,而线程 是使任务异步执行的基本机制。随着应用的扩张,线程和任务管理也 变得非常复杂。为了简化这些复杂的线程管理模式,我们需要一个 “管理者”来统一…

SOLIDWORKS Composer如何实现可视化产品交互

SOLIDWORKS Composer是一款让工程师和非工程人员都能够直接访问 3D CAD 模型、并为技术交流材料创建图形内容的 3D 软件。现如今很多制造型企业都已逐步实现其产品设计流程的自动化,以期比竞争对手更快进入市场。但遗憾的是在很多企业中,技术交流内容&am…

Android之修改Jar包源码后再重新打Jar包

一、找到jar包使用框架的github源码,并下载 例如:原有jar包 找到框架源码的github地址: https://github.com/eclipse/paho.mqtt.android 使用git拉取源码项目到本地 二、New Module — 选择Java or Kotlin Library新建 (1&…

RabbitMQ安装教程

目录 Erlang官网 Erlang下载 RabbitMQ官网 windows RabbitMQ docker安装rabbitmq 最近入职新公司,要求会RabbitMQ,所以自学了一下,现将自学的结果总结如下: 安装RabbitMQ之前,需要先安装 Erlang,因为RabbitMQ使用…

【C++初阶】缺省参数与函数重载

一.缺省参数 C祖师爷在用C写代码的时候,就觉得有些地方用着很不方便,于是就在C设计了缺省参数,在实现一些功能时,用这个就方便了许多。 1.概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff1a…

强训之【井字棋和密码强度等级】

目录 1.井字棋1.1题目1.2思路讲解1.3代码展示 2.密码强度判断2.1题目2.2思路讲解2.3代码 3.选择题 1.井字棋 1.1题目 链接: link 描述 给定一个二维数组board,代表棋盘,其中元素为1的代表是当前玩家的棋子,0表示没有棋子,-1代表…

C/C++每日一练(20230419)

目录 1. 插入区间 2. 单词拆分 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 插入区间 给你一个 无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间…

数据分析实战(二百零四):项目分析思路 —— 某线下连锁水果店销售数据分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 文章目录 一、问题确认与指标拆解:业务逻辑图 一、问题确认与指标拆解:业务逻辑图 版权声明:本文为博主原创文章,未经博主允许不得转载。

高精度(加法+减法+除法+乘法)合集

由于c/c语言特性,当数很大时,就要考虑精度问题,python和java则不用,因此c学会精度运算很重要的,这里作个总结 1.高精度加法 给定两个正整数(不含前导 0),计算它们的和。 输入格式…

一定要会的算法复杂度分析

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"! 原作者:s09g|慕课网讲师 我们知道面对同一道问题时可能有多种解决方案。自然地,我们会将多种方法进行比较。那么…

【Linux】网络协议(应用层与传输层)

应用层传输层协议 应用层HTTP协议格式请求格式响应格式头部字段中的 Cookie (请求头) & Set-Cookie(响应头)cookiesession:会话cookie vs session HTTPS 协议:对 HTTP 协议进行加密 传输层UDP 协议TCP 协议 应用层 序列化:指将多个数组对…

使用shell封装Linux命令实现自定义Linux命令

前言 在日常工作中,尤其是在Linux上做开发的同学或者运维的同学们肯定会遇到过如下场景,比如在Linxu下通过find查找一个文件并且想看这个文件的详细信息,如果直接使用命令可能会一时想不起来,或者想起来了但是有个别参数忘记了。…

SpringMVC02注解与Rest风格

SpringMVC02 SpringMVC的注解 一、RequestParam 1、RequestParam注解介绍 位置:在方法入参位置作用:指定参数名称,将该请求参数 绑定到注解参数的位置属性 name:指定要绑定的请求参数名称; name属性和value属性互为…

vue-quill-editor富文本编辑框使用

vue富文本中实现上传图片及修改图片大小等功能。 1&#xff0c;配置使用 配置使用网上很多&#xff0c;记录下自己的使用过程 第一步&#xff1a;components/Editor文件夹下创建QuillEditor.vue文件 <template><div :class"prefixCls"><quill-edito…

bitset的用法

bitset的用法 bitset介绍 C的 bitset 在 bitset 头文件中&#xff0c;它是一种类似数组的结构&#xff0c;它的每一个元素只能是&#xff10;或&#xff11;&#xff0c;每个元素仅用&#xff11;bit空间&#xff0c;相当于一个char元素所占空间的八分之一。 bitset中的每个…

MyBatis-Plus Generator v3.5.1 最新代码自动生成器

一、概述 官网&#xff1a;https://baomidou.com/ 官方文档 &#xff1a;https://baomidou.com/pages/56bac0/ 官方源码地址&#xff1a; https://gitee.com/baomidou/mybatis-plus 官方原话&#xff1a; AutoGenerator 是 MyBatis-Plus 的代码生成器&#xff0c;通过 Auto…