百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理
Paddle Inference 模型推理流程
分别介绍文字检测、方向分类器和文字识别3个模型,基于Paddle Inference的推理过程。

Paddle Inference 的 Python 离线推理
离线推理,即在特定机器上部署的代码只能在这台机器上使用,无法通过其他机器进行访问
使用whl包预测推理
“WHL”是“WHeeL”的英文缩写,意思是“车轮” ,whl 格式本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件
为了更加方便快速体验OCR文本检测与识别模型,PaddleOCR提供了基于Paddle Inference预测引擎的whl包,方便您一键安装,体验PaddleOCR。
安装whl包
pip install paddleocr -i https://pypi.tuna.tsinghua.edu.cn/simple --verbose

使用whl包预测推理
paddleocr whl包会自动下载PP-OCRv2超轻量模型作为默认模型,也支持自定义模型路径、预测配置等参数,参数名称与基于Paddle Inference的python预测中参数相同。
单独执行检测
import cv2
import matplotlib.pyplot as plt
import numpy as np
import os
from paddleocr import PaddleOCR, draw_ocr
ocr = PaddleOCR(use_gpu=False) # need to run only once to download and load model into memory
img_path = './images/006.jpg'
result = ocr.ocr(img_path, rec=False)
for line in result:
print(line)
# 显示结果
from PIL import Image
image = Image.open(img_path).convert('RGB')
im_show = draw_ocr(image, result, txts=None, scores=None, font_path='./fonts/simfang.ttf')
plt.figure(figsize=(15, 8))
plt.imshow(im_show)
plt.show()

单独执行识别
可以指定det=False,仅运行单独的识别模块。
import matplotlib.pyplot as plt
from paddleocr import PaddleOCR, draw_ocr
ocr = PaddleOCR(use_gpu=False) # need to run only once to download and load model into memory
img_path = './images/006.jpg'
result = ocr.ocr(img_path, det=False)
for line in result:
print(line)
单独执行方向分类器
可以指定det=False, rec=False, cls=True,仅运行方向分类器。
import cv2
import matplotlib.pyplot as plt
from paddleocr import PaddleOCR, draw_ocr
ocr = PaddleOCR(use_angle_cls=True, use_gpu=False) # need to run only once to download and load model into memory
img_path = './images/006.jpg'
result = ocr.ocr(img_path, det=False, rec=False, cls=True)
for line in result:
print(line)
img = cv2.imread(img_path)
plt.imshow(img[...,::-1])
plt.show()
全流程体验(检测+方向分类器+识别)
import cv2
import os
import matplotlib.pyplot as plt
from paddleocr import PaddleOCR, draw_ocr
# PaddleOCR目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
# 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
ocr = PaddleOCR(use_angle_cls=True, lang="ch", use_gpu=False) # need to run only once to download and load model into memory
save_results = []
img_path = 'images/003.jpg'
save_dir = 'ocr_result'
result = ocr.ocr(img_path, cls=True)[0]
# 将结果写入文件
with open(
os.path.join(save_dir, "003_result.txt"),
'w',
encoding='utf-8') as f:
for line in result:
f.writelines(str(line)+'\n')
print(line)
# 显示结果
from PIL import Image
image = Image.open(img_path).convert('RGB')
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores, font_path='./fonts/simfang.ttf')
cv2.imwrite(os.path.join(save_dir, "003_result.jpg"), im_show)
plt.figure(figsize=(15, 8))
plt.imshow(im_show)
plt.show()

使用源码推理
下载源码,并解压:https://gitee.com/paddlepaddle/PaddleOCR/tree/release/2.6

安装依赖包
https://gitee.com/paddlepaddle/PaddleOCR/blob/release/2.6/requirements.txt
将文件 requirements.txt 保存到运行目录下如 D:\OpenSource\PaddlePaddle\PaddleOCR-release-2.6
shapely
scikit-image
imgaug
pyclipper
lmdb
tqdm
numpy
visualdl
rapidfuzz
opencv-python==4.6.0.66
opencv-contrib-python==4.6.0.66
cython
lxml
premailer
openpyxl
attrdict
Polygon3
lanms-neo==1.0.2
PyMuPDF<1.21.0
安装运行所需要的包
D:\OpenSource\PaddlePaddle\PaddleOCR-release-2.6>pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --verbose
D:\OpenSource\PaddlePaddle\PaddleOCR-release-2.6>pip install paddlenlp -i https://pypi.tuna.tsinghua.edu.cn/simple --verbose
文字检测
PaddleOCR中,在基于文字检测模型进行推理时,需要通过参数image_dir指定单张图像或者图像集合的路径、参数det_model_dir, 指定检测的 inference 模型路径。
百度OCR源码中提供了样例图片:https://gitee.com/paddlepaddle/PaddleOCR/tree/release/2.6/doc/imgs
准备数据和环境
import cv2
import matplotlib.pyplot as plt
import numpy as np
import os
# 选择2张图像可视化
img1 = cv2.imread("doc/imgs/00006737.jpg")
img2 = cv2.imread("doc/imgs/00056221.jpg")
plt.figure(figsize=(15, 6))
plt.subplot(1, 2, 1) # 定义 1行2列
plt.imshow(img1[:, :, ::-1]) # 第1列 放 img1 ,::-1 => axis 3 倒序
plt.subplot(1, 2, 2) # 定义 1行2列
plt.imshow(img2[:, :, ::-1]) # 第2列 放 img1
plt.show()

准备推理模型
下载模型:https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv3_det_infer.tar
解压放至:inference 目录

如果您希望导出自己训练得到的模型,使用Paddle Inference部署,那么可以使用下面的命令将预训练模型使用动转静的方法,转化为推理模型。
# 参考代码
# https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.4/tools/export_model.py
# 下载预训练模型(V2)
wget https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_distill_train.tar && tar -xf ch_PP-OCRv2_det_distill_train.tar && rm ch_PP-OCRv2_det_distill_train.tar
# 导出推理模型(V2)
python tools/export_model.py -c configs/det/ch_PP-OCRv2/ch_PP-OCRv2_det_cml.yml \
-o Global.pretrained_model="ch_PP-OCRv2_det_distill_train/best_accuracy" \
Global.save_inference_dir="./my_model"
文字检测模型推理
CMD 进到代码目录如图

使用V3模型预测
# 预测
python tools/infer/predict_det.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./inference/ch_PP-OCRv3_det_infer" --use_gpu=False
输出

- 定义参数设置
PaddleOCR-release-2.6\tools\infer\utility.py
更多参数说明:doc\doc_ch\inference_args.md - 文字检测
PaddleOCR-release-2.6\tools\infer\predict_det.py
部分代码说明:https://aistudio.baidu.com/aistudio/projectdetail/6180758
方向分类器模型推理
//TODO 现在还不知道这玩意具体是用来干嘛的。
将角度不正确的文字处理成正常方向的
https://www.paddlepaddle.org.cn/modelsDetail?modelId=17

下载模型:https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
解压放至:inference 目录
# 预测
python tools/infer/predict_cls.py \
--image_dir="./doc/imgs_words/ch/word_1.jpg" \
--cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer" \
--use_gpu=False
方向分类器的具体实现代码: PaddleOCR-release-2.6\tools\infer\predict_cls.py

文字识别
https://www.paddlepaddle.org.cn/modelsDetail?modelId=17

下载模型:https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar
解压放至:inference 目录
# 预测
python tools/infer/predict_rec.py \
--image_dir="./doc/imgs_words/ch/word_4.jpg" \
--rec_model_dir="./inference/ch_PP-OCRv3_rec_infer" \
--use_gpu=False

文字识别的具体代码:PaddleOCR-release-2.6\tools\infer\predict_rec.py
系统串联预测推理
在执行PP-OCR的系统推理时,需要通过参数image_dir指定单张图像或者图像集合的路径、参数det_model_dir, cls_model_dir 和 rec_model_dir 分别指定检测、方向分类和识别的 inference 模型路径。参数 use_angle_cls 用于控制是否启用方向分类模型。use_mp 表示是否使用多进程。total_process_num 表示在使用多进程时的进程数。
以图像文件 ./doc/imgs/00018069.jpg 为例,预测的原始图像如下。

# 预测
python tools/infer/predict_system.py \
--image_dir="./doc/imgs/00018069.jpg" \
--det_model_dir="./inference/ch_PP-OCRv3_det_infer/" \
--cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/" \
--rec_model_dir="./inference/ch_PP-OCRv3_rec_infer/" \
--use_angle_cls=True

可视化识别结果默认保存到 ./inference_results 文件夹里面。
在图象中可视化出了检测框和识别结果,在上面的notebook中也打印出了具体的识别文件以及文件读取路径信息。
如果希望保存裁剪后的识别结果,可以将save_crop_res参数设置为True,最终结果保存在output目录下,其中部分裁剪后图像如下所示。保存的结果可以用于后续的识别模型标注与训练。
python tools/infer/predict_system.py \
--image_dir="./doc/imgs/00018069.jpg" \
--det_model_dir="./inference/ch_PP-OCRv3_det_infer/" \
--cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/" \
--rec_model_dir="./inference/ch_PP-OCRv3_rec_infer/" \
--use_angle_cls=True \
--save_crop_res=True

参考引用
PP-OCRv3文字检测识别系统
PaddleOCR Github
PP-OCRv2预测部署实战 代码中 v2 改 v3
百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理的更多相关文章
- 树莓派4B安装 百度飞桨paddlelite 做视频检测 (一、环境安装)
前言: 当前准备重新在树莓派4B8G 上面搭载训练模型进行识别检测,训练采用了百度飞桨的PaddleX再也不用为训练部署环境各种报错发愁了,推荐大家使用. 关于在树莓派4B上面paddlelite的文 ...
- 提速1000倍,预测延迟少于1ms,百度飞桨发布基于ERNIE的语义理解开发套件
提速1000倍,预测延迟少于1ms,百度飞桨发布基于ERNIE的语义理解开发套件 11月5日,在『WAVE Summit+』2019 深度学习开发者秋季峰会上,百度对外发布基于 ERNIE 的语义理解 ...
- Ubuntu 百度飞桨和 CUDA 的安装
Ubuntu 百度飞桨 和 CUDA 的安装 1.简介 本文主要是 Ubuntu 百度飞桨 和 CUDA 的安装 系统:Ubuntu 20.04 百度飞桨:2.2 为例 2.百度飞桨安装 访问百度飞桨 ...
- 我做的百度飞桨PaddleOCR .NET调用库
我做的百度飞桨PaddleOCR .NET调用库 .NET Conf 2021中国我做了一次<.NET玩转计算机视觉OpenCV>的分享,其中提到了一个效果特别好的OCR识别引擎--百度飞 ...
- 百度飞桨数据处理 API 数据格式 HWC CHW 和 PIL 图像处理之间的关系
使用百度飞桨 API 例如:Resize Normalize,处理数据的时候. Resize:如果输入的图像是 PIL 读取的图像这个数据格式是 HWC ,Resize 就需要 HWC 格式的数据. ...
- javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试车牌识别准确率99.7%以上,单次平均耗时39ms)
javaCV图像处理系列: 一.javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 二.javaCV图像处理之2:实时视频添 ...
- 基于深度学习的鸟类检测识别系统(含UI界面,Python代码)
摘要:鸟类识别是深度学习和机器视觉领域的一个热门应用,本文详细介绍基于YOLOv5的鸟类检测识别系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中可以选择各种鸟类图 ...
- 【百度飞桨】手写数字识别模型部署Paddle Inference
从完成一个简单的『手写数字识别任务』开始,快速了解飞桨框架 API 的使用方法. 模型开发 『手写数字识别』是深度学习里的 Hello World 任务,用于对 0 ~ 9 的十类数字进行分类,即输入 ...
- 【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?
参考文章: 深度剖析知识增强语义表示模型--ERNIE_财神Childe的博客-CSDN博客_ernie模型 ERNIE_ERNIE开源开发套件_飞桨 https://github.com/Pad ...
- Faster-RCNN用于场景文字检测训练测试过程记录(转)
[训练测试过程记录]Faster-RCNN用于场景文字检测 原创 2017年11月06日 20:09:00 标签: 609 编辑 删除 写在前面:github上面的Text-Detection-wit ...
随机推荐
- java代码审计-SpEL表达式注入
0x01 前言 Spring Expression Language(简称 SpEL)是一种功能强大的表达式语言.用于在运行时查询和操作对象图:语法上类似于Unified EL,但提供了更多的特性,特 ...
- 使用VSCode调试C#时,Console.ReadLine()弹出命令框调试
原文链接:https://blog.csdn.net/qq_29503199/article/details/88351498 要在调试时读取输入,可以在 launch.json 中使用配置中的 ...
- Nginx http 文件服务器 中文名称文件乱码以及不能访问下载问题 (解决全过程)
书接上文: 在Windows 环境下使用 Nginx 搭建 HTTP文件服务器 实现文件下载 全步骤(详细) _ 发现的中文乱码问题,终于自己解决了! ^_^ Nginx http 文件服务器 中文名 ...
- mybatis源码-注解sql
Mybatis-注解sql Demo 主启动类 public class MybatisHelloWorld { public static void main(String[] args) thro ...
- [ACM]STL-dfs
#include<iostream> using namespace std; int book[101],sum,n,e[101][101]; void dfs(int cur) { c ...
- vue之数组的方法
目录 简介 filter方法 简介 本文会把遇到的数组的方法慢慢补充进来 filter方法 filter()方法是一个过虑方法 以下面的为例:列表dataList会每次取一个值,把值给匿名函数,并执行 ...
- 月光宝盒(vivo流量录制回放平台)正式对外开源
作者:vivo 互联网服务器团队- Liu Yanjiang 月光宝盒是一个基于流量录制回放的自动化测试平台,通过录制回放取代编写脚本进行自动化回归,提升测试效率和覆盖率.因为其解决方案具有很强的通用 ...
- [数据库/MYSQL]#解决缺陷#设置Unique索引时:"[Err] 1071 - Specified key was too long; max key length is 767 bytes"
1 问题复现 原表结构: CREATE TABLE `XX_TEMPERATURE` ( `FLOW_ID` int(11) NOT NULL COMMENT '独立的数据表或FTP唯一标识', -- ...
- Unity学习笔记01 —— 编辑器
场景Scene 基本操作 按下鼠标滚轮拖动场景,滑动滚轮缩放场景. 鼠标右键旋转场景,点击""后,通过左键移动场景. 点击右键同时按下W/S/A/D/Q/E键可实现场景漫游. 在S ...
- Schillace法则:使用LLM创建软件的最佳实践
LLM(大语言模型)的发展正在改变软件开发的方式. 以前,开发人员需要编写大量的代码来实现其意图,但现在,随着语言模型的发展,开发人员可以使用自然语言来表达他们的意图,而无需编写大量的代码.这使得软件 ...