码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-09-29 00:35:35      阅读:286      评论:0      收藏:0      [点我收藏+]

标签: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识别系统

原文地址:http://qinzhishuma.blog.51cto.com/13226760/1969316

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!