前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >飞桨文字识别模型套件PaddleOCR首次开源,带来8.6M超轻量中英文OCR模型!

飞桨文字识别模型套件PaddleOCR首次开源,带来8.6M超轻量中英文OCR模型!

作者头像
用户1386409
发布于 2020-06-04 08:52:26
发布于 2020-06-04 08:52:26
3.2K02
代码可运行
举报
文章被收录于专栏:PaddlePaddlePaddlePaddle
运行总次数:2
代码可运行

OCR技术有着丰富的应用场景,包括已经在日常生活中广泛应用的面向垂类的结构化文本识别,如车牌识别、银行卡信息识别、身份证信息识别、火车票信息识别等等,此外,通用OCR技术也有广泛的应用,如在视频场景中,经常使用OCR技术进行字幕自动翻译、内容安全监控等等,或者与视觉特征相结合,完成视频理解、视频搜索等任务。

OCR文字检测和识别目前的主流方法大多是采用深度学习技术,这从ICDAR2015自然场景排名前列的应用方法可以明显看出。深度学习技术在一些垂类场景,文本识别精准度已经可以达到99%以上,取得了非常好的效果。

但在实际应用中,尤其是在广泛的通用场景下,OCR技术也面临一些挑战,比如仿射变换、尺度问题、光照不足、拍摄模糊等技术难点;另外OCR应用常对接海量数据,但要求数据能够得到实时处理;并且OCR应用常部署在移动端或嵌入式硬件,而端侧的存储空间和计算能力有限,因此对OCR模型的大小和预测速度有很高的要求。

在这样的背景下,飞桨首次开源文字识别模型套件PaddleOCR,目标是打造丰富、领先、实用的文本识别模型/工具库。首阶段的开源套件推出了重磅模型:8.6M超轻量中英文识别模型。用户既可以很便捷的直接使用该超轻量模型,也可以使用开源套件训练自己的超轻量模型。

项目地址:

https://github.com/PaddlePaddle/PaddleOCR

8.6M超轻量

中英文OCR模型开源

模型画像:

  • 总模型大小仅8.6M
  • 仅1个检测模型(4.1M)+1个识别模型(4.5M)组成
  • 同时支持中英文识别
  • 支持倾斜、竖排等多种方向文字识别
  • T4单次预测全程平均耗时仅60ms
  • 支持GPU、CPU预测
  • 可运行于LinuxWindowsMacOS等多种系统

PaddleOCR发布的超轻量模型由1个文本检测模型(4.1M)和1个文本识别模型(4.5M)组成,共8.6M。其中,文本检测模型使用的2020年发表于AAAI上的DB[1]算法,文本识别模型使用经典的CRNN[4]算法。鉴于MobileNetV3在端侧系列模型中的优越表现,两个模型均选择使用MobileNetV3作为骨干网络,可将模型大小初步减少90%以上。此外,通过减小通道数等操作,将模型大小进一步减小。超轻量模型组成详情如下图:

超轻量模型在推理速度上也有出色的表现,下面给出了PaddleOCR在T4和V100两种机型上的推理耗时评估,评估数据使用从中文公开数据集ICDAR2017-RCTW(https://rctw.vlrlab.net/dataset/)中随机抽取的500张图像,评估耗时阶段为图像输入到结果输出的完整阶段,评估详情如下:

可以看到,长边960像素时,T4平均耗时仅72ms,V100平均耗时更是低至29ms。减小长边尺寸,还可进一步加速。

PaddleOCR超轻量模型同时支持中英文识别,并且支持倾斜、竖排等多种方向的文字识别,我们看看效果示例。示例图中给出了每个文本检测框的识别结果(text)和相应的置信度(score)。

<< 滑动查看下一张图片 >>

可以看到,模型在中英文、数字、多角度文本上都能有很好的识别效果。

快速体验超轻量

中英文OCR模型

PaddleOCR已将该超轻量模型开源,感兴趣的小伙伴赶紧动手操练一下吧:

1. 准备PaddleOCR环境

参考github项目教程中的快速安装指导,准备好环境

2. 下载超轻量OCR模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir inference && cd inference
# 下载超轻量级中文OCR模型的检测模型并解压
wget https://paddleocr.bj.bcebos.com/ch_models/ch_det_mv3_db_infer.tar && tar xf ch_det_mv3_db_infer.tar
# 下载超轻量级中文OCR模型的识别模型并解压
wget https://paddleocr.bj.bcebos.com/ch_models/ch_rec_mv3_crnn_infer.tar && tar xf ch_rec_mv3_crnn_infer.tar
cd ..

3. 预测单张图片或图像集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 设置PYTHONPATH环境变量
export PYTHONPATH=.
# 预测image_dir指定的单张图像
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/ch_det_mv3_db/"  --rec_model_dir="./inference/ch_rec_mv3_crnn/"

更便捷的在线体验方案

该模型也已经内置在飞桨预训练模型应用工具PaddleHub中,供用户更便捷地体验,上传图片即可在线体验:

https://www.paddlepaddle.org.cn/hub/scene/ocr

准备环境:

需提前安装PaddlePaddle=1.7.2,然后更新PaddleHub到最新版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install paddlehub --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple

1. 加载预训练模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import paddlehub as hub
ocr = hub.Module(name="chinese_ocr_db_crnn") #加载预训练模型

2. 预测单张图片

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
results = ocr.recognize_text(paths=['/PATH/TO/IMAGE'], visualization=True)  #输入自定义待识别图片路径、并保存可视化图片结果

效果更好的大模型同步开源

除了上述超轻量模型,PaddleOCR同时开源了相应大模型——通用中文OCR模型,可以达到更好的识别效果,给用户提供多种选择。大模型的基础算法与超轻量模型一致:检测模型基于DB算法,识别模型基于CRNN算法,不同的是,检测模型骨干网络换成resnet50_vd[8],识别模型骨干网络换成resnet34_vd[8],模型效果示例:

<< 滑动查看下一张图片 >>

可以看到,大模型能够检测到更完整的文本行,并且识别更准确,如果对模型大小要求不高,但希望能有更好效果,可以选择使用大模型。大模型的体验步骤与超轻量模型一致,下载相应模型、替换预测命令中的模型路径即可体验:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 通用中文OCR模型的检测模型
https://paddleocr.bj.bcebos.com/ch_models/ch_det_r50_vd_db_infer.tar
# 通用中文OCR模型的识别模型
https://paddleocr.bj.bcebos.com/ch_models/ch_rec_r34_vd_crnn_infer.tar

训练自己的超轻量模型

我们知道,训练与测试数据的一致性直接影响模型效果,为了更好的模型效果,经常需要使用自己的数据训练超轻量模型。PaddleOCR本次开源内容除了8.6M超轻量模型,同时提供了2种文本检测算法、4种文本识别算法,并发布了相应的4种文本检测模型、8种文本识别模型,用户可以在此基础上打造自己的超轻量模型。

PaddleOCR本次开源了多种业界知名的文本检测和识别算法,每种算法的效果都达到或超越了原作。文本检测算法部分,实现了EAST[1]和DB[2]。在ICDAR2015文本检测公开数据集上,算法效果如下:

文本识别算法部分,借鉴DTRB[3]文字识别训练和评估流程,实现了CRNN[4]、Rosseta[5]、STAR-Net[6]、RARE[7]四种文本识别算法,覆盖了主流的基于CTC和基于Attention的两类文本识别算法。使用MJSynth和SynthText两个文字识别数据集训练,在IIIT, SVT, IC03, IC13, IC15, SVTP, CUTE数据集上进行评估,算法效果如下:

想要使用自定义数据训练超轻量模型的小伙伴,可以参考8.6M超轻量模型的打造方式,从PaddleOCR提供的基础算法库中选择适合自己的文本检测、识别算法,进行自定义的训练。PaddleOCR提供了详细的训练和模型串联指导:

https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/customize.md

更多PaddleOCR的应用方法,欢迎访问项目地址:

GitHub:

https://github.com/PaddlePaddle/PaddleOCR

Gitee:

https://gitee.com/PaddlePaddle/PaddleOCR

参考文献

[1] Zhou X, Yao C, Wen H, et al. EAST: an efficient and accurate scene text detector[C]//Proceedings of the IEEE conference on Computer Vision and Pattern Recognition. 2017: 5551-5560.

[2] Liao M, Wan Z, Yao C, et al. Real-time Scene Text Detection with Differentiable Binarization[J]. arXiv preprint arXiv:1911.08947, 2019.

[3] Baek J, Kim G, Lee J, et al. What is wrong with scene text recognition model comparisons? dataset and model analysis[C]//Proceedings of the IEEE International Conference on Computer Vision. 2019: 4715-4723.

[4] B. Shi, X. Bai, C. Yao. An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition. IEEE Trans. on PAMI , 39(11): 2298-2304, 2017.

[5] Borisyuk F, Gordo A, Sivakumar V. Rosetta: Large scale system for text detection and recognition in images[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018: 71-79.

[6] Liu W, Chen C, Wong K Y K, et al. STAR-Net: A SpaTial Attention Residue Network for Scene Text Recognition[C]//BMVC. 2016, 2: 7.

[7] Shi B, Wang X, Lyu P, et al. Robust scene text recognition with automatic rectification[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 4168-4176.

[8] https://paddleclas.readthedocs.io/zh_CN/latest/models/ResNet_and_vd.html

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PaddlePaddle 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
面试系列之-rocketmq消息机制
广播消费模式下,相同Consumer Group的每个Consumer实例都接收同一个Topic的全量消息。即每条消息都会被发送到Consumer Group中的每个Consumer进行消费;
用户4283147
2022/12/29
1.6K0
面试系列之-rocketmq消息机制
RocketMQ(一):消息中间件缘起,一览整体架构及核心组件
在队列的基础上,加入生产者与消费者模型,使用队列作为载体就能够组成简单的消息队列,在队列中“运输”的数据被称为消息
菜菜的后端私房菜
2024/09/12
1.1K0
Rocketmq--消息驱动
MQ(Message Queue)是一种跨进程的通信机制,用于传递消息。通俗点说,就是一个先进先出的数
IT小马哥
2021/06/03
7260
Rocketmq--消息驱动
【消息队列 MQ 专栏】消息队列之 RocketMQ
RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的顶级项目。作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼并有稳定出色表现的国产中间件,以其高性能、低延时和高可靠等特性近年来已经也被越来越多的国内企业使用。其主要特点有:
芋道源码
2018/07/31
6.4K0
【消息队列 MQ 专栏】消息队列之 RocketMQ
1.5万字 + 25张图盘点RocketMQ 11种消息类型,你知道几种?
并且,索性咱就直接把这个坑填得满满的,直接盘点RocketMQ支持的11种消息类型以及背后的实现原理
三友的java日记
2023/11/09
7400
1.5万字 + 25张图盘点RocketMQ 11种消息类型,你知道几种?
Spring Cloud 集成 rocketMq
后来通过查询资料得知,可能阿里的rocketMq服务版本比较高,ons客户端版本已经到了4.8而spring-cloud-starter-stream-
ruochen
2021/12/16
2.5K0
Springboot快速集成RocketMq
RocketMQ前身是阿里研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、高可靠、高实时、分布式特点。
用户7353950
2022/05/11
2K0
Springboot快速集成RocketMq
RocketMQ实战教程之常见概念和模型
官方文档: https://rocketmq.apache.org/zh/docs/introduction/02concepts
全干程序员demo
2024/05/30
2030
Apache RocketMQ 消息过滤的实现原理与腾讯云的使用实践
本文将系统阐述 Apache RocketMQ 消息过滤机制的技术架构与实践要点。首先从业务应用场景切入,解析消息过滤的核心价值;接着介绍 Apache RocketMQ 支持的两种消息过滤实现方式,帮助读者建立基础认知框架;随后深入剖析 SQL 语法过滤与标签(Tag)过滤的技术实现的核心原理以及规则限制;最后介绍腾讯云在消息过滤性能优化方面的具体实践。
腾讯云中间件团队
2025/04/04
1420
Apache RocketMQ 消息过滤的实现原理与腾讯云的使用实践
RocketMQ 和 RabbitMQ 的比较以及 RocketMQ 的使用
消息队列在项目中会经常用到,目前我们使用的是 RabbitMQ,但在 Java 技术栈下,RocketMQ 使用的比较多。下面比较下 RabbitMQ 和 RocketMQ。 RabbitMQ 和 RocketMQ 对比 1、设计理念和架构
郑子铭
2025/02/25
8280
RocketMQ 和 RabbitMQ 的比较以及 RocketMQ 的使用
RocketMq的使用demo
生产者和消费者都属于MQ的客户端,都继承于ClientConfig类,ClientConfig为客户端的公共配置类。这里将客户端相关配置信息写在最前面,大家可以看了就知道大概由哪些属性了,客户端配置
名字是乱打的
2021/12/24
1.1K0
RocketMq的使用demo
10分钟掌握RocketMQ的核心知识
Apache RocketMQ 是阿里开源的一款高性能、高吞吐量的分布式消息中间件。
微观技术
2021/04/19
6610
RocketMQ入门手册
继我上一篇博客后 分布式消息队列RocketMQ学习教程① 上一篇博客最主要介绍了几种常用的MQ,所以本博客再简单介绍一下RocketMQ的原理和简单的例子,基于Java实现,希望可以帮助学习者
SmileNicky
2019/01/17
1.6K0
RocketMQ 常用消息类型
同步发送是指消息发送方发出一条消息后,会在收到服务端返回响应之后才发下一条消息的通讯方式。
程序员果果
2021/02/02
9560
RabbitMQ都写了,RocketMQ怎么能落下?
最近看到了我在Github上写的rabbitmq-examples陆续被人star了,就想着写个rocketmq-examples。对rabbitmq感兴趣的小伙伴可以看我之前的文章。下面把RocketMQ的各个特性简单介绍一下,这样在用的时候心里也更有把握
Java识堂
2020/07/28
9130
RabbitMQ都写了,RocketMQ怎么能落下?
Apache RocketMQ QuickStart
RocketMQ作为一款分布式的消息中间件(阿里的说法是不遵循任何规范的,所以不能完全用JMS的那一套东西来看它),经历了Metaq1.x、Metaq2.x的发展和淘宝双十一的洗礼,在功能和性能上远超ActiveMQ。
一个会写诗的程序员
2018/08/17
7580
Apache RocketMQ QuickStart
SpringBoot2.0 整合 RocketMQ ,实现请求异步处理
RocketMQ 的核心,接收 Producer 发过来的消息、处理 Consumer 的消费消息请求、消息的持 久化存储、服务端过滤功能等 。
知了一笑
2019/07/19
2.1K0
SpringBoot2.0 整合 RocketMQ ,实现请求异步处理
RocketMQ事务消息使用与原理
最近在找工作,面试过程中被多次问到事务消息的实现原理,另外在分布式事务解决方案中,事务消息也是一个不错的解决方案,本篇文章将围绕RocketMQ的事务消息实现展开描述。
叔牙
2022/09/27
1.5K0
RocketMQ事务消息使用与原理
RocketMQ学习-消息发布和订阅
前面一篇文章分析了broker的启动过程,浏览了broker的基本功能。接下来的几篇文章,准备按照十分钟入门RocketMQ一文中提到的一系列特性,依次进行学习。这篇文章准备分析RocketMQ作为MQ的最基本的功能:消息的发布(publish)和订阅(subscribe)。首先,我参考Spring Boot系列文章(六):SpringBoot RocketMQ 整合使用和监控这篇文章完成了一个简单的例子。
阿杜
2018/08/06
6.1K0
RocketMQ学习-消息发布和订阅
RocketMQ原生API使用
代码地址:https://gitcode.net/java_wxid/rocketmq-api
Java廖志伟
2022/03/07
1.1K0
RocketMQ原生API使用
相关推荐
面试系列之-rocketmq消息机制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验