前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >它会不会成为OCR领域霸主?经过一个月的分析,我得出了这些结论

它会不会成为OCR领域霸主?经过一个月的分析,我得出了这些结论

作者头像
手撕代码八百里
发布2020-10-26 11:17:24
2.8K2
发布2020-10-26 11:17:24
举报
文章被收录于专栏:猿计划猿计划

文章目录

  • 《这是我见过最强的OCR开源算法模型了》
  • 前言
  • 一、来吧,展示!
  • 二、OCR简介
    • (一)什么是OCR
    • (二)应用举例
    • (三)OCR难点
  • 三、PaddleOCR介绍
    • (一)总结介绍
    • (二)相关地址总结
  • 四、PaddleOCR的使用
    • (一)PaddleOCR项目介绍
    • (二)测试自己的数据
  • 五、多维度对比分析
    • (一)教程的完备性对比
    • (二)易用性对比
    • (三)运行速度对比
    • (四)精度对比
    • (五)多角度对比
    • (六)其他分析
  • 六、总结

《这是我见过最强的OCR开源算法模型了》

前言

最近参加“中国软件杯”的一个OCR识别相关的比赛。

赛题链接:http://www.cnsoftbei.com/plus/view.php?aid=516

部分要求如下:

在这里插入图片描述
在这里插入图片描述

手撕代码害怕鸭。

在这里插入图片描述
在这里插入图片描述

我们团队在题目的允许上,去寻找开源的OCR识别算法的模型,在github上有AdvancedEASTAttentionOCR算法,知名度还是比较高的,还有EasyOCR,还有PaddleOCR。对这几种OCR识别算法模型做了分析,得出了一些结论,并且选择了一个精确度特别高的模型,具体是谁,还需要继续往下看。

一、来吧,展示!

想了解一个东西,肯定要先看一下效果如何就像看论文一样,肯定先看摘要如果摘要里提及的内容个关键点并不是自己想要的,那么就没必要往下看了

的识别效果有如下:

在这里插入图片描述
在这里插入图片描述

识别效果图

不管你是横着、还是竖着、还是标点符号只要是文字就能给你检测出来精度肯定也没的说,大都在0.98以上

现在已经支持汉语、英语、日语、德语、法语等等语言识别

关键还有直接操作式网页版移动版没编程基础没开发环境让你轻松使用

在这里插入图片描述
在这里插入图片描述

移动端识别效果图

在这里插入图片描述
在这里插入图片描述

网页版识别效果图

不得不承认,这个开源的项目真是的良品。这效果太棒了,方便简单实用识别的还贼快。真的爱了。

哈哈,看起来是不是很棒呀!

但是看这么多了,你还不知道我说的是谁,是不是挺着急的。

有着一层神秘的面纱,咱们慢慢的来揭开这层神秘的面纱。

就是百度开源的PaddleOCR项目。

光说不练假把式下面就具体介绍下OCR以及PaddleOCR的优越性能和开发一个简单的示例使用步骤。

我们的参赛作品(部分PPT展示):

PPT可能做的不太好,大家有问题可以尽管提出来,嘿嘿,多多交流嘛!

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

真的很牛逼,PaddleOCR搭配上我们自己写的NLP,简直就是无敌呀!

在这里插入图片描述
在这里插入图片描述

当然了,现在还在参赛阶段,其他的还不方便公开,如果想要源代码和其他资料的话,赛后我都可以提供,可以留言邮箱,或者加我的粉丝群,等待我上传即可。

二、OCR简介

(一)什么是OCR

OCR——光学字符识别(Optical Character Recognition)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。亦即将图像中的文字进行识别,并以文本的形式返回。

(二)应用举例

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

在这里插入图片描述
在这里插入图片描述

(三)OCR难点

  • 1、技术难点:如透视缩放弯曲杂乱字体多语言模糊等;
  • 2、OCR应用常对接海量数据但要求数据能够得到实时处理
  • 3、并且OCR应用常部署在移动端或嵌入式硬件,而端侧的存储空间计算能力有限因此对OCR模型大小预测速度很高的要求

如此多的难点,肯定是要解决的啊,所以有难点就有解决的办法——PaddleOCR解决了上述所有的问题。是不是很期待的了解PaddleOCR呢?

三、PaddleOCR介绍

下面揭开PaddleOCR的神秘面目。一起来认识一下PaddleOCR

(一)总结介绍

  • PaddleOCR是一款超轻量中英文识别模型
  • 目标是打造丰富、领先、实用的文本识别模型/工具库
  • 3.5M实用超轻量OCR系统,支持在服务器,移动,嵌入式和IoT设备之间进行培训和部署
  • 同时支持中英文识别;支持倾斜、竖排等多种方向文字识别
  • 支持GPU、CPU预测
  • 可运行于Linux、Windows、MacOS等多种系统
  • 用户既可以通过PaddleHub很便捷的直接使用该超轻量模型,也可以使用PaddleOCR开源套件训练自己的超轻量模型

上面是官方解释,总结几点:

  • 1、体积小
  • 2、运行快
  • 3、方便简单
  • 4、性能还贼好

(二)相关地址总结

为了方便小伙伴们后期的使用,我把我使用的网址给大家总结汇总了一下,如下所示。

该模型已经开源,而且还给了很多的教程:

1、GitHub开源地址:https://github.com/PaddlePaddle/PaddleOCR

2、源码PaddleHub在线体验:https://aistudio.baidu.com/aistudio/projectdetail/507159

3、AI快车道2020-PaddleOCR学习教程: https://aistudio.baidu.com/aistudio/education/group/info/1519

4、网页版体验网址:https://www.paddlepaddle.org.cn/hub/scene/ocr

5、移动端下载二维码:

四、PaddleOCR的使用

(一)PaddleOCR项目介绍

OCR用户的需求很难通过一个通用模型来满足,为了方便开发者使用自己的数据自定义超轻量模型,除了3.5M超轻量模型外(可识别6622个汉字),PaddleOCR同时提供了2种文本检测算法(EAST、DB)、4种文本识别算法(CRNN、Rosseta、STAR-Net、RARE),基本可以覆盖常见OCR任务的需求,并且算法还在持续丰富中。

特别是模型训练/评估中的中文OCR训练预测技巧,更是让人眼前一亮,点进去可以看到中文长文本识别的特殊处理、如何更换不同的backbone等业务实战技巧,相当符合开发者项目实战中的炼丹需求。

以上这些在其官方GitHub上有详细的使用文档教程,建议把该项目克隆到本地,直接看那个md格式的中文版文档,介绍的非常详细,从安装部署到运行测试,每一步都有,堪称最全OCR开发者文档大礼包

在这里插入图片描述
在这里插入图片描述

首先这些教程大都是基于Linux的,对一些没有服务器或者刚接触深度学习的同学来说运行运行起来可能有点困难。

在这里插入图片描述
在这里插入图片描述

下面博主就来讲下怎么在Windows系统上直接运行。

(二)测试自己的数据

相信想尝试源码的同学大都要有Python深度学习的环境,可能有些没有paddle的环境,当然这安装起来也很简单,而且pip下载极快,毕竟是国产的框架嘛!嘿嘿?。

飞桨官网paddle环境配置教程:https://www.paddlepaddle.org.cn/install/quick

配好环境之后将GitHub的源码下载或者Git克隆到本地,在PaddleOCR里建个py文件输入以下内容:

代码语言:javascript
复制
from paddleocr import PaddleOCR
from tools.infer.utility  import draw_ocr
from PIL import Image
# Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
# 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
ocr = PaddleOCR(use_angle_cls=True, lang="ch")
img_path = 'img/test.png'#改成自己图片的地址
result = ocr.ocr(img_path, cls=True)
for line in result:
    print(line)
# 显示结果
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='/doc/simfang.ttf')
im_show = Image.fromarray(im_show)
im_show.show()
im_show.save('img/result.jpg')
12345678910111213141516171819

当然,也可以对整个文件夹里的图片内容进行检测识别并可以保存识别结果。

代码语言:javascript
复制
from paddleocr import PaddleOCR
from tools.infer.utility  import draw_ocr
from PIL import Image
import os
import csv

def pre_save(img_path,save_path,csv_path):
    f = open(csv_path, 'w', encoding='utf-8')
    writer = csv.writer(f)
    writer.writerow(["img", "result"])
    # Paddleocr目前支持中英文、英文、法语、德语、韩语、日语,可以通过修改lang参数进行切换
    # 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
    ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory
    i=0
    for img in os.listdir(img_path):
        print(img_path+'/'+img)
        i+=1
        result = ocr.ocr(img_path+'/'+img, cls=True)
        image = Image.open(img_path+'/'+img).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='/doc/simfang.ttf')
        im_show = Image.fromarray(im_show)
        #im_show.show()
        im_show.save(save_path+img)
        al = []
        for res in result:
            result = res[1][:][:]
            al.append(result)
        print(str(al))
        writer.writerow([img,str(al)])
    print(i)
##img_path是要检测的图片的文件夹地址,save_path是要保存结果的文件夹的地址(注意后面要有个/),csv_path是识别结果要保存的csv文件地址(可以自动创建)
img_path=r'F:\lzpython\PaddleOCR-develop\doc\imgs'
save_path=r'F:\chrome\zrbdata\imgs\result1/'
csv_path=r'F:\chrome\zrbdata\imgs\result.csv'
pre_save(img_path,save_path,csv_path)
1234567891011121314151617181920212223242526272829303132333435363738

不管你电脑是否有GPU,用这个代码,该模型都能跑(只是有GPU跑的更快一些罢了)。

五、多维度对比分析

回归正题,我们是来分析哪个模型算法比较好的;也到了最精彩的片段

单说肯定也看不出优秀之处,不如对比来看,嘿嘿! 现在主流的ocr开源项目主要有easyocr、chineseocr_lite当然还有大牛paddleocr

我们分别对比下面几种:

  • 1、教程的完备性对比;
  • 2、易用性对比;
  • 3、运行速度对比;
  • 4、精准度对比;
  • 5、多角度对比。

(一)教程的完备性对比

  • 作为一个开发者(入门没多久的开发者?),EasyOCR的文档真的一言难尽,chineseocr_lite的教程对pycharm使用者也是不太友好的
  • PaddleOCR的文档上面也贴出来了,不细说了自己看吧,从安装到训练到部署,可以说是我见过最详细的教程了。

总结: 1、EasyOCR和chineseocr_lite教程不便于没基础的人使用; 2、PaddleOCR的文档齐全,通俗易懂,适合无基础的人使用。

(二)易用性对比

  • PaddleOCR有网页版移动版可以让使用者直接用;在开发者使用时也是一样,PaddleOCR的详细的文档可以让开发者快速理解模型,并能训练自己的数据,甚至可以增加一些功能;EasyOCR应该也可以跟Paddle似的扩展不少东西,但还是苦于没有文档,没办法;chineseocr_lite给出了网页版和api接口也挺方便的,但还是苦于教程不全面,不太方面配置。
  • 同时PaddleOCR给出了多种模型,可以供开发者在不同场合使用。

模型简介

模型名称

推荐场景

检测模型

方向分类器

中英文超轻量OCR模型(8.1M)

ch_ppocr_mobile_v1.1_xx

移动端&服务器端

推理模型 /预训练模型

推理模型 /预训练模型

中英文通用OCR模型(155.1M)

ch_ppocr_server_v1.1_xx

服务器端

推理模型 /预训练模型

推理模型 /预训练模型

中英文超轻量压缩OCR模型(3.5M)

ch_ppocr_mobile_slim_v1.1_xx

移动端

推理模型 /slim模型

推理模型 /slim模型

(三)运行速度对比

评价一个算法的好坏,我们往往都是从时空复杂度来评价。

  • 用我的低配置电脑,同样的图片,从开始识别到打印出内容,PaddleOCR耗时2.15秒EasyOCR耗时9.96秒,这只是一张图片,几秒钟看不出啥区别,要是对很多张图片或者视频中的文字进行识别的话,差距确实有点大。
  • 接下来用多张图片进行运行时间上的对比,其主要差距有:
    • 在我的电脑上运行,其运行时间有明显差距PaddleOCR跑了141张图片仅仅用了6.9秒平均耗时为0.048s,与官方给的耗时数据相吻合;而EasyOCR跑了121张图片用了40.24秒平均耗时为0.33s
    • 为啥EasyOCR用了121 张图片呢?因为他不支持.gif格式的图片的识别,所以我将20张.gif格式的图片删了
    在这里插入图片描述
    在这里插入图片描述

    这是官方给的评估耗时数据: 在GPU T4上,移动端模型只需要137ms,而在骁龙855移动端处理时延也只有300ms左右。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(四)精度对比

当然了,评价一个模型是否可以使用,肯定要看准确度了,如果识别的都不准确,那肯定是无法进行应用的。以下面这个图片为例。

在这里插入图片描述
在这里插入图片描述

(1)PaddleOCR

PaddleOCR识别出了53段横竖文字(可以从图上看出,已经包含了该图片的所有文字了),其中错别字也就五个左右吧,置信度在0.6以下的有3段大部分文字置信度都在0.8以上

在这里插入图片描述
在这里插入图片描述

(2)EasyOCR

EasyOCR识别出了63段文字(没图片框,看不出所有文字是否全被识别),从识别内容和精度上来看,与paddleocr还有一定距离。

代码语言:javascript
复制
( '红动中国WWW. REDOCN.COM', 0.14594213664531708)
( 'Hey,', 0.9193199872970581)
('The happxienffgefgiga', 0.000323598796967417)
( 'nian le fan tian', 0.537309467792511)
( 'look, theres', 0.22078940272331238)
('alot ofwild flowers', 0.057002753019332886)
('你怏乐所以我快乐', 0.531562089920044)
('开心童年乐翻夭', 0.8216490149497986)
('-野凰青', 0.004080250393599272)
('on the lawn.', 0.44294288754463196)
('暗香', 0.9942429661750793)
('.RE', 0.18314962089061737)
( 'Thats', 0.7607358694076538)
('my', 0.6383113861083984)
('frend', 0.45365384221076965)
('FOREVER', 0.7280043363571167)
('童年的伙侔', 0.7070863246917725)
1234567891011121314151617
  • (3)chineseocr_lite: 该模型识别出了35段文字,总体来说和paddle差不多,但是置信度上却相差了一大截,chineseocr_lite置信度最高0.59,大部分是0.3~0.5之前的。
在这里插入图片描述
在这里插入图片描述

(五)多角度对比

对于OCR方向开发者而言,开源repo最吸引人的莫过于:

  • ① 高质量的预训练模型;
  • ② 简单易上手的训练代码;
  • ③ 好用无坑的部署能力。

简单对比一下目前主流OCR方向开源repo的核心能力

语种

预训练模型大小

F1-Score

端侧部署

自定义训练

支持pip安装

chineseocr_lite

中英文

4.7M

0.3899

支持

不支持

不支持

easyOCR

多语言

218M

0.2214

不支持

不支持

支持

PaddleOCR

多语言

3.5M

0.521

支持

支持

支持

  • 对于语种方面,chineseocr_lite仅支持中英文,easyOCR的优势在于多语言支持,非常适合有小语种需求的开发者,但PaddleOCR支持的语种也越来越丰富,目前支持中英文、英文、法语、德语、韩语、日语等多国语言。
  • 从预训练模型来看,easyOCR目前暂无超轻量模型chineseocr_lite最新的模型是4.7M左右而PaddleOCR提供的3.5M目前业界已知最轻量的
  • 对于部署方面,easyOCR模型较大不适合端侧部署Chineseocr_lite和PaddleOCR相对较小,都具备端侧部署能力,而且目前PaddleOCR已经给出了移动端的APP应用
  • 对于自定义训练,实际业务场景中,预训练模型往往不能满足需求,对于自定义训练和模型微调,但目前只有PaddleOCR支持
  • 从性能指标来看:针对OCR实际应用场景,包括合同,车牌,铭牌,火车票,化验单,表格,证书,街景文字,名片,数码显示屏等,收集的300张图像,每张图平均有17个文本框,PaddleOCR的F1-Score超过0.5,这个性能已经很不错了。

(六)其他分析

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

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

模型

骨干网络

precision

recall

Hmean

下载链接

EAST

ResNet50_vd

88.18%

85.51%

86.82%

下载链接

EAST

MobileNetV3

81.67%

79.83%

80.74%

下载链接

DB

ResNet50_vd

83.79%

80.65%

82.19%

下载链接

DB

MobileNetV3

75.92%

73.18%

74.53%

下载链接

SAST

ResNet50_vd

92.18%

82.96%

87.33%

下载链接

在Total-text文本检测公开数据集上,算法效果也是惊人的好。

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

模型

骨干网络

Avg Accuracy

模型存储命名

下载链接

Rosetta

Resnet34_vd

80.24%

rec_r34_vd_none_none_ctc

下载链接

Rosetta

MobileNetV3

78.16%

rec_mv3_none_none_ctc

下载链接

CRNN

Resnet34_vd

82.20%

rec_r34_vd_none_bilstm_ctc

下载链接

CRNN

MobileNetV3

79.37%

rec_mv3_none_bilstm_ctc

下载链接

STAR-Net

Resnet34_vd

83.93%

rec_r34_vd_tps_bilstm_ctc

下载链接

STAR-Net

MobileNetV3

81.56%

rec_mv3_tps_bilstm_ctc

下载链接

RARE

Resnet34_vd

84.90%

rec_r34_vd_tps_bilstm_attn

下载链接

RARE

MobileNetV3

83.32%

rec_mv3_tps_bilstm_attn

下载链接

SRN

Resnet50_vd_fpn

88.33%

rec_r50fpn_vd_none_srn

下载链接

使用LSVT街景数据集根据真值将图crop出来30w数据,进行位置校准。此外基于LSVT语料生成500w合成数据训练中文模型,相关配置和预训练文件如下:

模型

骨干网络

配置文件

预训练模型

超轻量中文模型

MobileNetV3

rec_chinese_lite_train.yml

下载链接

通用中文OCR模型

Resnet34_vd

rec_chinese_common_train.yml

下载链接

具体结果怎么出来的呢?可以参考PaddleOCR官方给的文档——模型训练/评估中的文本识别部分

六、总结

PaddleOCR总结几点:

  • 体积小
  • 运行快
  • 部署方便
  • 使用简单
  • 性能还贼好

通过各种维度的对比,我们还是决定使用PaddleOCR做为我们参加比赛的模型,现在已经开发的差不多了,可以持续关注我,等我们参加完比赛,可以把具体所有代码给公布出来,也方便大家学习。

也可以从https://github.com/trendinghttps://paperswithcode.com/看一下开源项目的排名,排名也都是很不错的,说明关注这个的人还是比较多的,说明用户群体也是很多的。

在这里插入图片描述
在这里插入图片描述

当然了,现在还在参赛阶段,其他的还不方便公开,如果想要源代码和其他资料的话,赛后我都可以提供,可以留言邮箱,赛后会一一发给大家的。

GitHub开源地址:https://github.com/PaddlePaddle/PaddleOCR

个人建议给国产开源项目一个Star,如果喜欢也可以点下Fork,我觉得这样他们会更有动力去继续创作,创新。

嘿嘿,如果Star了之后,可以找我拿我参赛的源代码。也算是给国产开源项目PaddleOCR一份支持的力量了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 《这是我见过最强的OCR开源算法模型了》
  • 前言
  • 一、来吧,展示!
  • 二、OCR简介
    • (一)什么是OCR
      • (二)应用举例
        • (三)OCR难点
        • 三、PaddleOCR介绍
          • (一)总结介绍
            • (二)相关地址总结
            • 四、PaddleOCR的使用
              • (一)PaddleOCR项目介绍
                • (二)测试自己的数据
                • 五、多维度对比分析
                  • (一)教程的完备性对比
                    • (二)易用性对比
                      • (三)运行速度对比
                        • (四)精度对比
                          • (五)多角度对比
                            • (六)其他分析
                            • 六、总结
                            相关产品与服务
                            AI 应用产品
                            文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档