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

2020 年 1 月 19 日

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

简介


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


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

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


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


开通服务


  1. 免费开通函数计算,按量付费,函数计算有很大的免费额度。

  2. 免费开通函数工作流,按量付费,目前该产品在公测阶段,可以免费使用。

  3. 免费开通对象存储,按量付费。


解决方案



流程如下:


  1. 设定定时触发器,定时触发函数计算中的函数。

  2. 函数被触发后,调用一次函数工作流中的流程。

  3. 函数工作流中的流程被执行:

  4. i. 调用函数计算中的函数,列举出 OSS Bucket 根路径下的图片文件列表。

  5. ii. 对于步骤1中列出的文件列表,对每个文件:

  6. 调用函数计算中的函数处理,进行人脸识别并标注。将标注后的文件存入 OSS,最后将处理过的文件进行转移。

  7. iii. 判断当前 OSS 根路径下是否有更多的文件

  8. 如是,继续步骤1

  9. 如否,结束流程


快速开始


  1. Clone 工程到本地

  2. git clone git@github.com:ChanDaoH/serverless-face-recognition.git

  3. 替换项目目录下 template.yml 文件中的 YOUR_BUCKET_NAME 为在杭州区域的 OSS Bucket (可以不是杭州区域的,需要同步修改 OSS_ENDPOINT)

  4. 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
    
  5. 一键部署函数计算和函数工作流资源至云端

  6. 安装最新版本的 Fun

  7. 在项目根目录下执行 fun deploy


效果验证


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


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


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

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


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



总结


通过 函数计算 + 函数工作流,搭建了一个定时批量处理图片进行人脸识别的服务。该服务因为使用了函数工作流的流程,将任务分为了多个步骤,只需要确保每个步骤的函数能够在函数计算限制时间(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


2020 年 1 月 19 日 10:152357

评论

发布
暂无评论
发现更多内容

如何优雅的编写GO程序?

八两

go 优雅 语法

区块链跨境承兑商支付系统开发,usdt支付平台搭建

WX13823153201

区块链 数字货币

什么是死信队列

Java旅途

RabbitMQ

Web前端性能优化,应该怎么做?

华为云开发者社区

运维 前端 HTTP js 前端性能优化

第十周.总结

刘璐

架构师培训第10周练习

小蚂蚁

22种超全用户触点采集,易观方舟SDK又更新了

易观大数据

troubleshoot之:使用JFR解决内存泄露

程序那些事

Java 内存泄露 性能调优

5G从小就梦想着自己要迎娶:高速率、低时延、大容量三个老婆

华为云开发者社区

5G IoT 通信 华为云 NB-IoT

第十周.命题作业

刘璐

如何有效防止sql注入

Java旅途

Newbe.Claptrap 框架如何实现 Claptrap 的多样性?

newbe36524

容器 微服务 .net core ASP.NET Core

一文熟悉MySQL索引

书旅

MySQL 索引

架构师训练营第十周作业

邵帅

微软BI解决方案的优势

JackWangGeek

两数之和

书旅

数据结构 算法 数据结构与算法

吴桐:数字货币具有稳定的避险性吗

CECBC区块链专委会

区块链 数字货币 链政经济

看DLI服务4核心如何提升云服务自动化运维

华为云开发者社区

Serverless 运维 运维自动化 华为云 DLI

[翻译]分布式系统的模式-综述

流沙

架构 分布式系统

一文读懂GaussDB(for Mongo)的计算存储分离架构

华为云开发者社区

数据库 mongodb 数据 GaussDB 存储分离

架构师训练营第十周总结

邵帅

作业二

Kiroro

常见的BI项目问题和解决方案

JackWangGeek

可读代码编写炸鸡十 - 保持单纯

多选参数

代码质量 代码 代码优化 可读代码编写 可读代码

环信助力OFashion迷橙开辟海外直播带货新通路

DT极客

推荐Scrum书籍

Bob Jiang

Scrum 敏捷

架构师0期Week10作业2

Nan Jiang

window form自定义控件类型

JackWangGeek

架构师0期Week10作业1

Nan Jiang

作业一

Kiroro

有意思:Go函数的闭包

申屠鹏会

go 闭包 函数

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