首页 > 其他分享 >百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理

时间:2023-05-20 10:03:57浏览次数:50  
标签:PP ch Inference -- PaddleOCR PaddlePaddle det dir

Paddle Inference 模型推理流程
分别介绍文字检测、方向分类器和文字识别3个模型,基于Paddle Inference的推理过程。

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_bc

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

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_python_02

使用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()

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_bc_03

单独执行识别

可以指定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()

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_bc_04

使用源码推理

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

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_bc_05

安装依赖包

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()

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_python_06

准备推理模型

下载模型:https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv3_det_infer.tar

解压放至:inference 目录

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_python_07


如果您希望导出自己训练得到的模型,使用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 进到代码目录如图

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_python_08


使用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

输出

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_PaddlePaddle_09

方向分类器模型推理

//TODO 现在还不知道这玩意具体是用来干嘛的。

将角度不正确的文字处理成正常方向的

https://www.paddlepaddle.org.cn/modelsDetail?modelId=17

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_python_10


下载模型: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

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_bc_11

文字识别

https://www.paddlepaddle.org.cn/modelsDetail?modelId=17

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_paddle_12


下载模型: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

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_bc_13


文字识别的具体代码:PaddleOCR-release-2.6\tools\infer\predict_rec.py

系统串联预测推理

在执行PP-OCR的系统推理时,需要通过参数image_dir指定单张图像或者图像集合的路径、参数det_model_dir, cls_model_dirrec_model_dir 分别指定检测、方向分类和识别的 inference 模型路径。参数 use_angle_cls 用于控制是否启用方向分类模型。use_mp 表示是否使用多进程。total_process_num 表示在使用多进程时的进程数。

以图像文件 ./doc/imgs/00018069.jpg 为例,预测的原始图像如下。

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_paddle_14

# 预测 
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

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_PaddlePaddle_15


可视化识别结果默认保存到 ./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

百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理_paddle_16

参考引用

PP-OCRv3文字检测识别系统PaddleOCR GithubPP-OCRv2预测部署实战 代码中 v2 改 v3



标签:PP,ch,Inference,--,PaddleOCR,PaddlePaddle,det,dir
From: https://blog.51cto.com/u_15116285/6317172

相关文章

  • cpp: Singleton Pattern
     //GoldConfig.h:此文件包含"GoldConfig"类。装饰器模式SingletonPatternC++14////SingletonPattern单例模式单件模式、Singleton//2023年5月20日涂聚文GeovinDuVisualStudio2022edit.#pragmaonce#ifndefGOLDCONFIG_H#defineGOLDCONFIG_H#i......
  • Create Vite App 支持 OpenTiny 啦
    大家好,我是Kagol,个人公众号:前端开源星球。一个月前,日日自新写了一篇介绍CreateViteApp开源项目的文章:基于vite4.x快速搭建开箱即用,高度可定制化模版脚手架CreateViteApp是基于esbuild+commander+ejs模板渲染进行开发脚手架,用于创建vite4.xtypescript5.xvite......
  • pta_【CPP0039】vector应用测试
    #include<iostream>#include<vector>#include<algorithm>usingnamespacestd;intmain(void){inti,a[10],b;for(i=0;i<10;i++){scanf("%d",&a[i]);}scanf("%d",&b);//插入的数{vector<int&......
  • 多PPPoE站点间只能总部集中转发?NO!NO!NO!
    当代数字化浪潮下,您的企业是否有以下烦恼:连接多个地点的网络变得复杂?PPPoE站点只能总部集中转发,总部宽带Double怎么破?需要更大的网络带宽满足不断增长的需求?为了优化网络性能和可靠性而苦恼?不用担心!VeryCloudMultiVPN将为您解决这些问题,助力您的业务发展!新功能发布,欢迎试用VeryCl......
  • java基于springboot+vue的漫画网站管理系统,附源码+数据库+lw文档+PPT,适合毕业设计、课
    1、项目介绍考虑到实际生活中在漫画网站方面的需要以及对该系统认真的分析,将系统权限按管理员和用户这两类涉及用户划分。(a)管理员;管理员使用本系统涉到的功能主要有:首页、个人中心、用户管理、漫画分类管理、漫画投稿管理、分类管理、排行榜管理、交流论坛、系统管理等功能......
  • 关于美团app的评价
     广告过多。在使用美团APP时,经常弹出推广广告,给用户使用带来不便。流量消耗大。美团使用了大量图片、视频和地图等资源,因此在使用时会耗费大量的流量,对用户的手机流量资费造成影响。频繁更新。为了不断改进体验和修复漏洞,美团APP经常需要更新,但是每次更新都需要消耗手机内存......
  • 登录appuploader
    ​转载:登录appuploader 常规使用登录方法双击appuploader.exe启动appuploader点击底部的未登录,弹出登录框在登录框内输入apple开发者账号如果没有apple开发者账号,只是普通的apple账号,请勾选上未支付688然后软件会提示输入验证码,点击验证,验证成功就可以使用......
  • 登录appuploader
    ​转载:登录appuploader 常规使用登录方法双击appuploader.exe启动appuploader点击底部的未登录,弹出登录框在登录框内输入apple开发者账号如果没有apple开发者账号,只是普通的apple账号,请勾选上未支付688然后软件会提示输入验证码,点击验证,验证成功就可以使用......
  • MAY 2022-Composite Experience Replay-Based Deep Reinforcement Learning With Appl
    摘要:本文提出了一种基于深度强化学习(RL)的控制方法,以提高学习效率和效果来解决风电场控制问题。具体地,设计了一种新的复合体验重放(CER)策略,并将其嵌入到深度确定性策略梯度(DDPG)算法中。CER提供了一种新的采样方案,通过在奖励和时间差异(TD)误差之间进行权衡,可以深入挖掘存储变......
  • Python 列表append自己
    list=['zz','ss']list.append(list)print(id(list[2]))print(id(list[2][0]))print("1:",list)list.append(list)print(id(list[3]))print(id(list[3][0]))print("2:",list)结果:1404637464558161404637464107361:['z......