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

embedded/2025/1/8 4:40:33/

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

PaddleOCR__2">PaddleOCR 在线测试地址

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

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

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

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


PaddleOCR__18">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-slimRUN 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.txtWORKDIR /appCOPY . /appCMD ["tail", "-f", "/dev/null"]

2. 测试代码

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

python">from paddlex import create_pipeline
import cv2pipeline = 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 支持高精度版本模型,需手动下载对应模型文件:

  • PP-OCRv4_server_det(文本检测模块)
  • PP-OCRv4_server_rec(文本识别模块)

将下载的模型文件解压到 /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: OCRinput: https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_001.pngPipeline:# text_det_model: PP-OCRv4_mobile_det# text_rec_model: PP-OCRv4_mobile_rectext_det_model: PP-OCRv4_server_dettext_rec_model: PP-OCRv4_server_rectext_rec_batch_size: 1

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

python">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优化 和 自定义 模型训练 使用方法,敬请期待!


http://www.ppmy.cn/embedded/152186.html

相关文章

VVenC 编码器源码结构与接口函数介绍

VVenC VVenC(Fraunhofer Versatile Video Encoder)是由德国弗劳恩霍夫海因里希研究所(Fraunhofer Heinrich Hertz Institute, HHI)开发的一个开源的高效视频编码器。它实现了最新的视频编码标准——Versatile Video Coding (VVC)…

flink的EventTime和Watermark

时间机制 Flink中的时间机制主要用在判断是否触发时间窗口window的计算。 在Flink中有三种时间概念:ProcessTime、IngestionTime、EventTime。 ProcessTime:是在数据抵达算子产生的时间(Flink默认使用ProcessTime) IngestionT…

ESP32模组物联网方案,高性能通信无线交互,设备智能化升级应用

随着物联网技术的迅猛发展,我们的生活和工作方式正在发生众多变化。智能家居和工业自动化作为物联网应用的两大支柱,正在深刻地影响着我们的日常。 从家中的智能插座到工厂里的自动化生产线,物联网设备无处不在,它们通过无线网络…

EasyExcel监听器详解

EasyExcel监听器详解 EasyExcel 监听器概述 EasyExcel 是一个 Java 语言编写的简单易用的 Excel 操作框架。它的监听器机制允许开发者在读取或写入 Excel 文件时,以事件驱动的方式来处理数据,而不是一次性将整个 Excel 文件的数据加载到内存中。这种方式…

【超详细】前后端项目部署(原始Nginx+SpringBoot)

前后端项目部署原始[NginxSpringBoot] 一、前端部署 安装Nginx 下载源代码安装包并解压进入nginx目录并设置系统配置参数编译安装加环境变量查看nginx运行状态修改nginx配置文件 上传前端项目 解压 修改nginx配置公网访问 二、后端部署 安装Java安装Maven上传后端项目 Maven打…

CDN SSLTLS以及安全

随着互联网的发展,内容分发网络(CDN)在提升网站访问速度和安全性方面发挥了重要作用。然而,CDN在带来便利的同时也面临一些安全挑战。本文将探讨CDN的安全风险,并深入解析SSL/TLS加密技术及其在CDN中的应用。 CDN的安全…

Android折叠屏适配(权宜之计)

现在折叠屏手机出了也有一段时间了,但是除了大厂app,其他app适配折叠屏还是比较少,如果真的想做好折叠屏完全适配,那这个文章可能并不适合,这里只是一个简单适配的思路。 如果原先你的app已经适配了平板,那…

四种线程池的创建及任务提交

1. 线程池概述 1.1 线程池的定义 线程池是管理和控制线程使用的一种手段。它通过提前创建一定数量的线程,并将任务提交给这些线程执行,来实现资源的合理分配和任务的高效处理。 关键点: 线程复用:线程池在任务执行完毕后&#…