当前位置: 首页 > news >正文

在 `PaddleOCR` 中配置自定义模型(如自己训练的检测/识别模型)

PaddleOCR 中配置自定义模型(如自己训练的检测/识别模型),需要明确模型路径、确保文件完整,并在初始化时通过参数指定。以下是详细步骤:

一、准备自定义模型文件

自定义模型需包含 PaddleOCR 要求的完整文件结构,否则会加载失败。具体要求:

1. 模型文件组成(每个模型都需要)
  • 检测模型(如文本定位):
    文件夹内必须包含:

    • inference.pdmodel(模型结构文件)
    • inference.pdiparams(模型参数文件)
    • inference.yml(模型配置文件,记录输入尺寸、预处理方式等)
  • 识别模型(如文本内容识别):
    文件夹内文件同上(3个核心文件)。

  • 方向分类器模型(可选,用于判断文本方向):
    文件夹内文件同上。

2. 示例目录结构

假设你的自定义模型放在项目的 models 文件夹下,结构如下:

project/
├── models/
│   ├── det_model/  # 自定义检测模型
│   │   ├── inference.pdmodel
│   │   ├── inference.pdiparams
│   │   └── inference.yml
│   └── rec_model/  # 自定义识别模型
│       ├── inference.pdmodel
│       ├── inference.pdiparams
│       └── inference.yml
└── your_script.py  # 你的Python脚本

二、在代码中配置自定义模型

通过 PaddleOCR 初始化时的参数,指定自定义模型的路径。核心参数:

  • det_model_dir:自定义检测模型文件夹路径
  • rec_model_dir:自定义识别模型文件夹路径
  • cls_model_dir:自定义方向分类器模型文件夹路径(若启用)
示例代码
from paddleocr import PaddleOCR# 配置自定义模型路径(绝对路径或相对路径均可)
det_model_path = "./models/det_model/"  # 检测模型文件夹
rec_model_path = "./models/rec_model/"  # 识别模型文件夹# 初始化OCR,指定自定义模型
ocr = PaddleOCR(# 检测模型配置det_model_dir=det_model_path,# 识别模型配置rec_model_dir=rec_model_path,# 若有自定义分类器,添加以下参数# cls_model_dir="./models/cls_model/",# 其他必要参数use_angle_cls=True,  # 启用方向检测(若用分类器)lang="ch",  # 语言类型(需与模型训练语言一致)show_log=False  # 关闭日志(可选)
)# 使用自定义模型识别图片
img_path = "test_receipt.jpg"  # 待识别图片
result = ocr.ocr(img_path, cls=True)  # cls=True 启用方向分类# 打印识别结果
for line in result:text = line[1][0]  # 文本内容score = line[1][1]  # 置信度print(f"识别结果:{text},置信度:{score:.2f}")

三、关键注意事项

  1. 路径正确性

    • 确保 det_model_dir/rec_model_dir 指向的文件夹中,确实存在 inference.pdmodelinference.pdiparamsinference.yml 三个文件
    • 路径中避免中文、空格或特殊字符(可能导致解析错误,建议用英文路径)。
    • 相对路径是相对于脚本运行目录的,可通过 print(os.getcwd()) 查看当前目录,避免路径错误。
  2. 模型与配置匹配

    • inference.yml 中的配置(如输入图片尺寸、归一化参数)必须与模型训练时的设置一致,否则会导致识别精度骤降或报错。
    • 若自定义模型是基于 PaddleOCR 官方代码训练的,导出推理模型时会自动生成 inference.yml,无需手动修改。
  3. 语言类型匹配

    • lang 参数需与自定义模型训练时的语言一致(如训练的是英文模型,lang="en";中文模型用 lang="ch"),否则可能出现乱码。
  4. 混合使用自定义与默认模型
    若只想替换其中一个模型(如用自定义检测模型+官方识别模型),只需指定对应参数,未指定的参数会自动使用默认模型:

    # 仅使用自定义检测模型,识别模型用官方默认
    ocr = PaddleOCR(det_model_dir="./models/det_model/", rec_model_dir=None)
    

四、常见错误及解决

  1. “No such file or directory: … inference.yml”
    → 原因:模型文件夹中缺少 inference.yml,或路径错误。
    → 解决:重新下载/导出完整模型,核对路径是否正确。

  2. “Model format error” 或识别结果乱码
    → 原因:模型文件损坏,或 inference.yml 配置与模型不匹配。
    → 解决:重新导出模型,确保训练和导出流程正确。

  3. “Could not find xxx in the model”
    → 原因:模型类型与任务不匹配(如用识别模型当检测模型)。
    → 解决:确认 det_model_dir 放检测模型,rec_model_dir 放识别模型。

通过以上步骤,即可在 PaddleOCR 中成功配置并使用自定义模型,实现个性化的文本检测与识别需求。

在 CPU 环境下使用 PaddleOCR 时,识别速度较慢是常见问题,主要受限于 CPU 计算能力和模型复杂度。以下是经过验证的优化方法,可显著提升速度(按效果优先级排序):

一、使用轻量级模型(最有效)

PaddleOCR 提供不同量级的模型,轻量版模型(Mobile 版)的速度远快于高精度版,适合 CPU 环境:

1. 切换为轻量版模型

默认情况下,PaddleOCR 可能使用轻量模型,但若手动指定了高精度模型,需切换:

from paddleocr import PaddleOCR# 明确使用轻量版模型(中文为例)
ocr = PaddleOCR(use_angle_cls=True,lang="ch",# 轻量版检测模型(默认):ch_PP-OCRv5_det_infer# 轻量版识别模型(默认):ch_PP-OCRv5_rec_infershow_log=False
)
  • 轻量版模型(如 PP-OCRv5 Mobile)体积小、计算量低,CPU 上速度提升 2-3 倍。
  • 高精度模型(如 PP-OCRv5 Server)适合 GPU,CPU 上会很慢,非必要不使用。

二、降低图片分辨率(性价比高)

大尺寸图片(如 4000x3000 像素)会显著增加计算量,缩小图片尺寸可大幅提升速度,且对文字较大的场景(如单据、文档)影响较小:

1. 代码中预处理图片
from paddleocr import PaddleOCR
from PIL import Image
import numpy as npdef resize_image(img_path, max_side_len=1024):"""将图片最长边缩放到 max_side_len,保持比例"""img = Image.open(img_path).convert("RGB")w, h = img.size# 计算缩放比例scale = max_side_len / max(w, h)if scale < 1:new_w, new_h = int(w * scale), int(h * scale)img = img.resize((new_w, new_h), Image.LANCZOS)  # 高质量缩放return np.array(img)# 初始化 OCR
ocr = PaddleOCR(use_angle_cls=True, lang="ch", show_log=False)# 处理图片并识别
img = resize_image("receipt.jpg", max_side_len=1024)  # 最长边不超过1024
result = ocr.ocr(img, cls=True)
  • 推荐 max_side_len=800-1200(根据文字大小调整,文字越小,尺寸不宜过小)。
  • 对比:4000x3000 图片缩放到 1000x750 后,速度可提升 3-5 倍。

三、关闭不必要的功能

1. 关闭方向分类器(cls=False

若单据文本方向固定(如均为水平),可关闭方向检测(cls=False),减少一次模型推理:

ocr = PaddleOCR(use_angle_cls=False, lang="ch")  # 关闭方向分类
result = ocr.ocr(img_path, cls=False)  # 不执行方向检测
  • 速度提升:约 10-20%(方向分类器占总耗时的一部分)。
  • 注意:若文本可能倾斜(如手写单据),关闭后会降低识别准确率。
2. 减少识别候选框数量

通过检测模型参数限制文本框数量(适合文本稀疏的场景):

ocr = PaddleOCR(det_limit_side_len=1024,  # 检测时图片最大边长(同 resize 效果)det_db_thresh=0.3,  # 检测阈值(值越高,检测出的文本框越少)show_log=False
)
  • det_db_thresh 调大(如 0.3→0.5),会过滤低置信度文本框,减少后续识别压力。

四、使用 ONNX 推理引擎(加速 20-50%)

PaddleOCR 支持 ONNX 格式模型,配合 onnxruntime 引擎,CPU 上速度比原生 Paddle 引擎更快:

1. 安装 ONNX 相关依赖
pip install onnxruntime paddle2onnx
2. 转换模型为 ONNX 格式(仅需一次)
from paddle2onnx import convert# 转换检测模型(以轻量版为例)
convert(model_dir="./ch_PP-OCRv5_det_infer",  # 原 Paddle 模型目录save_file="./onnx/det_model.onnx",input_shape_dict={"x": [1, 3, -1, -1]},  # 动态输入尺寸opset_version=11
)# 转换识别模型
convert(model_dir="./ch_PP-OCRv5_rec_infer",save_file="./onnx/rec_model.onnx",input_shape_dict={"x": [1, 3, 48, -1]},opset_version=11
)
3. 使用 ONNX 引擎加载模型
from paddleocr import PaddleOCRocr = PaddleOCR(det_model_dir="./onnx/det_model.onnx",  # ONNX 检测模型rec_model_dir="./onnx/rec_model.onnx",  # ONNX 识别模型use_onnx=True,  # 启用 ONNX 引擎show_log=False
)
  • 优势:onnxruntime 对 CPU 优化更好(如支持 MKL-DNN 加速),尤其在多线程下效率更高。

五、启用多线程/多进程(批量处理时)

若需批量识别多张图片,使用多线程或进程池并行处理,充分利用 CPU 多核:

1. 多线程示例(适合 I/O 密集型场景)
import threading
from paddleocr import PaddleOCRocr = PaddleOCR(use_angle_cls=True, lang="ch", show_log=False)
img_list = ["img1.jpg", "img2.jpg", "img3.jpg"]  # 批量图片
results = []def ocr_task(img_path):results.append(ocr.ocr(img_path, cls=True))# 启动多线程
threads = [threading.Thread(target=ocr_task, args=(img,)) for img in img_list]
for t in threads:t.start()
for t in threads:t.join()print(results)  # 批量结果
  • 注意:Python 多线程受 GIL 限制,CPU 密集型任务建议用 multiprocessing 多进程。

六、其他细节优化

  1. 关闭日志输出show_log=False 减少 I/O 耗时。
  2. 使用最新版本PaddleOCRpaddlepaddle 不断优化 CPU 支持,更新到最新版(pip install -U paddleocr paddlepaddle)。
  3. 裁剪 ROI 区域:若只需识别单据中的特定区域(如编号所在位置),提前裁剪图片,减少无效区域计算。

效果总结

组合以上方法(轻量模型 + 图片缩放 + ONNX 引擎),CPU 环境下的识别速度可提升 3-10 倍,基本能满足日常单据处理需求。若仍不满足,可考虑升级到高性能 CPU(如 Intel i7/i9 或 AMD Ryzen),或在关键场景引入 GPU 加速。

http://www.dtcms.com/a/541013.html

相关文章:

  • 云谷系统网站开发网站备案要收费吗
  • 前端页面初始化加载速度优化方案
  • 【数据库】金仓数据库构建集团化医院全栈信创“全链路解决方案”
  • MATLAB基于自适应动态特征加权的K-means算法
  • 我的Dify OCR 识别发票准确率测试工具
  • 免费域名申请网站大全封面型网站首页怎么做
  • 专业的网站建设化妆品备案
  • 详解使用CodeBuddy解决高难度项目问题
  • Days.js实时更新时间格式文案在切换全局语言之后的方案
  • 网站icp备案时间网站营销网站营销推广
  • 广州官方宣布网络公司网站优化网站建设
  • 【黑马点评|2 Redis缓存 面试题】
  • 大学学院教授委员会制度研究(二)理论基础与分析框架-杨立恒毕业论文
  • Nginx基础入门篇-基础配置
  • 雅可比SVD算法:高精度矩阵分解的经典方法
  • 在 Python 中测试中assert断言和 if分支的区别
  • 【题解】洛谷 P1169 [ZJOI2007] 棋盘制作 [思维 + dp]
  • 音频限幅器D2761使用手册
  • 网站金融模版wordpress轮播代码
  • 【工具推荐】电脑手机多端互通协作实用
  • 一般网站的跳出率dede做双语网站
  • 自己制作的网站如何发布建筑设计公司经营范围有哪些
  • 51c大模型~合集39
  • 操作【GM3568JHF】FPGA+ARM异构开发板 使用指南:串口
  • 【牛客CM11】链表分割
  • .NET 对象转Json的方式
  • 广西住建局官方网站大数据营销的应用领域
  • Linux ioctl 深度剖析:从原理到实践
  • 网站备案流程解答做最漂亮的网站
  • LED驱动电路(三)