PaddleOCR使用

最近在项目过程中需要用到文字识别的能力,之前没有接触过。需要对现有的开源能力进行调研和学习。

1. 基本概念

1.1 PaddlePaddle

PaddlePaddle 是一个由百度开源,基于 Python 的深度学习框架。PaddlePaddle 针对不同的硬件环境提供了不同的安装包或安装方式:可以使用 CPU 也可以 GPU,GPU 支持的硬件包含 CUDA 和 ROCm 4.0。但 ROCm 目前只能在 Linux 系统中使用。具体可以参考 paddlepaddle官方文档。
在这里插入图片描述

1.2 PaddleHub

PaddleHub是基于PaddlePaddle 开发的预训练模型管理工具,可以借助预训练模型更便捷地开展迁移学习工作,旨在让 PaddlePaddle 生态下的开发者更便捷体验到大规模预训练模型的价值。下面是 PaddlePadd 在 github 上的介绍摘录。

【模型种类丰富】: 涵盖大模型、CV、NLP、Audio、Video、工业应用主流六大品类的 400+ 预训练模型,全部开源下载,离线可运行
【超低使用门槛】:无需深度学习背景、无需数据与训练过程,可快速使用AI模型
【一键模型快速预测】:通过一行命令行或者极简的Python API实现模型调用,可快速体验模型效果
【一键模型转服务化】:一行命令,搭建深度学习模型API服务化部署能力
【跨平台兼容性】:可运行于Linux、Windows、MacOS等多种操作系统

1.3 PaddleOCR

PaddleOCR,也叫pp-ocr,是 PaddlePaddle 框架下的 OCR 库,支持多种语言的文本识别。

2. 安装步骤

2.1 安装 PaddlePaddle

# 默认安装CPU版本,安装paddle时建议使用百度源
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

2.2 安装 PaddleHub

# 在命令行中输入以下命令
pip install paddlehub -i https://mirror.baidu.com/pypi/simple

2.3 安装 PP-OCR(PaddleOCR)

hub install ch_pp-ocrv3

3. 使用 PaddleOCR

3.1 命令行方式进行识别

hub run ch_pp-ocrv3 --input_path "/PATH/TO/IMAGE"

3.2 用 Python 代码进行识别

import paddlehub as hub
import cv2

ocr = hub.Module(name="ch_pp-ocrv3", enable_mkldnn=True) # mkldnn加速仅在CPU下有效
result = ocr.recognize_text(images=[cv2.imread('/PATH/TO/IMAGE')])

3.2.1 CV2 安装

实际上,”cv2”中的 ”2” 并不表示 OpenCV 的版本号。我们知道,OpenCV 是基于 C/C++的,”cv”和”cv2”表示底层使用的是 C 语言 API 还是 C++ API,”cv2”表示使用的是 C++ API。这主要是一个历史遗留问题,是为了保持向后兼容性。另外:“cv2” 的安装模块名为 opencv-python

这里的 cv2 需要另外安装

pip install opencv-python

如果安装时出现如下报错

ERROR: Could not find a version that satisfies the requirement cv2 (from versions: none)
ERROR: No matching distribution found for cv2

检查 pip 是否最新,如果不是最新的则对 pip 进行升级,并指定下载源安装。

python -m pip install --upgrade pip # 如果是python3
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

3.2.2 API

API 的出入参数在官方文档中有写到,这里就不再展开。

3.3 PaddleHub Serving

PaddleHub 可以将 OCR 部署一个在线服务,命令如下。

hub serving start -m ch_pp-ocrv3

在执行完命令之后会有提示,告知服务的地址和端口号,默认端口号是8866。在服务启动之后就可以通过 http 方式使用 OCR 了。这种在线服务的方式让其他编程语言可以方便的使用 PaddleOCR。

3.3.1 在线服务验证代码

import requests
import json
import cv2
import base64

def cv2_to_base64(image):
    data = cv2.imencode('.jpg', image)[1]
    return base64.b64encode(data.tostring()).decode('utf8')

# 发送HTTP请求
data = {'images':[cv2_to_base64(cv2.imread("/PATH/TO/IMAGE"))]}
headers = {"Content-type": "application/json"}
url = "http://127.0.0.1:8866/predict/ch_pp-ocrv3"
r = requests.post(url=url, headers=headers, data=json.dumps(data))

# 打印预测结果
print(r.json()["results"])

3.3.2 在线服务性能

由于是在本机做测试,所以用 python 直接调用 PaddleOCR 还是通过 http 调用 PaddleHub Serving,性能上没有明显的差异。

3.3.3 Gradio App

官方文档中提到 “从 PaddleHub 2.3.1 开始支持在浏览器中访问 ch_pp-ocrv3 的 Gradio App”,但我在访问 URL 的时候服务端报错。粗略查了一下可能是由于我的环境是 Windows,这个问题不影响整体,所以暂时不深究。

4. 测试结果

4.1 识别率

PaddleOCR 的识别率还是比较高的,对于非手写的字体基本识别率达到 95% 以上,由于没有特别测试比较复杂的字,所以这个数字是我的主观判断。对于比较刁钻的测试,PaddleOCR 的识别率就比较低了,如故意把 Il 混在一起(如 IlIlIlIl)基本无法识别(当然这只是为了测试而创造的,正常情况下不会出现,因为人也无法识别)。

4.2 性能

对于普通的图片,识别性能基本在秒级别,识别消息根据图片中的内容存在较大差异,越复杂越慢。对同一张图片多次识别时只需要花费原本 20% 的时间,猜测是有类似缓存的机制。

4.3 使用难度

整体安装上没有太大难度,跟着官方文档一步步安装就可以了。唯一的难度是需要用 python 来调用,但是官方也提供了 hub serving,其他语言可以通过 http 进行调用。

参考资料

PaddleOCR的使用
开始使用
零基础windows安装并实现图像风格迁移
python安装cv2库 python3.8安装cv2
Python3 安装cv2 / OpenCV安装

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/607184.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024/5/9 QTday4

完成定时器制作 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);connect(&timer2, &QTimer::timeout, this, &Widget::label_begin);connect(&…

Linux0.11中MINIX 文件系统

阅读linux 的源码的时候对minix 文件系统有很多的疑惑,根据自己的认识将这些做一个总结。 MINIX 文件系统由六个部分组成,分别是引导块,超级块,i结点位图,逻辑块位图,i结点,数据块。 引导块&am…

Python 中 “yield“ 的不同行为

在我们使用Python编译过程中,yield 关键字用于定义生成器函数,它的作用是将函数变成一个生成器,可以迭代产生值。yield 的行为在不同的情况下会有不同的效果和用途。 1、问题背景 在 Python 中,“yield” 是一种生成器&#xff0…

【Pytorch】1.读取训练数据集

导入Dataset类 from torch.utils.data import Dataset # 注意是Dataset(大写)的才是类通过jupyter我们可以阅读一下Dataset类的具体使用方法 help(Dataset) # 或者直接 Dataset??我们可以看到具体对Dataset类的解释 从蓝色字体我们可以得出 所有的代…

鸿蒙开发-ArkTS语言-容器-非线性容器

鸿蒙开发-UI-web 鸿蒙开发-UI-web-页面 鸿蒙开发-ArkTS语言-基础类库 鸿蒙开发-ArkTS语言-并发 鸿蒙开发-ArkTS语言-并发-案例 鸿蒙开发-ArkTS语言-容器 文章目录 前言 一、非线性容器 1.HashMap 2.HashSet 3.TreeMap 4.TreeSet 5.LightWeightMap 6.LightWeightSet 7.P…

vue uniapp 小程序 判断日期是今天(显示时分秒)、昨天、本周的周几、超出本周显示年月日

效果图: util.js /*** 转换时间*/ const messageFormat (datetime) >{ let result "";let currentTime new Date();if(isToday(datetime)){result datetime.substring(11,16);}else if(isYesterday(datetime)){result "昨天";}else if(…

EasyExcel导出带自定义下拉框数据的Excel模板

文章目录 前言📝一、导入依赖二、创建导出工具1.创建模板实体类2.创建自定义注解3.添加动态选择接口4.EasyExcelUtil工具类 三、导出、导入Excel接口1.导出接口2.导入接口3.导出结果 总结 前言📝 在项目中导入excel时需要通过下拉框选择值传入&#xff…

解决在Outlook中预定Teams会议不显示入会链接的问题

今天遇到一个很蛋疼的teams问题,花了点时间才解决。本来以为是很简单的问题,随便网上冲浪一下就能找到答案的,结果根本就没有好的解决方案,所以我分享出来希望后来的老哥少走点弯路。 问题描述 简单来说,就是在Outlo…

Pytorch入门—Tensors张量的学习

Tensors张量的学习 张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量来编码模型的输入和输出,以及模型的参数。 张量类似于NumPy的ndarrays,只是张量可以在GPU或其他硬件加速器上运行。事实上&#xf…

IntelliJ IDEA 配置JDK

IntelliJ IDEA-之配置JDK 我们的开发神器IDEA安装好了之后,在实际开发中,我们如何去配置好JDK的版本呢? 注意:需要保证JDK在已经成功安装的情况下,再进行IDEA的配置 现在就行动,让IntelliJ IDEA成为你征…

Windows系统使用powershell批量移动特定起始位置的“快捷方式”

移动特定起始位置的“快捷方式” 快捷方式都对应一个的目标和“起始位置”,现在想要把特定起始位置的快捷方式移动到一个文件夹中。 新建文本文档,输入如下内容: # 设置变量 $oldPath "D:\111\111_1" $newPath "D:\111\1…

C语言—操作符详解(操作符、进制转换、原码反码补码、结构体)

1.操作符分类 算术操作符&#xff1a; 、- 、 * 、 / 、%移位操作符&#xff1a;<< >> //移动的是二进制位位操作符&#xff1a;& | ^ //使用二进制位进行计算赋值操作符&#…

前端js面试题--从字符串中删除删除注释代码

问题&#xff1a;从字符串中删除删除注释代码 描述&#xff1a; solution(weex,rex # and react\nflutter\nnative ssss !hybrid app, [#, !]) 写一个solution函数清除后面参数数组里面的字符串 打印效果 代码1 思路&#xff1a; 将字符全凡是有去掉标志符号的全部添加\n…

Ubuntu20.4中复现Graspness

Ubuntu20.4中复现Graspness 文章目录 Ubuntu20.4中复现Graspness1.安装cuda和cudnn2.安装pytorch3.安装MinkowskiEngine4.编译graspnetAPI5. RuntimeError: "floor" "_vml_cpu" not implemented for IntRefernece &#x1f680;非常重要的环境配置&#x1…

pyqt 分组框控件QGroupBox

pyqt 分组框控件QGroupBox 分组框控件QGroupBox介绍效果代码 分组框控件QGroupBox介绍 QGroupBox提供了一个框架&#xff0c;用于将其他控件&#xff08;如按钮、滑块、标签等&#xff09;组合在一起。 QGroupBox 通常包含一个标题栏和一个内容区域。标题栏显示文本标签&#…

经典回溯算法之N皇后问题

问题描述&#xff1a; 有一个N*N的棋盘&#xff0c;需要将N个皇后放在棋盘上&#xff0c;保证棋盘的每一行每一列每一左斜列每一右斜列都最多只能有一个皇后。 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如…

关于模型参数融合的思考

模型参数融合通常指的是在训练过程中或训练完成后将不同模型的参数以某种方式结合起来&#xff0c;以期望得到更好的性能。这种融合可以在不同的层面上进行&#xff0c;例如在神经网络的不同层之间&#xff0c;或者是在完全不同的模型之间。模型参数融合的目的是结合不同模型的…

探索智慧生活:百度Comate引领人工智能助手新潮流

文章目录 百度Comate介绍1. 什么是百度Comate&#xff1f;主要特点 2. Comate的核心功能智能问答功能语音识别功能语音助手功能个性化服务 使用教程(以vscode为例)1. 下载和安装Comate2. 插件配置方式1&#xff1a;无License用户方式2&#xff1a;购买License用户 3. 常用操作快…

软件设计师

软件设计师 第一章 计算机系统基础原/反/补/移码例题&#xff1a; 浮点数例题 海明校验码例题 CISC和RISC*流水线例题 存储系统cache*主存编址计算例题&#xff1a; 可靠性例题 性能指标例题 第二章 操作系统进程例题 PV操作 信号量例题 前驱图例题 死锁计算例题 段页式存储例题…

阵痛中的乳业产业,何时才能成为下一个啤酒产业?

说起饮品&#xff0c;近年来中国啤酒业中各大品牌齐齐聚焦高端化的趋势绝对值得一提。然而&#xff0c;与之相反&#xff0c;国内乳业却是仍未进入高端化阶段&#xff0c;甚至陷入了周期底部中。 图源&#xff1a;中国圣牧财报 增收降利 牧企承受巨大的供需缺口压力 从产业链…