Categories
程式開發

快速搭建 Serverless 人臉識別離線服務


簡介

首先介紹下在本文出現的幾個比較重要的概念:

函數計算(Function Compute):函數計算是一個事件驅動的服務,通過函數計算,用戶無需管理服務器等運行情況,只需編寫代碼並上傳。函數計算準備計算資源,並以彈性伸縮的方式運行用戶代碼,而用戶只需根據實際代碼運行所消耗的資源進行付費。函數計算更多信息參考

函數工作流(Function Flow):函數工作流是一個用來協調多個分佈式任務執行的全託管雲服務。用戶可以用順序,分支,並行等方式來編排分佈式任務,FnF 會按照設定好的步驟可靠地協調任務執行,跟踪每個任務的狀態轉換,並在必要時執行用戶定義的重試邏輯,以確保工作流順利完成。函數工作流更多信息參考

本文將重點介紹如何快速地通過函數計算與函數工作流部署一個定時離線批量處理圖片文件並標註出人臉的服務。

開通服務

  1. 免費開通函數計算,按量付費,函數計算有很大的免費額度。
  2. 免費開通函數工作流,按量付費,目前該產品在公測階段,可以免費使用。
  3. 免費開通對象存儲,按量付費。

解決方案

快速搭建 Serverless 人臉識別離線服務 1

流程如下:

  1. 設定定時觸發器,定時觸發函數計算中的函數。

  2. 函數被觸發後,調用一次函數工作流中的流程。

  3. 函數工作流中的流程被執行:

    i. 調用函數計算中的函數,列舉出 OSS Bucket 根路徑下的圖片文件列表。

    ii. 對於步驟1中列出的文件列表,對每個文件:

    調用函數計算中的函數處理,進行人臉識別並標註。將標註後的文件存入 OSS,最後將處理過的文件進行轉移。

    iii. 判斷當前 OSS 根路徑下是否有更多的文件

    如是,繼續步驟1

    如否,結束流程

快速開始

  1. Clone 工程到本地

    git clone [email protected]:ChanDaoH/serverless-face-recognition.git

  2. 替換項目目錄下 template.yml 文件中的 YOUR_BUCKET_NAME 為在杭州區域的 OSS Bucket (可以不是杭州區域的,需要同步修改 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
    
  3. 一鍵部署函數計算和函數工作流資源至雲端

    安裝最新版本的 Fun

    在項目根目錄下執行 fun deploy

效果驗證

  1. 在 OSS Bucket 的根目錄下放置圖片

    快速搭建 Serverless 人臉識別離線服務 2

  2. 等待一分鐘後,定時觸發器觸發函數執行函數工作流。

    快速搭建 Serverless 人臉識別離線服務 3

  3. 工作流執行完成後,查看 OSS Bucket

    • 標註出人臉的圖像放置在 face-detection 目錄下

      快速搭建 Serverless 人臉識別離線服務 4

    • 處理過的錄像放置在 processed 目錄下

      快速搭建 Serverless 人臉識別離線服務 5

總結

通過 函數計算 + 函數工作流,搭建了一個定時批量處理圖片進行人臉識別的服務。該服務因為使用了函數工作流的流程,將任務分為了多個步驟,只需要確保每個步驟的函數能夠在函數計算限制時間(10分鐘)內完成即可。

通過 Fun 工具,一鍵部署 函數計算 + 函數工作流,免去去多平台進行操作的步驟。

相關參考

  1. 函數計算
  2. 函數工作流
  3. Aliyun Serverless VSCode 插件
  4. Fun

參考示例

  1. serverless-face-recognition
  2. oss-batch-process

本文轉載自云棲社區。

原文鏈接

https://yq.aliyun.com/articles/740026?spm=a2c4e.11157919.spm-cont-list.47.146cf204lOM9u4