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安装

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PaddleOCR是一个基于PaddlePaddle深度学习框架的OCR(Optical Character Recognition,光学字符识别)工具包,可以识别各种文字类型的图片,包括中文、英文、数字等。本文将介绍如何使用PaddleOCR进行文字识别。 ## 安装PaddleOCR PaddleOCR的安装非常简单,只需要使用pip命令即可: ``` pip install paddleocr ``` ## 使用PaddleOCR 使用PaddleOCR进行文字识别非常简单,只需要导入包并调用相应的函数即可。以下是一个简单的示例代码: ``` python import paddleocr # 创建OCR实例 ocr = paddleocr.OCR() # 读取图片文件 img_path = 'test.jpg' img = paddleocr.load_image(img_path) # 进行文字识别 result = ocr.ocr(img) # 输出识别结果 for line in result: print(line) ``` 在上述代码中,我们首先导入了PaddleOCR模块。然后,我们创建了一个OCR实例,通过调用`paddleocr.OCR()`方法来实现。接着,我们读取了一张名为`test.jpg`的图片,并使用`paddleocr.load_image()`方法加载该图片。最后,我们调用OCR实例的`ocr()`方法进行文字识别,并将结果输出到控制台。 ## 配置PaddleOCR PaddleOCR还提供了一些配置选项,可以帮助我们优化识别效果。以下是一些常用的配置选项: - lang:要识别的语言类型。可选项包括`ch`, `en`, `fr`, `jp`, `korean`等。 - det:检测模型的名称。可选项包括`ch_ppocr_server_v2.0_det_infer`、`ch_ppocr_mobile_v2.0_det_infer`等。 - rec:识别模型的名称。可选项包括`ch_ppocr_server_v2.0_rec_infer`、`ch_ppocr_mobile_v2.0_rec_infer`等。 - cls:分类模型的名称。可选项包括`ch_ppocr_mobile_v2.0_cls_infer`等。 以下是一个配置PaddleOCR的示例代码: ``` python import paddleocr # 配置选项 lang = 'ch' det_model = 'ch_ppocr_server_v2.0_det_infer' rec_model = 'ch_ppocr_server_v2.0_rec_infer' # 创建OCR实例 ocr = paddleocr.OCR(lang=lang, det_model_dir=det_model, rec_model_dir=rec_model) # 读取图片文件 img_path = 'test.jpg' img = paddleocr.load_image(img_path) # 进行文字识别 result = ocr.ocr(img) # 输出识别结果 for line in result: print(line) ``` 在上述代码中,我们通过设置`lang`、`det_model`和`rec_model`等选项,来配置PaddleOCR的语言类型和模型。然后,我们创建了一个OCR实例,并将配置选项传递给构造函数。最后,我们读取图片、进行文字识别,并输出识别结果。 ## 总结 使用PaddleOCR进行文字识别非常简单,只需要导入包并调用相应的函数即可。此外,PaddleOCR还提供了一些配置选项,可以帮助我们优化识别效果。如果你需要进行文字识别,不妨尝试一下PaddleOCR吧!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值