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

最好用的图文识别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")

高精度推理结果

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


通过以上步骤,可以快速集成 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)设计合适的动态模型架构 &#xff…...

天猫推荐数据集实践

参考自 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} 原神启动…...

JavaSec-RCE

简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性&#xff0c…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

企业如何增强终端安全?

在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

Kafka入门-生产者

生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

腾讯云V3签名

想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)

目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...

生成对抗网络(GAN)损失函数解读

GAN损失函数的形式: 以下是对每个部分的解读: 1. ⁡, ​ :这个部分表示生成器(Generator)G的目标是最小化损失函数。 :判别器(Discriminator)D的目标是最大化损失函数。 GAN的训…...