手把手教程|構建無伺服器通用文字識別功能

亞馬遜雲開發者發表於2022-03-15

前言

無伺服器應用程式可保證您無需配置或管理伺服器,即可輕鬆執行程式碼內容。本文介紹了一種基於無伺服器架構的文字識別 (Optical Character Recognition, OCR) 解決方案可以對自然場景影像中的文字進行精準識別,其底層基於Amazon Lambda 和 Amazon API Gateway實現,Amazon Lambda的按請求付費、自動擴充套件和易用性使其成為資料科學團隊的熱門部署選擇。採用預訓練模型的文字識別是指通過Amazon Lambda呼叫預先訓練好的 OCR 機器學習模型,對文字資料的影像檔案進行分析識別處理,獲取文字及版面資訊的過程,亦即將影像中的文字進行識別,並以文字的形式返回。該解決方案具有非常廣泛的應用場景,可用於印刷體文字識別,手寫材料識別,影像內容稽核,出版物影像文字電子化等諸多領域。

OCR識別效果

image.png

架構介紹

無伺服器架構使用事件驅動型模型。Amazon Lambda 服務執行 Lambda 函式以響應事件。Amazon Lambda 函式可以直接從眾多整合的 Amazon 服務(包括 API Gateway)中呼叫。本方案基於Amazon CloudFormartion設計實現,部署後,使用者或程式傳送 API 請求至 Amazon API Gateway,請求 payload 中需要包含被處理的圖片URL或Base64編碼資訊,Amazon API Gateway 接收到 HTTP 到請求後,將請求資料傳送給對應的 Lambda 函式,Amazon Lambda 函式通過呼叫儲存在 Amazon EFS 裡面的預訓練模型完成推理,並將文字識別結果(JSON格式資料)返回給呼叫發起端。由於基於為無伺服器架構設計,所以使用者只需按實際呼叫量付費。

架構圖

Amazon API Gateway:一種完全託管的服務,可以幫助開發人員輕鬆建立、釋出、維護、監控和保護任意規模的 API;

Amazon Lambda:一種無伺服器的計算服務,讓您無需預置或管理伺服器、建立可感知工作負載的叢集擴充套件邏輯、維護事件整合或管理執行時,即可執行程式碼;

Amazon EFS:Amazon Elastic File System (Amazon EFS),提供可擴充套件性、彈性、可用性和耐用性,可作為企業應用程式和作為服務交付的應用程式的檔案儲存。為您的開發環境提供一個通用儲存庫,使您能夠以安全有序的方式共享程式碼和其他檔案。

部署方式

首先,請通過瀏覽器登入您的Amazon Web Service賬戶。登入後在瀏覽器中開啟亞馬遜雲科技解決方案庫首頁,然後在方案庫裡找到 AI Solution Kit 解決方案,點選開啟連結後切換到”文字識別(OCR)”選項卡(在頁面右上角可以切換顯示語言),在頁面右側點選需要部署到的區域(region)按鈕在控制檯中啟動相應的部署模版。

下面,以部署到中國(北京)區域為例,對通用文字識別(OCR)方案進行部署。

請點選“從亞馬遜雲科技中國(北京)區域控制檯中啟動方案”按鈕啟動對應的Amazon CloudFormation。在建立堆疊頁面檢查一下 Amazon S3 URL 的連結,然後點選“下一步”按鈕繼續。

在指定堆疊資訊頁面您可以修改堆疊名稱和認證方式等引數,在引數選項裡,由於本解決方案使用 Amazon API Gateway來接收API 呼叫請求,您可以使用aikitscustomAuthType-xxx 引數指定API的呼叫方式,如果您希望在北京或寧夏區域提供無需身份驗證(NONE)即可訪問的 API 請求,則需要申請並確保您的Amazon Web Services賬號已通過Internet Content Provider (ICP) 備案,80/443埠可以正常開啟。您還可以在“modelType”下選擇輕量模型(Lite)。點選“下一步”繼續。

  • 模型說明

image.png

在稽核頁面上,檢視並確認設定。選中確認模板將建立Amazon Identity and Access Management(IAM)資源的核取方塊。最後單擊“建立堆疊”按鈕開始部署。

您可以在 Amazon CloudFormation 控制檯的狀態列中檢視堆疊的狀態。大約15分鐘後看到狀態成為CREATE_COMPLETE說明建立成功。在堆疊建立成功後,可在Amazon CloudFormation的輸出/Outputs標籤頁中看到以 aikitsInvokeURL 為字首的記錄,請記住對應的呼叫URL。

完成這些步驟後,可以開啟Lambda Functions 控制檯中的Lambda函式檢查推理模型呼叫邏輯,目錄結構如下所示,其中,infer_ocr_app.py為Lambda Function呼叫預訓練模型的邏輯程式碼:

測試 OCR 功能

REST API介面

  • HTTP 方法: POST
  • Body 請求引數

image.png

  • 請求 Body 示例
{
  "url": "https://images-cn.ssl-images-amazon.cn/images/G/28/AGS/LIANG/Deals/2020/Dealpage_KV/1500300.jpg"
}
  • 示例樣圖

測試步驟

在配置結束後可以進行API呼叫測試,首先需要下載Postman測試工具。

下載地址: https://www.postman.com/downl...

在Postman中新建標籤頁,並把上一步中的API呼叫URL (aikitsInvokeURL) 貼上到位址列。選擇POST作為HTTP呼叫方法。開啟 Body 配置項,選中raw和JSON資料型別。在Body中輸入如下測試資料,單擊Send按鈕即可看到相應結果。

  • 返回引數說明

image.png

如果在部署OCR解決方案時選擇的AWS_IAM驗證方式,需要在請求前開啟Postman的Authorization配置,在下拉選單裡選擇 Amazon Web Service Signature ,並填寫對應賬戶的AccessKey、SecretKey和 Amazon Web Service Region(如 cn-north-1 或 cn-northwest-1 )。

另外,也可以通過Python程式來進行測試,在命令列視窗執行如下命令,通過pip3安裝好相關認證依賴項 aws_requests_auth。

pip3 install aws_requests_auth

把如下python原始碼保持到本地,並以.py 為檔案的字尾名。

import requests
import json
from aws_requests_auth.boto_utils import BotoAWSRequestsAuth

auth = BotoAWSRequestsAuth(aws_host='[YOUR-API-ID].execute-api.us-east-1.amazonaws.com',
                           aws_region='us-east-1',
                           aws_service='execute-api')

url = 'https://[YOUR-API-ID].execute-api.us-east-1.amazonaws.com/standard/ocr'
payload = {
    'url': 'https://images-cn.ssl-images-amazon.cn/images/G/28/AGS/LIANG/Deals/2020/Dealpage_KV/1500300.jpg'
}
response = requests.request("POST", url, data=json.dumps(payload), auth=auth)
print(json.loads(response.text))

在Amazon CloudFormation控制檯頁面,切換到“輸出/Outputs”,找到aikitsInvokeURL欄位,複製value裡面的URL,用於替換python原始碼裡面url的地址,並且使用URL裡面的API ID替換Python檔案裡面的[YOUR-API-ID],儲存後執行python3 ocr-iam-auth.py,即可看到如下的測試文字輸出結果:

% python3 ocr-iam-auth.py
[{'words': 'SALE', 'location': {'top': 38, 'left': 939, 'width': 73, 'height': 26}, 'score': 0.9969024062156677}, {'words': '鎮店之寶', 'location': {'top': 89, 'left': 348, 'width': 194, 'height': 47}, 'score': 0.9993890523910522}, {'words': '同步全球天天低價', 'location': {'top': 156, 'left': 367, 'width': 192, 'height': 27}, 'score': 0.9992773532867432}, {'words': '海外購', 'location': {'top': 208, 'left': 348, 'width': 68, 'height': 28}, 'score': 0.9987406730651855}, {'words': '折', 'location': {'top': 241, 'left': 664, 'width': 30, 'height': 25}, 'score': 0.9383366107940674}]

最後

AI 解決方案合集中的通用文字識別方案通過自動部署預訓練的文字識別模型,結合精準的語言模型和大詞庫,增強了對中文語言的處理與識別能力,提高輸入轉化效率。基於亞馬遜雲科技的Amazon CloudFormation 自動在Amazon API Gateway中建立呼叫RESTful API ,使用者在部署解決方案後只需將 HTTP(s) 請求引數提交到 Amazon API Gateway 自動建立的 URL 即可實現文字識別功能,就可以得到準確的返回結果。並且,該方案基於Amazon Lambda 、 Amazon API Gateway 等無服務架構,使用者無需擔心在雲中或本地管理和執行伺服器或執行時。只需按實際使用量支付費用。整個無伺服器架構中不會儲存使用者資料,從而保護了使用者的隱私。敬請關注瞭解AI 解決方案合集以體驗更多的開箱即用的雲上AI功能。

本篇作者

嚴一

亞馬遜雲科技創新解決方案架構師,負責基於亞馬遜雲科技 的雲端計算方案的架構設計,在應用開發, Serverless, 大資料方向有豐富的實踐經驗。

何孝霆

亞馬遜雲科技創新解決方案架構師,負責基於亞馬遜雲科技的雲端計算方案的架構設計,在應用開發, 人工智慧,Serverless 方向有豐富的實踐經驗。

相關文章