为什么写这篇文章? 以前看我博客的老粉应该都知道,我从17年开始写技术博客,到今年因为各种原因停更很久,知乎上发的一些技术向文章、教程也是很久之前写的了。一是工作忙,二是我觉得写技术博客救不了年轻人,所以改做视频了。 最近还算有空,上一期视频又刚好用到了OCR的工具,出于一个写了三年博客的人的习惯,我还是决定记录一下这些使用记录,供大家参考。 OCR介绍 什么是OCR?OCR当前的常用技术? 说到OCR,我提个广告大家肯定都熟悉“小猿搜题,拍照搜题的利器”。这就是OCR在O2O教育领域的一个完美应用。 从严格定义来看,学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。亦即将图像中的文字进行识别,并以文本的形式返回。 OCR的基本流程可以简单分为以下几步: 1. 输入:不同的图像格式有不同的存储、压缩方式,目前有OpenCV、CxImage等。 2. 二值化:如今数码摄像头拍摄的图片大多是彩色图像,彩色图像所含信息量巨大,不适用于OCR技术。为了让计算机更快的、更好地进行OCR相关计算,我们需要先对彩色图进行处理,使图片只剩下前景信息与背景信息。二值化也可以简单地将其理解为“黑白化”。 3. 图像降噪:对于不同的图像根据噪点的特征进行去噪的过程称为降噪。 4. 倾斜校正:由于一般用户,在拍照文档时,难以拍摄得完全符合水平平齐与竖直平齐(我本人就经常拍的歪歪扭扭),因此拍照出来的图片不可避免的产生倾斜,这就需要图像处理软件进行校正。 5. 版面分析:将文档图片分段落,分行的过程称为版面分析 6. 字符切割:由于拍照、书写条件的限制,经常造成字符粘连、断笔,直接使用此类图像进行OCR分析将会极大限制OCR性能。因此需要进行字符切割,即:将不同字符之间分割开。 7. 字符识别:早期以模板匹配为主,后期以结合深度网络的特征提取为主。版面还原:将识别后的文字像原始文档图片那样排列,段落、位置、顺序不变地输出到Word文档、PDF文档等,这一过程称为版面还原。 8. 后期处理:根据特定的语言上下文的关系,对识别结果进行校正。 9. 输出:将识别出的字符以某一格式的文本输出。 以上9步也可以简单总结为 图像预处理和一般的cv流水线没太大差别,基本就是降噪矫正加强老三样。而目前OCR的常见算法模型则迭代的比较迅速,包括文字检测领域的2016 ECCV乔宇老师团队的CTPN,2017 CVPR的EAST和Seglink,感兴趣可以看论文继续了解。文字识别近两年则没有太大进展,有两种传统方法,一种是CNN+RNN+CTC,白翔老师团队的CRNN写的比较清楚,还有一种是CNN+RNN基于Attention的方法。 值得一提的是,OCR这块最近有个比较火的方向,直接把文字检测和识别放到一个网络里joint train,沈春华老师团队2017 ICCV的Towards End-to-end Text Spotting with Convolutional Recurrent Neural Networks这篇文章已经在水平文字上把检测识别end to end做的比较work,感觉这可能是未来一两年的一个热点。 说完算法,下面具体谈谈一些OCR的常用工具和平台。毕竟大多数使用者(包括我)90%的工作就是调包,比如 import paddleocr as ocr 不过调侃归调侃,除非是专门研究这个领域的科研同学,作为OCR使用者,其实大致了解即可,深入算法的性价比不高。与此相对的,如何选择一个可靠、易用的OCR框架则是我们要面临的主要问题。 这种选择本质上像是深度学习界的框架之争,但其实并没有哪个框架是绝对好的,各有优劣。所以,如何选择一个适合自己的OCR框架并深入应用,也是一门艺术。 为了完成自己的需求,我先后尝试了4种不同的OCR框架/Toolkit 这里根据自己的使用经验,我把所有信息封装到以下4个方面:新手友好度、OCR性能、使用成本、个性化训练,做个简短比较,方便大家之后选择适合自己的OCR工具。 PS. 使用成本的★越多代表成本越低 1. 腾讯优图 先讲讲OCR这块做的最早,也是商业化最成功的平台之一,腾讯优图。 地址:https://cloud.tencent.com/product/ocr-catalog 新手友好度(★★★☆) 文档在官网就有,分成了两个部分: 一个是新手指引,教你怎么注册腾讯云,以及开通对应的OCR服务。这里有一点做的比其他几家要好,就是它将用户分为了四类来分别作引导,分别是无代码基础、开发初学者、开发工程师和客户端开发,每一类都有单独的文档链接供不同的用户浏览。 另一个是入门指引,也就是通过新手指引的不同分类中跳转到详细的分页。这里要吐槽一下,入门文档的前半部分和新手指引一字不差,复制粘贴还不如不加。 我因为有开发经验,只需要调用API,所以选了第二种引导。里面写的还是非常详细的,一步一步教我怎么开通、调用腾讯的API。FAQ写的也很全,总体来说对新手很友好。 OCR性能(★★★★) 优图这边采用全API调用,也就是没法用自己的测试集去直接离线跑模型的accuracy、recall这类指标。但是作为优图实验室出品的商业化OCR,模型指标和参数之类的肯定已经tune到极致了,这点没得说。 使用成本(★☆) 使用成本可以分为时间成本和金钱成本来看: 时间成本 有点我始终没想明白,为什么试用一下OCR功能还要实名认证,不仅要注册、手机验证码,还要身份证/人脸识别???这些步骤让我想起每去一个地方就要重新注册一个健康码的糟糕体验,建议腾讯优化一下这个劝退操作。 除了认证复杂,其他体验还不错。因为是调用API,所以开发的时间成本很低,照着demo代码改改就行。但是腾讯云必须要注册并实名认证之后才能使用,此外还要领免费包或者购买资源包,这点花了我不少时间。 根据OCR任务的不同(比如身份证识别、银行卡识别),用户需要修改发送的请求参数格式。格式的细节在文档里列的很清楚,倒也算方便。需要注意的是,返回的报文也有不同的参数模式,解析的时候也要改。 金钱成本 商业化的OCR肯定是要付费的,说实话价格不便宜。对于有大量高精度识别需求的企业来说自然不差这点钱,但是我等穷苦开发者,想想还是作罢。 开源与个性化训练(☆) 首先,优图OCR不开源,除了商业化的考量,应该也涉及到自己实验室的算法专利、隐私数据等,不开源属于情理之中。但是对于想要自己DIY或者训练精调模型的开发者来说就比较蛋疼了,除了调个API你什么都动不了,连内部的实现方法都看不到,所有识别也只能基于官方给出的8个固定类型,自由度很低。 总结:高精度、高价格、对非技术新手友好、不支持开发、注册流程复杂 综上,优图作为一个完善的商业化OCR平台,日常的功能基本都满足,OCR模型的准确度也非常高。但是因为我需要做一些OCR的定制化开发,而优图又只支持API调用,所以最后无奈放弃。 2. EasyOCR、Chineseocr、Chineseocr_lite 这三个OCR开源工具是Github里包含中文OCR功能的,排序相对靠前的两个项目,star也都很多。这里我把它们放在一块讲,一是因为这两个开源工具包都比较相似,二是EasyOCR是全语种的(包括70+门外语识别),不单单针对中文,所以它的官方文档自然也都是英文了。对于英文不好的小伙伴来说很不友好。所以这里主要还是基于Chineseocr_和Chineseocr_lite,会提及到EasyOCR 新手友好度(★★☆) Github的文档可能非技术的同学看起来比较费劲,但是对开发同学来说一目了然。编译配置之类的信息,也都写的很清楚 FAQ的话直接在issue里找也基本能覆盖所有常见问题,如果实在找不到可以自己提一个,会有其他follow的用户一起讨论。 不过这种自发、开源的工具,就不要指望有腾讯那种事无巨细的产品文档了,细节不会写的非常清楚。比如我在安装过程中,一度出现了很多BUG,但找不到对应解决方案,只能自己摸索。 属实挺头疼的,建议新手找个有开源库编译经验的帮忙搭建环境。 OCR性能(★★★) […]
View DetailsOCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;
现在有很多软件都支持这个功能,比如钉钉就支持扫描图片后直接转成文字。
在OCR识别领域,有一个开源的项目——Tesseract,Tesseract是一個光学字符识别引擎。Tesseract是基于Apache许可证的自由软件,自2006 年起由Google赞助开发。2006年,Tesseract被认为是最精准的开源光学字符识别引擎之一。
View DetailsOCR是什么?
光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。亦即将图像中的文字进行识别,并以文本的形式返回。
目前发展现状
ocr的发展已经有了非常多的积累,一般人或者企业使用, 都是直接使用第三方的服务,目前提供第三方服务的大企业也非常多,百度,阿里云,腾讯等等,都提供了非常方便的api接口,可以进行调用,识别的速度、精确度和效果也都是非常不错的。唯一的缺点就是api的调用是需要收费的,对于调用频次不高的个人和企业,这个费用还是非常低的。
OCR技术
OCR技术是光学字符识别的缩写(Optical Character Recognition),利用文字识别技术将图像信息转化为文本信息。应用于银行票据、大量文字资料、档案卷宗、文案的录入和处理领域,例如:自动识别身份证号码,将AI引入审核场景,与风控规则相结合,减少人为对图片的审核,大大提高审核效率。
OCR开发包
由于图像技术门槛较高,特别是中文语言库需要大量的训练才能达到较高的识别率。目前很多OCR软件,一般都是借用大公司的API接口实现的,如百度OCR接口。在线接口识别率比较高,但受限于网络和调用次数,有些场景须考虑离线使用。
开源的OCR识别框架 Tesseract-OCR (https://github.com/tesseract-ocr ),由HP实验室开发,后由Google维护的开源OCR引擎,可以不断的训练语言库,使图像转换文本的能力不断增强。 SDK包含libtesseract、命令行程序,支持跨平台开发,支持Java,Python等语言调用,建议选择4.0以后版本,准确率有较大提升,需要识别中文信息可单独添加中文词库。
View Details{
created () {
this.$nextTick(() => {
// 可以使用回调函数的写法
// 这个函数中DOM必定渲染完成
})
this.$nextTick().then(() => {
// 也支持promise
// 这个函数中DOM必定渲染完成
})
}
}
vue-manage-system 是一个基于 Vue3 和 Element Plus 的后台管理系统解决方案,它提供了一系列的通用组件和基础功能,可以帮助开发者快速搭建后台管理系统。该系统包含了用户管理、权限管理、数据可视化、表单编辑等常见功能,同时也提供了多种主题风格和自定义配置选项,方便开发者根据自己的需求进行定制。 https://github.com/lin-xin/vue-manage-system vue-vben-admin Vue Vben Admin 是一个基于 Vue3 和 TypeScript 的开源后台管理系统模板,它包含了众多的组件和插件,可以帮助开发者快速构建出高质量的后台管理系统。Vue Vben Admin 具有极高的可扩展性和灵活性,可以轻松地满足不同的业务需求。它还提供了丰富的文档和示例代码,使得开发者可以快速上手并进行开发。 https://github.com/vbenjs/vue-vben-admin vue-manage-system 是一个基于 Vue3 和 Element Plus 的后台管理系统解决方案,它提供了一系列的通用组件和基础功能,可以帮助开发者快速搭建后台管理系统。该系统包含了用户管理、权限管理、数据可视化、表单编辑等常见功能,同时也提供了多种主题风格和自定义配置选项,方便开发者根据自己的需求进行定制。 https://github.com/lin-xin/vue-manage-system vue-manage-system 是一个基于 Vue3 和 Element Plus 的后台管理系统解决方案,它提供了一系列的通用组件和基础功能,可以帮助开发者快速搭建后台管理系统。该系统包含了用户管理、权限管理、数据可视化、表单编辑等常见功能,同时也提供了多种主题风格和自定义配置选项,方便开发者根据自己的需求进行定制。 https://github.com/lin-xin/vue-manage-system vue-manage-system 是一个基于 Vue3 和 Element Plus 的后台管理系统解决方案,它提供了一系列的通用组件和基础功能,可以帮助开发者快速搭建后台管理系统。该系统包含了用户管理、权限管理、数据可视化、表单编辑等常见功能,同时也提供了多种主题风格和自定义配置选项,方便开发者根据自己的需求进行定制。 https://github.com/lin-xin/vue-manage-system vue-manage-system 是一个基于 Vue3 和 Element Plus 的后台管理系统解决方案,它提供了一系列的通用组件和基础功能,可以帮助开发者快速搭建后台管理系统。该系统包含了用户管理、权限管理、数据可视化、表单编辑等常见功能,同时也提供了多种主题风格和自定义配置选项,方便开发者根据自己的需求进行定制。 https://github.com/lin-xin/vue-manage-system 参考:https://www.zhihu.com/question/440658257
View Details