
快速搭建 Serverless 人臉識别離線服務
簡介
首先介紹下在本文出現的幾個比較重要的概念:
函數計算(Function Compute):函數計算是一個事件驅動的服務,通過函數計算,使用者無需管理伺服器等運作情況,隻需編寫代碼并上傳。函數計算準備計算資源,并以彈性伸縮的方式運作使用者代碼,而使用者隻需根據實際代碼運作所消耗的資源進行付費。函數計算更多資訊 參考 函數工作流(Function Flow):函數工作流是一個用來協調多個分布式任務執行的全托管雲服務。使用者可以用順序,分支,并行等方式來編排分布式任務,FnF 會按照設定好的步驟可靠地協調任務執行,跟蹤每個任務的狀态轉換,并在必要時執行使用者定義的重試邏輯,以確定工作流順利完成。函數工作流更多資訊
本文将重點介紹如何快速地通過函數計算與函數工作流部署一個定時離線批量處理圖檔檔案并标注出人臉的服務。
開通服務
解決方案
流程如下:
- 設定定時觸發器,定時觸發函數計算中的函數。
- 函數被觸發後,調用一次函數工作流中的流程。
- 函數工作流中的流程被執行:
- 調用函數計算中的函數,列舉出 OSS Bucket 根路徑下的圖檔檔案清單。
- 對于步驟1中列出的檔案清單,對每個檔案:
- 調用函數計算中的函數處理,進行人臉識别并标注。将标注後的檔案存入 OSS,最後将處理過的檔案進行轉移。
- 判斷目前 OSS 根路徑下是否有更多的檔案
- 如是,繼續步驟1
- 如否,結束流程
快速開始
- Clone 工程到本地
-
git clone [email protected]:ChanDaoH/serverless-face-recognition.git
-
- 替換項目目錄下 template.yml 檔案中的
為在杭州區域的 OSS Bucket (可以不是杭州區域的,需要同步修改YOUR_BUCKET_NAME
)OSS_ENDPOINT
ROSTemplateFormatVersion: '2015-09-01' Transform: 'Aliyun::Serverless-2018-04-03' Resources: face-recognition: Type: 'Aliyun::Serverless::Service' Properties: Policies: - Version: '1' Statement: - Effect: Allow Action: - 'oss:ListObjects' - 'oss:GetObject' - 'oss:PutObject' - 'oss:DeleteObject' - 'fnf:*' Resource: '*' listObjects: Type: 'Aliyun::Serverless::Function' Properties: Handler: index.handler Runtime: python3 Timeout: 60 MemorySize: 128 CodeUri: functions/listobjects EnvironmentVariables: OSS_ENDPOINT: 'https://oss-cn-hangzhou-internal.aliyuncs.com' detectFaces: Type: 'Aliyun::Serverless::Function' Properties: Handler: index.handler Runtime: python3 Timeout: 60 MemorySize: 512 CodeUri: functions/detectfaces EnvironmentVariables: OSS_ENDPOINT: 'https://oss-cn-hangzhou-internal.aliyuncs.com' timer: Type: 'Aliyun::Serverless::Function' Properties: Handler: index.handler Runtime: python3 Timeout: 60 MemorySize: 512 CodeUri: functions/timer Events: timeTrigger: Type: Timer Properties: CronExpression: '0 * * * * *' Enable: true # replace YOUR_BUCKET_NAME to your oss bucket name Payload: '{"flowName": "oss-batch-process", "input": "{\"bucket\": \"YOUR_BUCKET_NAME\",\"prefix\":\"\"}"}' oss-batch-process: Type: 'Aliyun::Serverless::Flow' Properties: Description: batch process flow DefinitionUri: flows/index.flow.yml Policies: - AliyunFCInvocationAccess
- 一鍵部署函數計算和函數工作流資源至雲端
- 安裝最新版本的 Fun
- 在項目根目錄下執行
fun deploy
效果驗證
- 在 OSS Bucket 的根目錄下放置圖檔
- 等待一分鐘後,定時觸發器觸發函數執行函數工作流。
- 工作流執行完成後,檢視 OSS Bucket
- 标注出人臉的圖像放置在
目錄下face-detection
- 标注出人臉的圖像放置在
- 處理過的錄像放置在
processed
總結
通過
函數計算+
函數工作流,搭建了一個定時批量處理圖檔進行人臉識别的服務。該服務因為使用了函數工作流的流程,将任務分為了多個步驟,隻需要確定每個步驟的函數能夠在函數計算限制時間(10分鐘)内完成即可。
工具,一鍵部署
,免去去多平台進行操作的步驟。
相關參考
參考示例