開發函式計算的正確姿勢——OCR 服務
作者 | 杜萬(倚賢) 阿里雲技術專家
簡介
首先介紹下在本文出現的幾個比較重要的概念:
OCR(光學字元識別):光學字元識別(Optical Character Recognition, OCR)是指對文字資料的影象檔案進行分析識別處理,獲取文字及版面資訊的過程。亦即將影象中的文字進行識別,並以文字的形式返回。
Tesserocr:Tesserocr 是 python 的一個 OCR 識別庫,但其實是對 tesseract 做的一層 python API 封裝,所以它的核心是 tesseract。
函式計算(Function Compute):函式計算是一個事件驅動的服務,通過函式計算,使用者無需管理伺服器等執行情況,只需編寫程式碼並上傳。函式計算準備計算資源,並以彈性伸縮的方式執行使用者程式碼,而使用者只需根據實際程式碼執行所消耗的資源進行付費。函式計算更多資訊
參考。
Funcrfat:Funcraft 是一個用於支援 Serverless 應用部署的工具,能幫助您便捷地管理函式計算、API 閘道器、日誌服務等資源。它通過一個資源配置檔案(template.yml),協助您進行開發、構建、部署操作。Fun 的更多文件參考。
備註: 本文介紹的技巧需要 Funcraft 版本大於等於 3.6.8 。
本文介紹將一個預製的 tesserocr 示例快速部署到函式計算平臺。該示例藉助於 Funcraft 安裝了最新的 4.1.1 版本的 tesseract,相比於包管理器的 3.0.2 版本識別率大幅度提升。
該示例提供了一個 vue.js 實現的互動介面,有三種提供輸入圖片的方式:使用示例圖片、上傳圖片或者提供圖片 URL。然後使用者點選識別按鈕就能迅速體驗識別效果。
將 tesserocr 部署於函式計算,藉助於函式計算的自動伸縮和按量計費的特性,提供了免運維和成本優勢。
下面是部署以後的使用效果動圖:
初始化
git clone https://github.com/vangie/fc-ocr-example.git
安裝依賴
$ fun install
本地測試
$ fun local start domain_for_ocr using template: template.yml CustomDomain domain_for_ocr of tesserocr/tesserocr was registered url: http://localhost:8000/ methods: [ 'GET', 'POST' ] authType: ANONYMOUS function compute app listening on port 8000!
使用瀏覽器開啟 http://localhost:8000/
同步檔案到 NAS
同步模型目錄 tessdata_fast
和 依賴目錄 .fun/root
.fun/python
到 NAS 盤。
$ fun nas sync
部署
$ fun deploy
using template: template.yml
using region: cn-shanghai
using accountId: ***********3743
using accessKeyId: ***********Ptgk
using timeout: 60
...
Detect 'DomainName:Auto' of custom domain 'domain_for_ocr'
Fun will reuse the temporary domain 1712300-1986114430573743.test.functioncompute.com, expired at 2020-04-27 19:35:00, limited by 1000 per day.
Waiting for custom domain domain_for_ocr to be deployed...
custom domain domain_for_ocr deploy success
...
注意上面返回的臨時域名地址:1712300-1986114430573743.test.functioncompute.com
使用瀏覽器開啟 http://1712300-1986114430573743.test.functioncompute.com
小結
- Tesserocr 庫提供了開箱即用的圖片識別效果,而且提供了預訓練好的模型,如果需要也可以直接訓練模型。
- 函式計算為 Tesserocr 服務化提供了便利。藉助函式計算可以輕鬆部署一個高可用、按量訪問量計費的 OCR 服務。
- Funcraft 工具解決 Tesserocr 移植到函式計算的一些技術難題,比如原生依賴、打包問題。細節可以檢視 Funfile 檔案。