基于Docker的OCR识别系统的诞生

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Docker的OCR识别系统的诞生相关的知识,希望对你有一定的参考价值。

开发字符OCR识系统的原因:

众所周知谷歌开源的tesseract-ocr是一套字符识别系统,其最新版本4.00采用了lstm(Long Short-Term Memory,长短时记忆网络)神经网络进行字符的训练与识别,其支持100多种语言(字符),对于比较标准的印刷体字符,其识别准确率非常高(在我们提供的数据集上,准确率可以达到98%

 

如何进行字符识别系统框架搭建:

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口【1】。

由于tesseract-ocr目前只支持ubuntu系统安装(4.00版本只支持ubuntu 16.0.4以上系统安装),而且安装过程比较复杂、耗时。鉴于此,我们采用ubuntu 16.0.4的Docker镜像,生成Docker容器,然后将tesseract-ocr字符识别服务安装到Docker容器中,最后部署一个flask服务,暴露服务端口,提供给其他业务系统使用。

考虑到Docker容器中的flask服务需要自启动,以及服务可能由于程序异常而造成停止服务的情况,因此,需要在容器中添加自启动程序以及服务监听程序。自启动以及监听程序可以利用linux的定时器crontab命令,添加一条定时任务(每一分钟检测一次),检测程序是否正常运行,当服务不正常时,重启flask服务。在将该容器的服务移植到其他linux服务器(宿主机)后,考虑到服务器可能断电,或者宕机的情况,也需要在宿主机上利用crontab添加一条定时任务,监测Docker容器是否正常运行,如果运行不正常,需要重启该Docker容器。

考虑到该容器移植的便利性,我们利用Docker的commit和save命令,将该容器提交成新的镜像,并将该镜像保存为tar包,部署该OCR应用容器时,只需要将该tar包拷贝到宿主机上,利用Docker的load以及run命令,启动该容器以及自启动容器内的OCR识别服务。

    基于Docker的OCR识别系统的整个部署流程的关键操作步骤如下:

    提交容器变化到镜像中

    docker commit 【containerId】 ocr_images:ocr_api

    保存镜像到tar包中

    docker save ocr_images:ocr_api > ocr_images.tar

    加载OCR服务镜像

    docker load < ocr_images.tar

    启动OCR服务容器

    docker run -t -d -p 0.0.0.0:8000:8000 --name ocr_api ocr_images:ocr_api

技术分享

OCR服务框架设计图

OCR识别系统的优点:

将该Docker服务(基于ubuntu 16.0.4,tesseract-ocr 4.00)打包成tar包后,就可以移植到任意linux平台上,包括移植到centos服务器上,移植到低版本的ubuntu上等等,充分发挥Docker容器的移植便利性,使该OCR服务能够非常便利的跨平台使用。

逐步优化的OCR识别系统:

由于该OCR识别系统比较耗时,我们在多台物理机上部署了若干个OCR识别服务,并进行了负载均衡,满足勤智的字符识别业务需求,例如:实现了证件照、名片上文字提取,法院判案中证明材料、裁判文书等字符提取任务,大大降低了对人工的依赖,提升工作效率


[1]百度百科Docker介绍

本文出自 “勤智数码” 博客,转载请与作者联系!

以上是关于基于Docker的OCR识别系统的诞生的主要内容,如果未能解决你的问题,请参考以下文章

图像识别基于OCR识别系统matlab源码

图像识别基于OCR识别系统matlab源码

OCR文字识别

OCR文字识别

公有云OCR识别服务平台

OCR识别银行卡识别SDK—系统APP集成