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

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

2.2 安装 PaddleHub

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

2.3 安装 PP-OCR(PaddleOCR)

shell 复制代码
hub install ch_pp-ocrv3

3. 使用 PaddleOCR

3.1 命令行方式进行识别

shell 复制代码
hub run ch_pp-ocrv3 --input_path "/PATH/TO/IMAGE"

3.2 用 Python 代码进行识别

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 需要另外安装

shell 复制代码
pip install opencv-python

如果安装时出现如下报错

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

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

shell 复制代码
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 部署一个在线服务,命令如下。

shell 复制代码
hub serving start -m ch_pp-ocrv3

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

3.3.1 在线服务验证代码

python 复制代码
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安装

相关推荐
weixin_贾17 分钟前
最新AI-Python机器学习与深度学习技术在植被参数反演中的核心技术应用
python·机器学习·植被参数·遥感反演
张槊哲27 分钟前
函数的定义与使用(python)
开发语言·python
船长@Quant32 分钟前
文档构建:Sphinx全面使用指南 — 实战篇
python·markdown·sphinx·文档构建
偶尔微微一笑1 小时前
AI网络渗透kali应用(gptshell)
linux·人工智能·python·自然语言处理·编辑器
船长@Quant3 小时前
文档构建:Sphinx全面使用指南 — 基础篇
python·markdown·sphinx·文档构建
喵手3 小时前
从 Java 到 Kotlin:在现有项目中迁移的最佳实践!
java·python·kotlin
liuweidong08023 小时前
【Pandas】pandas DataFrame rsub
开发语言·python·pandas
CH3_CH2_CHO4 小时前
不吃【Numpy】版
开发语言·python·numpy
-曾牛4 小时前
企业级AI开发利器:Spring AI框架深度解析与实战
java·人工智能·python·spring·ai·rag·大模型应用
Light604 小时前
智启未来:深度解析Python Transformers库及其应用场景
开发语言·python·深度学习·自然语言处理·预训练模型·transformers库 |·|应用场景