最好用的图文识别OCR -- PaddleOCR(1) 快速集成


最近在项目中遇到了 OCR 的需求,希望能够实现高效而准确的文字识别。由于预算限制,我并未选择商业付费方案,而是优先尝试了开源工具。一开始,我测试了 GOT-OCR2.0,但由于我的 Mac 配置较低,不支持 GPU 运算,最终未能成功配置。于是,我转而尝试了百度飞桨AI的 PaddleOCR。经过实际测试,不仅配置过程相对顺利,其识别精度也显著优于 GOT-OCR2.0,最终选择了 PaddleOCR 作为解决方案。以下是我的配置与使用记录。

PaddleOCR 在线测试地址

PaddleOCR 提供了在线测试平台,方便快速验证模型效果:
https://aistudio.baidu.com/community/app/91660/webUI?source=appMineRecent

同一张图片在高效模型与高精度模型的推理结果之间可能存在差异:
高效率版本:
高效率版本推理结果

高精度版本:
高精度版本推理结果

接下来,我将分别介绍高效版本与高精度版本的安装与运行。


PaddleOCR 环境配置

PaddleOCR 建议使用 PaddleX 进行产线集成,其支持快速实现 OCR 的核心模块:

1. 安装 PaddlePaddle

根据硬件环境选择 CPU 或 GPU 版本安装:

# CPU 版本
python -m pip install paddlepaddle==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/

# GPU 版本(根据 CUDA 版本选择)
python -m pip install paddlepaddle-gpu==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/  # CUDA 11.8
python -m pip install paddlepaddle-gpu==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cu123/  # CUDA 12.3

2. 安装 PaddleX

PaddleX 是基于飞桨的低代码开发工具,支持从模型训练到推理的全流程。安装命令如下:

pip install paddlex==3.0.0b2

基于 Docker 的运行环境搭建

以下是基于 Docker 构建的 PaddleOCR 环境,适合本地调试与部署:

1. Dockerfile 配置

FROM python:3.10-slim

RUN apt-get update && apt-get install -y  \
    git \
    libgl1-mesa-glx \
    libglib2.0-0 \
    ccache \
    && rm -rf /var/lib/apt/lists/*

RUN pip install --no-cache-dir --upgrade pip \
    && pip install paddlepaddle==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/ \
    && pip install paddlex==3.0.0b2

# RUN pip install --no-cache-dir -r requirements.txt

WORKDIR /app

COPY . /app

CMD ["tail", "-f", "/dev/null"]

2. 测试代码

创建 test.py,验证 OCR 推理流程:

from paddlex import create_pipeline
import cv2

pipeline = create_pipeline(pipeline="OCR")

img_name = "img1"

# 兼容 webp 格式的图片进行输入
#image = cv2.imread(f"../tb-img/{img_name}.webp")
#output = pipeline.predict(image)

output = pipeline.predict(f"../tb-img/{img_name}.jpg")
for res in output:
    res.print()
    res.save_to_img(f"./output/{img_name}.jpg")
    res.save_to_json(f"./output/{img_name}.json")

高效率版本(PP-OCRv4_mobile)推理结果

首次运行普通版本时,PaddleX 将自动下载默认的模型文件并保存至 /root/.paddlex/official_models 目录。
首次运行时 paddlex 会自动下载OCR产线文本检测模块(PP-OCRv4_mobile_det) 文本识别模块(PP-OCRv4_mobile_rec) 两个模型,并自动保存到 /root/.paddlex/official_models 目录下。

高效率版本的推理结果如下:

在这里插入图片描述

在这里插入图片描述


高精度版本(PP-OCRv4_server)模型配置

PaddleOCR 支持高精度版本模型,需手动下载对应模型文件:

将下载的模型文件解压到 /root/.paddlex/official_models/ 目录下:

在这里插入图片描述

配置高精度版本

生成并修改 OCR.yaml 文件:

#生成配置文件到当前目录
paddlex --get_pipeline_config OCR

#若希望自定义保存位置,可执行如下命令(假设自定义保存位置为./my_path)
#paddlex --get_pipeline_config OCR --save_path ./my_path

编辑配置文件 OCR.yaml

Global:
  pipeline_name: OCR
  input: https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_001.png
  
Pipeline:
  # text_det_model: PP-OCRv4_mobile_det
  # text_rec_model: PP-OCRv4_mobile_rec
  text_det_model: PP-OCRv4_server_det
  text_rec_model: PP-OCRv4_server_rec
  text_rec_batch_size: 1

test.py 中指定配置文件路径:

from paddlex import create_pipeline

#指定配置文件
pipeline = create_pipeline(pipeline="../OCR.yaml",device='cpu')

img_name = "img1"
output = pipeline.predict(f"../tb-img/{img_name}.jpg")
for res in output:
    res.print()
    res.save_to_img(f"./output/{img_name}.jpg")
    res.save_to_json(f"./output/{img_name}.json")

高精度推理结果

高精度版本的推理结果如下:
高精度版本推理结果1
高精度版本推理结果2


通过以上步骤,可以快速集成 PaddleOCR 并根据需求选择高效或高精度版本。后续我将分享更多关于 PaddleOCR优化 和 自定义 模型训练 使用方法,敬请期待!

### PaddleOCR 推理性能优化 #### 一、分析耗时原因 推理过程中的时间消耗不稳定通常由多种因素引起,包括但不限于硬件资源波动、软件环境配置不当以及模型本身的复杂度。对于PaddleOCR而言,在不同场景下应用蒸馏、剪枝和量化技术可以有效提升效率并减少延迟[^1]。 #### 二、具体解决方案 ##### 1. 使用轻量级网络结构 通过采用更高效的神经网络架构来降低计算成本是一个有效的策略。例如,PP-OCR系列提供了多个版本的文字检测与识别算法供选择,其中一些较新的变体如SVTRNet相比早期版本具有更好的速度表现[^2]。 ##### 2. 应用模型压缩方法 为了进一步提高运行效率,可以在不影响精度的前提下对已训练好的模型实施剪枝操作去除冗余连接;或者利用知识蒸馏将大型教师模型的知识迁移到小型学生模型上;还可以考虑权重裁剪后的INT8量化处理方式以加速预测阶段的数据传输速率。 ##### 3. 配置合理的输入尺寸 适当调整图片送入到识别模块之前的预处理环节非常重要。根据实际需求设定合适的`--rec_image_shape`参数值能够帮助平衡准确率同推断速度之间的关系。比如,默认情况下PP-OCRv3会期望接收形状为(3,48,320)的图像作为输入,但如果应用场景允许的话,略微缩小高度或宽度可能会带来意想不到的效果改进[^3]。 ##### 4. 利用多线程或多GPU支持 如果目标平台具备足够的算力基础,则不妨尝试开启多进程模式或是分布式部署方案来进行批量数据处理工作。这不仅有助于充分利用现有设备潜能,而且能在一定程度上缓解单次请求响应时间过长的问题。 ```python from paddleocr import PaddleOCR # 初始化时指定use_gpu=True启用GPU加速,并可选地设置gpu_mem=xxx控制显存占用比例 ocr = PaddleOCR(use_angle_cls=True, lang='ch', use_gpu=True) result = ocr.ocr('path_to_your_image') ``` #### 三、持续监控与调优 最后但同样重要的是建立一套完善的日志记录机制用于跟踪每次执行期间的各项指标变化情况,从而便于后续针对性地开展精细化调节措施直至达到预期的服务水平标准为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值