0 背景

在上一篇文章中,对 PaddleOCR 的功能进行了尝鲜,感觉还不错,但调参的时候发现通过 pip 安装的包支持的模型算法有限,无法满足使用需求,因此需要下载源码进行安装测试,本文对该方法进行一个介绍

1 安装

下载源码

git clone https://github.com/PaddlePaddle/PaddleOCR.git# 如果因为网络问题无法 pull 成功,也可选择使用码云上的托管
# 注意:码云托管代码可能无法实时同步 github 项目更新,存在 3~5 天延时,请优先使用第一种方式。
# git clone https://gitee.com/paddlepaddle/PaddleOCR

安装依赖

cd PaddleOCR
pip install -r requirements.txt

2 模型介绍

OCR 文字识别一般包括两个部分,文本检测和文本识别;文本检测首先利用检测算法检测到图像中的文本行;然后检测到的文本行用识别算法去识别到具体文字。

2.1 检测模型

文本检测就是要定位图像中的文字区域,然后通常以边界框的形式将单词或文本行标记出来。传统的文字检测算法多是通过手工提取特征的方式,特点是速度快,简单场景效果好,但是面对自然场景,效果会大打折扣。当前多是采用深度学习方法来做。

基于深度学习的文本检测算法可以大致分为以下几类:

  1. 基于目标检测的方法;一般是预测得到文本框后,通过 NMS 筛选得到最终文本框,多是四点文本框,对弯曲文本场景效果不理想。典型算法为 EAST、Text Box 等方法。
  2. 基于分割的方法;将文本行当成分割目标,然后通过分割结果构建外接文本框,可以处理弯曲文本,对于文本交叉场景问题效果不理想。典型算法为 DB、PSENet 等方法。
  3. 混合目标检测和分割的方法;

2.2 识别模型

OCR 识别算法的输入数据一般是文本行,背景信息不多,文字占据主要部分,识别算法目前可以分为两类算法:

  1. 基于 CTC 的方法;即识别算法的文字预测模块是基于 CTC 的,常用的算法组合为  CNN+RNN+CTC。目前也有一些算法尝试在网络中加入 transformer 模块等等。
  2. 基于 Attention 的方法;即识别算法的文字预测模块是基于 Attention 的,常用算法组合是CNN+RNN+Attention。

2.3 PP-OCR模型

PaddleOCR 中集成了很多 OCR 算法,文本检测算法有 DB、EAST、SAST 等等,文本识别算法有 CRNN、RARE、StarNet、Rosetta、SRN 等算法。

其中 PaddleOCR 针对中英文自然场景通用 OCR,推出了 PP-OCR 系列模型,PP-OCR 模型由DB+CRNN 算法组成,利用海量中文数据训练加上模型调优方法,在中文场景上具备较高的文本检测识别能力。并且 PaddleOCR 推出了高精度超轻量 PP-OCRv2 模型,检测模型仅 3M,识别模型仅 8.5M,利用 PaddleSlim 的模型量化方法,可以在保持精度不降低的情况下,将检测模型压缩到 0.8M,识别压缩到 3M,更加适用于移动端部署场景。

模型下载列表 中给出了不同类型的模型,包括推理模型、训练模型、预训练模型与 slim 模型,推理模型(paddle.jit.save保存的模型) 一般是模型训练,把模型结构和模型参数保存在文件中的固化模型,多用于预测部署场景。 训练过程中保存的模型是 checkpoints 模型,保存的只有模型的参数,多用于恢复训练等。 与 checkpoints 模型相比,inference 模型会额外保存模型的结构信息,在预测部署、加速推理上性能优越,灵活方便,适合于实际系统集成。模型区别如下

模型类型 模型格式 简介
推理模型 inference.pdmodel、inference.pdiparams 用于预测引擎推理,详情
训练模型、预训练模型 *.pdparams、*.pdopt、*.states 训练过程中保存的模型的参数、优化器状态和训练中间信息,多用于模型指标评估和恢复训练
slim模型 *.nb 经过飞桨模型压缩工具PaddleSlim压缩后的模型,适用于移动端/IoT端等端侧部署场景(需使用飞桨Paddle Lite部署)。

各个模型的关系如下所示

3 文本检测模型推理

首先下载一个推理模型

模型名称 模型简介 配置文件 推理模型大小 下载地址
ch_PP-OCRv2_det_slim 【最新】slim量化+蒸馏版超轻量模型,支持中英文、多语种文本检测 ch_PP-OCRv2_det_cml.yml 3M 推理模型
ch_PP-OCRv2_det 【最新】原始超轻量模型,支持中英文、多语种文本检测 ch_PP-OCRv2_det_cml.yml 3M 推理模型
ch_ppocr_mobile_slim_v2.0_det slim裁剪版超轻量模型,支持中英文、多语种文本检测 ch_det_mv3_db_v2.0.yml 2.6M 推理模型
ch_ppocr_mobile_v2.0_det 原始超轻量模型,支持中英文、多语种文本检测 ch_det_mv3_db_v2.0.yml 3M 推理模型
ch_ppocr_server_v2.0_det 通用模型,支持中英文、多语种文本检测,比超轻量模型更大,但效果更好 ch_det_res18_db_v2.0.yml 47M 推理模型

这里以 ch_PP-OCRv2_det 模型为例,解压后运行下边的测试指令

tar xf ch_PP-OCRv2_det_infer.tar
python3 tools/infer/predict_det.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./ch_PP-OCRv2_det_infer/"

可视化文本检测结果默认保存到 ./inference_results 文件夹里面,结果文件的名称前缀为 'det_res'。

通过参数 limit_type 和 det_limit_side_len 来对图片的尺寸进行限制, limit_type 可选参数为 [max, min], det_limit_size_len 为正整数,一般设置为 32 的倍数,比如 960。

参数默认设置为 limit_type='max', det_limit_side_len=960。表示网络输入图像的最长边不能超过 960, 如果超过这个值,会对图像做等宽比的 resize 操作,确保最长边为det_limit_side_len。 设置为 limit_type='min', det_limit_side_len=960 则表示限制图像的最短边为 960。

如果输入图片的分辨率比较大,而且想使用更大的分辨率预测,可以设置 det_limit_side_len 为想要的值,比如 1216:

python3 tools/infer/predict_det.py --image_dir="./doc/imgs/1.jpg" --det_model_dir="./inference/ch_PP-OCRv2_det_infer/" --det_limit_type=max --det_limit_side_len=1216

如果想使用 CPU 进行预测,执行命令如下

python3 tools/infer/predict_det.py --image_dir="./doc/imgs/1.jpg" --det_model_dir="./inference/ch_PP-OCRv2_det_infer/"  --use_gpu=False

4 文本识别模型推理

超轻量中文识别模型推理,可以执行如下命令:

# 下载超轻量中文识别模型:
wget  https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_infer.tar
tar xf ch_PP-OCRv2_rec_infer.tar
python3 tools/infer/predict_rec.py --image_dir="./doc/imgs_words/ch/word_4.jpg" --rec_model_dir="./ch_PP-OCRv2_rec_infer/"

执行命令后,图像的预测结果(识别的文本和得分)会打印到屏幕上,示例如下:

Predicts of ./doc/imgs_words/ch/word_4.jpg:('实力活力', 0.98458153)

5 方向分类模型推理

方向分类模型推理,可以执行如下命令:

# 下载超轻量中文方向分类器模型:
wget  https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
tar xf ch_ppocr_mobile_v2.0_cls_infer.tar
python3 tools/infer/predict_cls.py --image_dir="./doc/imgs_words/ch/word_4.jpg" --cls_model_dir="ch_ppocr_mobile_v2.0_cls_infer"

执行命令后,图像的预测结果(分类的方向和得分)会打印到屏幕上,示例如下:

Predicts of ./doc/imgs_words/ch/word_4.jpg:['0', 0.9999982]

6 级联推理

以超轻量中文 OCR 模型推理为例,在执行预测时,需要通过参数 image_dir 指定单张图像或者图像集合的路径、参数 det_model_dir, cls_model_dir 和 rec_model_dir 分别指定检测,方向分类和识别的 inference 模型路径。参数 use_angle_cls 用于控制是否启用方向分类模型。use_mp 表示是否使用多进程。total_process_num 表示在使用多进程时的进程数。可视化识别结果默认保存到 ./inference_results 文件夹里面。

# 使用方向分类器
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./inference/ch_PP-OCRv2_det_infer/" --cls_model_dir="./inference/cls/" --rec_model_dir="./inference/ch_PP-OCRv2_rec_infer/" --use_angle_cls=true

# 不使用方向分类器
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./inference/ch_PP-OCRv2_det_infer/" --rec_model_dir="./inference/ch_PP-OCRv2_rec_infer/" --use_angle_cls=false

# 使用多进程
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/00018069.jpg" --det_model_dir="./inference/ch_PP-OCRv2_det_infer/" --rec_model_dir="./inference/ch_PP-OCRv2_rec_infer/" --use_angle_cls=false --use_mp=True --total_process_num=6

执行命令后,识别结果图像如下:

7 其它模型推理

如果想尝试使用其他检测算法或者识别算法,需要更新相应配置和模型,比如要使用 EAST 文本检测模型和 STAR-Net 文本识别模型时,首先下载模型进行转化,然后再推理

7.1 模型转换

首先将 EAST 文本检测训练过程中保存的模型,转换成inference model。以基于Resnet50_vd骨干网络,在ICDAR2015英文数据集训练的模型为例( 模型下载地址 ),可以使用如下命令进行转换:

python3 tools/export_model.py -c configs/det/det_r50_vd_east.yml -o Global.pretrained_model=./det_r50_vd_east_v2.0_train/best_accuracy  Global.save_inference_dir=./inference/det_east

7.2 级联推理

python3 tools/infer/predict_system.py --image_dir="./doc/imgs_en/img_10.jpg" --det_model_dir="./inference/det_east/" --det_algorithm="EAST" --rec_model_dir="./inference/starnet/" --rec_image_shape="3, 32, 100" --rec_char_type="en"

执行命令后,识别结果图像如下:

参考

  • https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.3/doc/doc_ch/inference_ppocr.md
  • PaddleOCR/inference.md at release/2.3 · PaddlePaddle/PaddleOCR · GitHub

PaddleOCR之模型介绍与测试相关推荐

  1. 乐玩自动化测试模块_自动化测试模型(一)自动化测试模型介绍

    一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库,测试数据源,测试对象标准,以及各种可重用的模块.自动化测试在发展过程中经历了以下几个阶段,模块驱动测试,数据驱动测试及对象驱动测试 ...

  2. Zephry传感器模型介绍和bme240测试

    一.Sensor模型介绍 Zephry针对传感器这一类设备定义了一套统一传感器驱动接口,如果你的传感器想要在Zephry上实现自己的驱动,那么需要遵守这一套接口模型标准. 因为市面上的传感器大多数所反 ...

  3. pytorch模型加载测试_使用Pytorch实现物体检测(Faster R-CNN)

    在本示例中,介绍一种two-stage算法(Faster R-CNN),将目标区域检测和类别识别分为两个任务进行物体检测.本示例采用PyTorch引擎进行模型构建. 如果您已熟练使用Notebook和 ...

  4. 【darknet速成】Darknet图像分类从模型自定义到测试

    欢迎来到专栏<2小时玩转开源框架系列>,这是我们第12篇文章,前面已经说过了caffe,tensorflow,pytorch,mxnet,keras,paddlepaddle,cntk,c ...

  5. 【DL4J速成】Deeplearning4j图像分类从模型自定义到测试

    文章首发于微信公众号<有三AI> [DL4J速成]Deeplearning4j图像分类从模型自定义到测试 欢迎来到专栏<2小时玩转开源框架系列>,这是我们第九篇,前面已经说过了 ...

  6. 【pytorch速成】Pytorch图像分类从模型自定义到测试

    文章首发于微信公众号<与有三学AI> [pytorch速成]Pytorch图像分类从模型自定义到测试 前面已跟大家介绍了Caffe和TensorFlow,链接如下. [caffe速成]ca ...

  7. 【Keras速成】Keras图像分类从模型自定义到测试

    文章首发于微信公众号<与有三学AI> [Keras速成]Keras图像分类从模型自定义到测试 这是给大家准备的Keras速成例子 这一次我们讲讲keras这个简单.流行的深度学习框架,一个 ...

  8. 【tensorflow速成】Tensorflow图像分类从模型自定义到测试

    文章首发于微信公众号<与有三学AI> [tensorflow速成]Tensorflow图像分类从模型自定义到测试 这是给大家准备的tensorflow速成例子 上一篇介绍了 Caffe , ...

  9. 【caffe速成】caffe图像分类从模型自定义到测试

    文章首发于微信公众号<与有三学AI> [caffe速成]caffe图像分类从模型自定义到测试 这是给大家准备的caffe速成例子 这一次我们讲讲 Caffe 这个主流的开源框架从训练到测试 ...

  10. caffe安装_【开源框架】caffe图像分类从模型自定义到测试

    这一次我们讲讲 Caffe 这个主流的开源框架,从训练到测试出结果的全流程. 到此,我必须假设大家已经有了深度学习的基础知识并了解卷积网络的工作原理. 相关的代码.数据都在我们 Git 上,希望大家 ...

最新文章

  1. 使用slice和concat对数组的深拷贝和浅拷贝
  2. mysql 重要监控参数_mysql 的重要参数,监控需要
  3. Java 实现 SSH 协议的客户端登录认证方式--转载
  4. java考察代码_一段简单的关于字符串的 Java 代码竟考察了这么多东西
  5. 第八十九期:还在手动盖楼领喵币?双十一这群开发者竟然如此「作弊」
  6. 【Python CheckiO 题解】The Most Wanted Letter
  7. 白话编程辅助工具perl2exe(Reship)
  8. 东大OJ 2SAT 异或
  9. java 线程 handler,java.lang.RuntimeException:处理程序(android.os.Handler)在死线程上向处理程序发送消息...
  10. ssm欢欢宠物医院管理系统的设计与实现毕业设计源码171734
  11. 全局快门与卷帘式快门
  12. python画球面_matplotlib中的球面坐标图
  13. Python统计学11——分位数回归
  14. Android模仿微信语音聊天功能
  15. 弘辽科技:淘宝直播时没人气?如何快速提高淘宝直播人气?
  16. word中统一修改mathtype公式和大小对应
  17. 我的七条人生哲理以及个人学习方法总结
  18. 博图HMI仿真无法连接实际PLC进行监控
  19. Qt编写带频谱的音乐播放器
  20. Java自学第6期——Collection、Map、迭代器、泛型、可变参数、集合工具类、集合数据结构、Debug

热门文章

  1. 喜欢“唱跳rap和篮球”的不止有蔡徐坤,还有周杰伦,他可是唱跳rap的鼻祖
  2. 程序开发者的10大开源网站
  3. 了解 云原生 和 边缘计算
  4. 金山毒霸系统清理专家
  5. 什么是BI工具,好用的BI工具软件排名
  6. A银行B分行零售营销人员激励机制研究
  7. 某天的零点时刻0:0:0 和截至时刻23:59:59
  8. 192.168.0.1路由器设置进入
  9. 【uniapp】小程序添加通过卡号查找银行名并添加绑定等逻辑
  10. Java调用阿里云短信通道服务