快速搭建 Serverless 人脸识别离线服务

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 本文将重点介绍如何快速地通过函数计算与函数工作流部署一个定时离线批量处理图片文件并标注出人脸的服务。

简介

首先介绍下在本文出现的几个比较重要的概念:

函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息参考

函数工作流(Function Flow):函数工作流是一个用来协调多个分布式任务执行的全托管云服务。用户可以用顺序,分支,并行等方式来编排分布式任务,FnF 会按照设定好的步骤可靠地协调任务执行,跟踪每个任务的状态转换,并在必要时执行用户定义的重试逻辑,以确保工作流顺利完成。函数工作流更多信息参考

本文将重点介绍如何快速地通过函数计算与函数工作流部署一个定时离线批量处理图片文件并标注出人脸的服务。

开通服务

  1. 免费开通函数计算,按量付费,函数计算有很大的免费额度。
  2. 免费开通函数工作流,按量付费,目前该产品在公测阶段,可以免费使用。
  3. 免费开通对象存储,按量付费。

解决方案

1.png

流程如下:

  1. 设定定时触发器,定时触发函数计算中的函数。
  2. 函数被触发后,调用一次函数工作流中的流程。
  3. 函数工作流中的流程被执行:

    1. 调用函数计算中的函数,列举出 OSS Bucket 根路径下的图片文件列表。
    2. 对于步骤1中列出的文件列表,对每个文件:

      • 调用函数计算中的函数处理,进行人脸识别并标注。将标注后的文件存入 OSS,最后将处理过的文件进行转移。
    3. 判断当前 OSS 根路径下是否有更多的文件

      • 如是,继续步骤1
      • 如否,结束流程

快速开始

  1. Clone 工程到本地

    • git clone git@github.com: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
  1. 一键部署函数计算和函数工作流资源至云端

    • 安装最新版本的 Fun
    • 在项目根目录下执行 fun deploy

效果验证

  1. 在 OSS Bucket 的根目录下放置图片

2.png

  1. 等待一分钟后,定时触发器触发函数执行函数工作流。

3.png

  1. 工作流执行完成后,查看 OSS Bucket

    • 标注出人脸的图像放置在 face-detection 目录下

4.png

  • 处理过的录像放置在 processed 目录下

5.gif

总结

通过 函数计算 + 函数工作流,搭建了一个定时批量处理图片进行人脸识别的服务。该服务因为使用了函数工作流的流程,将任务分为了多个步骤,只需要确保每个步骤的函数能够在函数计算限制时间(10分钟)内完成即可。
通过 Fun 工具,一键部署 函数计算 + 函数工作流,免去去多平台进行操作的步骤。

相关参考

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

参考示例

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

阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
29天前
|
监控 Serverless 测试技术
Serverless 应用引擎常见问题之做的web服务计费如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
399 3
|
30天前
|
运维 Serverless 调度
Serverless 应用引擎常见问题之资源使用完影响服务使用如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
22 0
|
28天前
|
监控 Serverless
函数计算(FC)作为一种无服务器的计算服务,在使用过程中可能会遇到各种问题
函数计算(FC)作为一种无服务器的计算服务,在使用过程中可能会遇到各种问题
21 4
|
3月前
|
JSON 安全 Serverless
在使用阿里云函数计算(FC)服务时,您可以通过自定义域名来访问部署好的云函数
在使用阿里云函数计算(FC)服务时,您可以通过自定义域名来访问部署好的云函数【1月更文挑战第23天】【1月更文挑战第112篇】
222 7
|
4月前
|
数据采集 Serverless API
在函数计算FC上成功部署SD服务并能通过API进行有效调用
在函数计算FC上成功部署SD服务并能通过API进行有效调用
293 3
|
24天前
|
人工智能 监控 Serverless
如何基于ACK Serverless快速部署AI推理服务
通过上述步骤,可以在ACK Serverless上快速部署AI推理服务,实现高可用、弹性扩展的服务架构。
19 1
|
30天前
|
关系型数据库 MySQL Serverless
Serverless 应用引擎常见问题之新发布的服务 arms 没了如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
24 3
|
1月前
|
运维 监控 Serverless
一键开启 GPU 闲置模式,基于函数计算低成本部署 Google Gemma 模型服务
本文介绍如何使用函数计算 GPU 实例闲置模式低成本、快速的部署 Google Gemma 模型服务。
164772 57
|
1月前
|
关系型数据库 Serverless 测试技术
函数计算常见问题之停止服务如何解决
函数计算(Function Compute, FC)是阿里云提供的无服务器计算服务,它允许用户在无需管理服务器的情况下运行代码,但在配置和执行过程中可能遇到报错,本合集致力于梳理FC服务中的常见报错和配置问题,并提供解决方案,帮助用户优化函数执行环境。
114 0
|
3月前
|
关系型数据库 Serverless 分布式数据库
碧桂园服务使用阿里云PolarDB Serverless云数据库实现降本增效。
碧桂园集团,即碧桂园控股有限公司新型城镇化住宅开发商,采用集中及标准化的运营模式,业务包含物业发展、建安、装修、物业管理、物业投资、酒店开发和管理、以及现代农业、机器人。

相关产品

  • 函数计算