当前位置:   article > 正文

OCR方案_ocr解决方案

ocr解决方案

OCR方案

方案背景

大部分OCR厂商都是提供接口,外部通过api形式调用,在国内有公安部接口调用,具有资质的企业可以接入公安部接口,同时对外提供调用的服务。

在我们开发服务时,客户提出需要我们先选择一个OCR厂商,先经过一次OCR之后,数据存储之后,再经由客户调用国内的公安部接口,进行用户的有效性验证,并且不允许用户的数据传递给第三方,那么方案范围就很小了,一个是购买第三方服务,本地化部署,一个是寻找自建解决方案,自建解决方案对于一般小公司来说完全自建不现实,但是寻找一个开源的可用的方案,是可行的。

基于以上背景,我找到了三个服务,deepdetect,easyocr,paddleocr。

方案选型

deepdetect

介绍

首先,从这三款开源组建中,dd是我最早开始测试的方案,被吸引的是官网的介绍的清晰和部署的简洁。

dd是一个用于训练和管理模型的web平台,支持的学习库包括Caffe、Caffe2、Tensorflow、XGBoost、Dlib和NCNN。

  • 用于机器学习和深度学习的高级通用 API
  • 用于训练和管理模型的 Web UI
  • JSON 通讯格式
  • 远程 Python 客户端库
  • 支持异步训练调用的嵌入式服务器
  • 高性能,受益于多核 CPU 和 GPU
  • 用于文本、图像、原始数据(CSV、SVM)的灵活输入/输出连接器
  • 灵活的模板输出格式,以简化与外部应用程序(例如 Elasticsearch 等)的连接
  • 没有数据库依赖和同步,一切都在文件系统上组织
  • 通过 Caffe 和 Tensorflow 库支持最先进的深度学习,通过 XGBoost 支持决策树
  • 最有用的神经架构模板(例如 Googlenet、Alexnet、NiN、mlp、convnet、逻辑回归、ResNets……)
  • 一系列经过预训练的最先进的文本和图像模型
  • 内置模型评估措施的范围(例如 F1、多类对数损失……)
  • 支持多个机器学习服务,并行训练和预测调用
  • 充分利用 CPU 和 GPU
  • 对图像和其他数字和文本数据的监督学习、回归和预测、自动编码器、对象检测……
  • 25 多个预训练模型可用于各种应用,从 OCR 到图像标记、对象检测和情感分析
  • 25 多种不同架构的预训练模型,以实现迁移学习,从而加快训练阶段,并以更少的数据获得更高的最终准确度
  • 内置输入连接器可简化机器学习管道的设置
  • 轻松管理大型图像数据集
  • 轻松管理和预处理 CSV 数据文件
  • 使用动态数据增强(例如旋转、镜像等)处理大量图像的连接器
  • 用于处理具有预处理功能的 CSV 文件的连接器
  • 以 SVM 格式处理稀疏数据的连接器
  • 处理文本文件的连接器
  • 可以通过 API 通过模板设置各种外部应用程序的输出连接器,无需代码(例如,用于 Elasticsearch、XML、SQL 等)

以上摘自dd官网,下边介绍一下我测试时使用的方式

部署

部署方案参考官方文档,结合目前资源,采用docker部署方式

首先dd分为platform版本和server版本,platform版本除了具有server版本之外主要还继承了可视化python编辑器Jupyter,并且有一个web控制台提供了模型训练,部署,以及测试的功能。server版本提供纯命令行形式的模型部署和训练,并提供api进行调用。

dockerhub上已经发布了多个版本的docker镜像,部署时只需要按照官网的quickstart的步骤,进行部署即可。

官网文档:https://www.deepdetect.com/

git地址:https://github.com/jolibrain/deepdetect

使用

聊到使用,我们就要从实际的需求出发聊一下OCR的识别步骤,OCR识别主要其实就是三步

一、图像预处理 二、文字检测 三、文本识别

而dd对前两步提供了一个模型叫做detect模型,第三步提供了一个模型叫做ocr模型,最终我们需要使用dd的chain的功能把两个模型串联起来,从而实现一次调用,出现最终结果

easyocr

easyocr是目前我测试的这三个模型中,对于小语种支持最好的模型,针对小语种,分别提供了不同的模型和语言字典,唯一的遗憾就是并没有提供压缩版的轻量级模型,导致在运行中效率不是太理想。所以使我不得不再去寻找第三个方案,这里先记录一下easyocr在了解过程中的一些情况

介绍

easyocr是GitHub上的开源版本,也是遵循apache2.0协议,不足点就是在docker部署下,我们需要单独写一个python服务进行调用和发布restful。其实如果对于效率没有太高的要求,使用easyocr已经满足了大部分场景的需求

部署

官网地址:https://www.jaided.ai/

github地址:GitHub - JaidedAI/EasyOCR: Ready-to-use OCR with 80+ supported languages and all popular writing scripts including Latin, Chinese, Arabic, Devanagari, Cyrillic and etc.

同样部署采用docker方式部署,官网提供了dockerfile,在本地构建后,需要创建python文件,调用easyocr的api,同时使用python或者java或者go公布一个resful api就可以调用了。

使用

关于使用我们启动docker容器后,访问发布的端口,最终会成功返回识别后的结果,唯一不足是我识别出一个我要识别的图片需要等16秒钟左右,看官方提示使用gpu后效率会提升6-8倍,目前还未测试,效果未知,但是识别后的小语种的结果匹配度目前看是要比paddle高

paddleocr

介绍

可以说paddleocr是最近ocr的主力军,大家对于paddleocr的认可度是相当的高,特别是最近推出的轻量级模型,可以识别近80种语言,并且效率是这三种ocr工具种最高的,相同的图片,paddleocr只需要2秒左右。只是匹配度上,对于小语种来说不尽人意,特别是轻量级模型对于一些小语种的识别并不能正确区别出单词,会把空格分隔符全部去掉。对于正确率来说大打折扣。最后对于拉丁文小语种,我没有采用latin的模型,而使用官方的英文模型,正确率明显提升,对于我的需求来说也算是满足了。但是对于多场景的小语种需求,还是需要再多多训练模型。paddleocr最大的好处是文档健全,支持自己训练模型,所以对于网上大多数的文章来说有很多使用者已经基于这个平台开始训练自己的模型,使用场景非常广泛。对于新的服务,建议使用paddleocr。

部署

部署上同样采用docker部署,官方文档中也描述了怎么使用docker进行部署,同时好于easyocr的是基于docker部署的方式会发布出端口8866供外部使用api进行模型调用。

基于官方文档就可以进行正常的部署了,只不过在部署时默认使用的是官方最新的轻量级ppocrv2的模型,这个模型效率快,对于中文和英文识别效果很好,只是对于我的场景,小语种的识别正确率不是太好,所以我测试了官方的latin语和英语的模型,对于我的场景英语的模型正确率更高,速度上来说latin语和英语的速度都低于优化后的轻量模型ppocrv2.

另外值得一提的是官方我只适用了轻量模型,对于server版本的模型,适用一次后发现速度明显下降,对于我的场景速度和正确率是同样重要的,所以最终放弃了server版本的模型。

使用

使用上,非常方便,返回结果针对easyocr我做了适配,使paddleocr和easyocr返回的结果的对象最终是同一套结构,也使得我在做最后的识别结果后的处理时能够使用同一套规则算法。

总结

以上是我最近测试三款ocr工具的一个对比总结。其实我们在选型时要考虑正确率,速率,部署难易度,对于硬件的要求,实施的成本等等各种因素,同时还要考虑我们部署后,是否能够基于这个服务进行二次维护和升级,并且可以最大发挥服务的作用。

在easyocr官网中还明确提到了另外两款ocr识别工具Tesseract-OCR和KerasOCR,我想抽个时间也要看一下。测试一下效果,并了解一下原理。

选型之后,下一步就是要做成服务,供业务系统来调用,服务中主要是需要针对使用场景,做识别优化,包括需要用到字符串匹配度算法,用到对于图片的分区处理考虑的思路。以后有时间再继续总结。

最后打算在完成整个OCR方案的实施之前准备还要多了解一些不同的方案,了解他们的原理,并且基于实际应用的考虑需要做架构的设计,压力测试,之后也会慢慢更新。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/593613
推荐阅读
相关标签
  

闽ICP备14008679号