它会不会成为OCR领域霸主?经过一个月的分析,我得出了这些结论
文章目录
- 《这是我见过最强的OCR开源算法模型了》
- 前言
- 一、来吧,展示!
-
二、OCR简介
- (一)什么是OCR
- (二)应用举例
- (三)OCR难点
-
三、PaddleOCR介绍
- (一)总结介绍
- (二)相关地址总结
-
四、PaddleOCR的使用
- (一)PaddleOCR项目介绍
- (二)测试自己的数据
-
五、多维度对比分析
- (一)教程的完备性对比
- (二)易用性对比
- (三)运行速度对比
- (四)精度对比
- (五)多角度对比
- (六)其他分析
- 六、总结
《这是我见过最强的OCR开源算法模型了》
前言
最近参加“
中国软件杯
”的一个OCR识别相关的比赛。
赛题链接: http://www.cnsoftbei.com/plus/view.php?aid=516
部分要求如下:
手撕代码害怕鸭。
我们团队在题目的允许上,去寻找开源的OCR识别算法的模型,在github上有
AdvancedEAST
和
AttentionOCR
算法,知名度还是比较高的,还有
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文件输入以下内容:
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
当然,也可以对整个文件夹里的图片内容进行检测识别并可以保存识别结果。
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
for img in os.listdir(img_path):
print(img_path+'/'+img)
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还有一定距离。
( '红动中国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)