最好用的图文识别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-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 推理流程:
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 中指定配置文件路径:
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")
高精度推理结果
高精度版本的推理结果如下:


通过以上步骤,可以快速集成 PaddleOCR 并根据需求选择高效或高精度版本。后续我将分享更多关于 PaddleOCR 的 优化 和 自定义 模型训练 使用方法,敬请期待!
相关文章:
最好用的图文识别OCR -- PaddleOCR(1) 快速集成
最近在项目中遇到了 OCR 的需求,希望能够实现高效而准确的文字识别。由于预算限制,我并未选择商业付费方案,而是优先尝试了开源工具。一开始,我测试了 GOT-OCR2.0,但由于我的 Mac 配置较低,不支持 GPU 运算…...
Unity制作3D场景的脑电运动想象范式(左右手抓握)
使用Unity制作3D场景中的运动想象范式 3D技术可以创建出立体的图像和环境,给用户带来更加真实和沉浸式的体验,本文介绍了一种可控的左右手运动的3D场景范式的设计流程,用于被试在3D场景下完成运动想象脑电信号数据的采集。 目录 1.制作动画…...
python23-常用的第三方库01:request模块-爬虫
requests 模块是 Python 中的一个第三方库,用于发送 HTTP 请求。 它提供了一个简单且直观的 API,使得发送网络请求和解析响应变得非常容易。requests 模块支持各种 HTTP 方法,如 GET、POST、PUT、DELETE 等,并且具有处理 cookies…...
CAT3D: Create Anything in 3D with Multi-View Diffusion Models 论文解读
24年5月的论文,上一版就是ReconFusion 目录 一、概述 二、相关工作 1、2D先验 2、相机条件下的2D先验 3、多视角先验 4、视频先验 5、前馈方法 三、Method 1、多视角扩散模型 2、新视角生成 3、3D重建 一、概述 该论文提出一种CAT3D方法,实现…...
持续学习入门
参考视频(一) 【学无止境:深度连续学习】 背景 更新新的数据时,数据异步输入,会有灾难性遗忘 现有解决策略 (1)引入正则约束(2)设计合适的动态模型架构 ÿ…...
天猫推荐数据集实践
参考自 https://github.com/xufengtt/recom_teach_code,学习记录。 环境配置(maxcomputedataworks) 下载天猫推荐数据集;开启 aliyun 的 maxcompute,dataworks,pai;使用 odpscmd 上传本地数据…...
《Vue3实战教程》33:Vue3路由
如果您有疑问,请观看视频教程《Vue3实战教程》 路由 客户端 vs. 服务端路由 服务端路由指的是服务器根据用户访问的 URL 路径返回不同的响应结果。当我们在一个传统的服务端渲染的 web 应用中点击一个链接时,浏览器会从服务端获得全新的 HTML&…...
【大模型系列】MultiUI(2024.11)
Paper:https://arxiv.org/pdf/2410.13824Github:https://neulab.github.io/MultiUI/Author:Junpeng Liu et al., 卡内基梅隆 核心1: 先基于text-based LLMs获取网页的accessibility tree(辅助功能树,https://200t.w3c…...
「Mac畅玩鸿蒙与硬件52」UI互动应用篇29 - 模拟火车票查询系统
本篇教程将实现一个模拟火车票查询系统,通过输入条件筛选车次信息,并展示动态筛选结果,学习事件处理、状态管理和界面展示的综合开发技巧。 关键词 条件筛选动态数据展示状态管理UI交互查询系统 一、功能说明 模拟火车票查询系统包含以下功…...
Dubbo 核心知识全解析:原理、流程与关键机制
1.说说一次 Dubbo 服务请求流程? Dubbo 是一个分布式服务框架,它简化了基于 SOA(面向服务架构)的应用程序的开发。一次典型的 Dubbo 服务请求流程如下: 服务提供者启动: 服务提供者启动后,会向注册中心注册…...
时间序列预测算法---LSTM
目录 一、前言1.1、深度学习时间序列一般是几维数据?每个维度的名字是什么?通常代表什么含义?1.2、为什么机器学习/深度学习算法无法处理时间序列数据?1.3、RNN(循环神经网络)处理时间序列数据的思路?1.4、RNN存在哪些问题? 二、…...
二十三种设计模式-建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种分步骤构建复杂对象的方法。这种模式允许你通过相同的创建过程构建不同的表示。建造者模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的对象…...
MarkDown 的 mermaid gantt(甘特图)、mermaid sequenceDiagram (流程图) 语法解析和应用
简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 MarkDown 的 mermaid gantt、mermaid sequenceDiagram 语法解析和应用前言mermaid gan…...
git submodule的使用:将别人的git仓库作为自己的子仓库
git的基本操作在该篇中展示:git的基本操作在日常开发中,我们经常会碰到需要将别人的仓库作为自己的子仓库来进行开发。下面将介绍具体将如何操作。 1、添加Submodule至自己的git仓库 1.1、创建自己的Git仓库 (1)在github中创建自…...
Springboot 下载附件
GetMapping("/download") public void download(RequestParam String fileId, HttpServletResponse response) throws IOException {// 查询文件信息SysFileEntity sysFileEntity fileService.queryFileById(fileId);response.setContentType("application/oct…...
MySQL 延迟复制:确保数据安全与系统稳定的秘诀
MySQL 延迟复制:确保数据安全与系统稳定的秘诀 在 MySQL 主从复制架构中,数据的同步通常是实时的。然而,在一些特定场景下,我们可能不希望从库立刻同步主库的所有更新。特别是在高风险操作或者主库出现故障时,实时复制…...
ELK 使用教程采集系统日志 Elasticsearch、Logstash、Kibana
前言 你知道对于一个系统的上线考察,必备的几样东西是什么吗?其实这也是面试中考察求职者,是否真的做过系统开发和上线的必备问题。包括:服务治理(熔断/限流) (opens new window)、监控 (opens new window)和日志,如果…...
python实现自动登录12306抢票 -- selenium
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 python实现自动登录12306抢票 -- selenium 前言其实网上也出现了很多12306的代码,但是都不是最新的,我也是从网上找别人的帖子,看B站视频&…...
使用Diffusion Models进行图像超分辩重建
Diffusion Models专栏文章汇总:入门与实战 前言:图像超分辨率重建是一个经典CV任务,其实LR(低分辨率)和 HR(高分辨率)图像仅在高频细节上存在差异。通过添加适当的噪声,LR 图像将变得与其 HR 对应图像无法区分。这篇博客介绍一种方式巧妙利用这个规律使用Diffusion Mod…...
吾杯网络安全技能大赛——Misc方向WP
吾杯网络安全技能大赛——Misc方向WP Sign 题目介绍: 浅浅签个到吧 解题过程: 57754375707B64663335376434372D333163622D343261382D616130632D3634333036333464646634617D 直接使用赛博橱子秒了 flag为 WuCup{df357d47-31cb-42a8-aa0c-6430634ddf4a} 原神启动…...
西门子PLC通信必备:手把手教你用SCL编写Modbus RTU CRC校验功能块
西门子PLC通信实战:SCL实现Modbus RTU CRC校验的工程化解决方案 在工业自动化领域,可靠的数据通信如同设备的神经系统。当两台PLC需要通过RS485接口交换温度传感器读数时,Modbus RTU协议因其简洁高效成为首选。但许多工程师在调试阶段都会遇到…...
从日志到环境变量:根治 Android Studio AVD 启动报错“The emulator process has terminated”
1. 从错误弹窗到日志分析:定位问题的第一步 当你兴冲冲地打开Android Studio准备启动AVD(Android Virtual Device)时,突然弹出一个冰冷的提示框:"The emulator process has terminated",这感觉就…...
AI Agent执行链路的安全机制:权限控制与沙箱隔离方案
AI Agent执行链路安全深度解析:权限控制与沙箱隔离全栈落地方案 摘要/引言 你有没有遇到过这些场景:刚上线的企业内部运维Agent被恶意Prompt注入后,直接调用了删除生产库的工具;你做的数据分析Agent被诱导执行了恶意Python代码,把公司的用户隐私数据传到了境外黑客服务器…...
3个按键冲突场景,Hitboxer如何帮你重获游戏控制权?
3个按键冲突场景,Hitboxer如何帮你重获游戏控制权? 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 你是否曾在激烈的游戏对战中,因为同时按下W和S键而突然卡住?或…...
3D打印乐高手机支架:低成本打造高清视频会议摄像头方案
1. 项目概述与核心思路如果你和我一样,对视频会议、直播时笔记本自带摄像头那“感人”的画质感到无奈,同时又觉得单独购买一个高品质的网络摄像头是一笔不小的开销,那么这个项目绝对值得你花上一个周末的时间来折腾。它的核心思路非常巧妙&am…...
Arm Neoverse CMN-700多芯片架构与一致性哈希解析
1. Arm Neoverse CMN-700多芯片架构解析在现代高性能计算领域,多芯片系统架构已成为突破单芯片性能瓶颈的关键技术路径。Arm Neoverse CMN-700作为第二代一致性网状网络控制器,其设计哲学体现在三个维度:首先是通过模块化设计实现计算单元的可…...
基于Vanilla JS与IndexedDB构建本地化Markdown笔记工具
1. 项目概述:从零开始构建一个轻量级笔记工具最近在整理个人知识库时,发现市面上的笔记软件要么功能过于臃肿,要么云端同步存在隐私顾虑,要么就是定制化程度不够。作为一个有十多年开发经验的从业者,我决定自己动手&am…...
TPU材料3D打印iPad Pro保护框:从设计到成品的完整实践指南
1. 项目概述:为什么选择TPU为iPad Pro打造专属保护框?作为一名折腾过几十公斤耗材的3D打印老玩家,我始终认为,这项技术最迷人的地方不在于复刻网上的模型,而在于为手头的心爱之物量身定制解决方案。就拿我手边的这台iP…...
Java源码详解:深入Java并发之AtomicBoolean全景式解析——无锁布尔标志的精妙实现与云原生演进
概述 在高并发编程中,一个看似简单的布尔标志位(如 shutdown、initialized)也可能成为线程安全的隐患。传统的 volatile boolean 虽能保证可见性,却无法保证 “读-改-写” 操作的原子性。为解决这一问题,Java并发包&a…...
从开源项目到个人监控工具:clawmonitor的设计、部署与实战
1. 项目概述:从开源项目到个人监控工具的蜕变最近在折腾一个挺有意思的东西,叫clawmonitor。这名字乍一听有点怪,像是“爪子监控器”,但如果你对开源社区,特别是自动驾驶辅助系统领域有所关注,可能会觉得眼…...
