1. 程式人生 > >基於Docker的OCR識別系統的誕生

基於Docker的OCR識別系統的誕生

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識別系統的誕生