基於Docker的OCR識別系統的誕生
開發字符OCR識別系統的原因:
眾所周知谷歌開源的tesseract-ocr是一套字符識別系統,其最新版本4.00采用了lstm(Long Short-Term Memory,長短時記憶網絡)神經網絡進行字符的訓練與識別,其支持100多種語言(字符),對於比較標準的印刷體字符,其識別準確率非常高(在我們提供的數據集上,準確率可以達到98%)。
如何進行字符識別系統框架搭建:
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口【1】。
由於tesseract-ocr
考慮到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識別系統的誕生