快速搭建 Serverless 人脸识别离线服务
========================
简介
--
首先介绍下在本文出现的几个比较重要的概念:
> 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息[参考](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstatistics.functioncompute.com%2F%3Ftitle%3D%25E5%25BF%25AB%25E9%2580%259F%25E6%2590%25AD%25E5%25BB%25BAServerless%25E4%25BA%25BA%25E8%2584%25B8%25E8%25AF%2586%25E5%2588%25AB%25E7%25A6%25BB%25E7%25BA%25BF%25E6%259C%258D%25E5%258A%25A1%26amp%3Bsrc%3Darticle%26amp%3Bauthor%3Dzechen%26amp%3Burl%3Dhttps%3A%2F%2Ffc.console.aliyun.com%2F)
> 函数工作流(Function Flow):函数工作流是一个用来协调多个分布式任务执行的全托管云服务。用户可以用顺序,分支,并行等方式来编排分布式任务,FnF 会按照设定好的步骤可靠地协调任务执行,跟踪每个任务的状态转换,并在必要时执行用户定义的重试逻辑,以确保工作流顺利完成。函数工作流更多信息[参考](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstatistics.functioncompute.com%2F%3Ftitle%3D%25E5%25BF%25AB%25E9%2580%259F%25E6%2590%25AD%25E5%25BB%25BAServerless%25E4%25BA%25BA%25E8%2584%25B8%25E8%25AF%2586%25E5%2588%25AB%25E7%25A6%25BB%25E7%25BA%25BF%25E6%259C%258D%25E5%258A%25A1%26amp%3Bsrc%3Darticle%26amp%3Bauthor%3Dzechen%26amp%3Burl%3Dhttps%3A%2F%2Ffnf.console.aliyun.com%2F)
本文将重点介绍如何快速地通过函数计算与函数工作流部署一个定时离线批量处理图片文件并标注出人脸的服务。
**开通服务**
1. [免费开通函数计算](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstatistics.functioncompute.com%2F%3Ftitle%3D%25E5%25BF%25AB%25E9%2580%259F%25E6%2590%25AD%25E5%25BB%25BAServerless%25E4%25BA%25BA%25E8%2584%25B8%25E8%25AF%2586%25E5%2588%25AB%25E7%25A6%25BB%25E7%25BA%25BF%25E6%259C%258D%25E5%258A%25A1%26amp%3Bsrc%3Darticle%26amp%3Bauthor%3Dzechen%26amp%3Burl%3Dhttps%3A%2F%2Ffc.console.aliyun.com%2F),按量付费,函数计算有很大的免费额度。
2. [免费开通函数工作流](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstatistics.functioncompute.com%2F%3Ftitle%3D%25E5%25BF%25AB%25E9%2580%259F%25E6%2590%25AD%25E5%25BB%25BAServerless%25E4%25BA%25BA%25E8%2584%25B8%25E8%25AF%2586%25E5%2588%25AB%25E7%25A6%25BB%25E7%25BA%25BF%25E6%259C%258D%25E5%258A%25A1%26amp%3Bsrc%3Darticle%26amp%3Bauthor%3Dzechen%26amp%3Burl%3Dhttps%3A%2F%2Ffnf.console.aliyun.com%2F),按量付费,目前该产品在公测阶段,可以免费使用。
3. [免费开通对象存储](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstatistics.functioncompute.com%2F%3Ftitle%3D%25E5%25BF%25AB%25E9%2580%259F%25E6%2590%25AD%25E5%25BB%25BAServerless%25E4%25BA%25BA%25E8%2584%25B8%25E8%25AF%2586%25E5%2588%25AB%25E7%25A6%25BB%25E7%25BA%25BF%25E6%259C%258D%25E5%258A%25A1%26amp%3Bsrc%3Darticle%26amp%3Bauthor%3Dzechen%26amp%3Burl%3Dhttps%3A%2F%2Foss.console.aliyun.com%2F),按量付费。
**解决方案**
[![](https://img.alicdn.com/tfs/TB1upSqrkT2gK0jSZFkXXcIQFXa-827-477.png)](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstatistics.functioncompute.com%2F%3Ftitle%3D%25E5%25BF%25AB%25E9%2580%259F%25E6%2590%25AD%25E5%25BB%25BAServerless%25E4%25BA%25BA%25E8%2584%25B8%25E8%25AF%2586%25E5%2588%25AB%25E7%25A6%25BB%25E7%25BA%25BF%25E6%259C%258D%25E5%258A%25A1%26amp%3Bsrc%3Darticle%26amp%3Bauthor%3Dzechen%26amp%3Burl%3Dhttps%3A%2F%2Ffc.console.aliyun.com%2F)
流程如下:
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
```
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw== "点击并拖拽以移动")
3. 一键部署函数计算和函数工作流资源至云端
* 安装最新版本的 [Fun](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2Falibaba%2Ffuncraft)
* 在项目根目录下执行 `fun deploy`
效果验证
----
1. 在 OSS Bucket 的根目录下放置图片
[![](https://img.alicdn.com/tfs/TB1S4GsrbY1gK0jSZTEXXXDQVXa-2332-714.png)](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstatistics.functioncompute.com%2F%3Ftitle%3D%25E5%25BF%25AB%25E9%2580%259F%25E6%2590%25AD%25E5%25BB%25BAServerless%25E4%25BA%25BA%25E8%2584%25B8%25E8%25AF%2586%25E5%2588%25AB%25E7%25A6%25BB%25E7%25BA%25BF%25E6%259C%258D%25E5%258A%25A1%26amp%3Bsrc%3Darticle%26amp%3Bauthor%3Dzechen%26amp%3Burl%3Dhttps%3A%2F%2Ffc.console.aliyun.com%2F)
1. 等待一分钟后,定时触发器触发函数执行函数工作流。
[![](https://img.alicdn.com/tfs/TB1gJesrhv1gK0jSZFFXXb0sXXa-2344-1216.png)](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstatistics.functioncompute.com%2F%3Ftitle%3D%25E5%25BF%25AB%25E9%2580%259F%25E6%2590%25AD%25E5%25BB%25BAServerless%25E4%25BA%25BA%25E8%2584%25B8%25E8%25AF%2586%25E5%2588%25AB%25E7%25A6%25BB%25E7%25BA%25BF%25E6%259C%258D%25E5%258A%25A1%26amp%3Bsrc%3Darticle%26amp%3Bauthor%3Dzechen%26amp%3Burl%3Dhttps%3A%2F%2Ffc.console.aliyun.com%2F)
1. 工作流执行完成后,查看 OSS Bucket
* 标注出人脸的图像放置在 `face-detection` 目录下
[![](https://img.alicdn.com/tfs/TB1yLDUqubviK0jSZFNXXaApXXa-2768-1580.png)](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstatistics.functioncompute.com%2F%3Ftitle%3D%25E5%25BF%25AB%25E9%2580%259F%25E6%2590%25AD%25E5%25BB%25BAServerless%25E4%25BA%25BA%25E8%2584%25B8%25E8%25AF%2586%25E5%2588%25AB%25E7%25A6%25BB%25E7%25BA%25BF%25E6%259C%258D%25E5%258A%25A1%26amp%3Bsrc%3Darticle%26amp%3Bauthor%3Dzechen%26amp%3Burl%3Dhttps%3A%2F%2Ffc.console.aliyun.com%2F)
* 处理过的录像放置在 `processed` 目录下
[![](https://img.alicdn.com/tfs/TB1BPSprkL0gK0jSZFtXXXQCXXa-1378-818.gif)](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstatistics.functioncompute.com%2F%3Ftitle%3D%25E5%25BF%25AB%25E9%2580%259F%25E6%2590%25AD%25E5%25BB%25BAServerless%25E4%25BA%25BA%25E8%2584%25B8%25E8%25AF%2586%25E5%2588%25AB%25E7%25A6%25BB%25E7%25BA%25BF%25E6%259C%258D%25E5%258A%25A1%26amp%3Bsrc%3Darticle%26amp%3Bauthor%3Dzechen%26amp%3Burl%3Dhttps%3A%2F%2Ffc.console.aliyun.com%2F)
总结
--
通过 [函数计算](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstatistics.functioncompute.com%2F%3Ftitle%3D%25E5%25BF%25AB%25E9%2580%259F%25E6%2590%25AD%25E5%25BB%25BAServerless%25E4%25BA%25BA%25E8%2584%25B8%25E8%25AF%2586%25E5%2588%25AB%25E7%25A6%25BB%25E7%25BA%25BF%25E6%259C%258D%25E5%258A%25A1%26amp%3Bsrc%3Darticle%26amp%3Bauthor%3Dzechen%26amp%3Burl%3Dhttps%3A%2F%2Ffc.console.aliyun.com%2F) + [函数工作流](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fstatistics.functioncompute.com%2F%3Ftitle%3D%25E5%25BF%25AB%25E9%2580%259F%25E6%2590%25AD%25E5%25BB%25BAServerless%25E4%25BA%25BA%25E8%2584%25B8%25E8%25AF%2586%25E5%2588%25AB%25E7%25A6%25BB%25E7%25BA%25BF%25E6%259C%258D%25E5%258A%25A1%26amp%3Bsrc%3Darticle%26amp%3Bauthor%3Dzechen%26amp%3Burl%3Dhttps%3A%2F%2Ffnf.console.aliyun.com%2F),搭建了一个定时批量处理图片进行人脸识别的服务。该服务因为使用了函数工作流的流程,将任务分为了多个步骤,只需要确保每个步骤的函数能够在函数计算限制时间(10分钟)内完成即可。
[原文链接](https://link.zhihu.com/?target=https%3A//yq.aliyun.com/articles/739645%3Futm_content%3Dg_1000094672)
本文为阿里云内容,未经允许不得转载。
分享到:
相关推荐
【人脸识别一键生成圣诞帽v3.0】是一个创新的应用,它允许用户上传个人照片并通过人脸识别技术自动为其添加圣诞帽,以此增添节日氛围。这个项目基于Node.js开发,使用了人脸识别技术,结合图像处理,实现了一个简易...
标题中的“使用API网关快速开放Serverless服务”是指通过API网关来便捷地对外提供Serverless服务。Serverless架构是一种云计算模型,其中开发者只需关注应用程序的业务逻辑,而基础设施的管理和运维工作由云服务商...
【云上搭建Serverless AI实验室】技术方案详细解析 在当今的云计算环境中,Serverless架构逐渐成为构建AI实验室的新选择。Serverless AI实验室的核心优势在于它能够极大地简化基础设施的管理和运维工作,使得科研...
藏经阁-使用API网关 快速开放Serverless服务.pdf
5. **事件驱动架构**:在AWS Serverless环境中,项目可能使用AWS CloudWatch Events或Amazon SNS(简单通知服务)来触发Lambda函数,比如当新的推文到达或需要更新人脸识别模型时。 6. **数据分析与可视化**:项目...
3. 灵活性和可扩展性:Serverless架构可自动扩展,能够快速响应流量的波动。 4. 响应速度快:由于代码是在事件发生时即时执行,因此响应时间快。 5. 按需付费:用户只按实际消耗的资源付费,这有助于提高财务透明度...
无服务器脱机 模拟AWS IoT服务的无服务器插件。 通过有限SQL语法支持来管理主题订阅,生命周期事件,事物影子管理和规则引擎。先决条件已安装。 无服务器框架1.x安装将serverless-iot-offline添加到您的项目中: npm...
无服务器是软件架构世界中的热门新话题,它充分利用大量的云平台服务,让开发者只需关注核心业务逻辑的实现。同时,它按需分配和使用资源的运行方式,在降低基础设施成本的同时还能获得强大的弹性。 《Serverless...
Serverless,顾名思义,并非指服务器不存在,而是指开发者无需关心服务器的管理和运维,只需关注业务代码本身,由云服务商负责运行环境的搭建和资源调度。这种模式在云计算领域引发了一场革命,因为它极大地简化了...
AWS Lambda是亚马逊Web服务(AWS)提供的一个核心Serverless计算服务,它允许开发者运行代码而无需预先配置或管理服务器。本篇文章将深入探讨Serverless架构的概念、优势、工作原理以及AWS Lambda的具体应用。 一、...
5. **厂商锁定**:使用特定云服务商的Serverless服务可能导致技术锁定,迁移成本较高。 为了解决这些问题,行业正在制定一系列Serverless相关的标准,以促进技术的规范化和互操作性,推动Serverless架构的健康发展...
Serverless 架构具有降低开发成本、提高运维效率、快速响应业务需求等优势,越来越受到企业和开发者的青睐。 Serverless 架构的兴起和趋势:随着云计算技术的不断发展,Serverless 架构逐渐成为了云计算领域的一...
在本文中,我们将深入探讨如何利用"The Serverless Framework"快速部署Serverless应用,以及这种模式带来的优势。 "The Serverless Framework"是一个开源工具,专门用于构建和部署Serverless应用。它支持多种云服务...
无服务架构(Serverless)是一种新兴的云计算范式,它允许开发者编写并运行代码,而无需关心服务器的管理。这种架构模式的出现是云计算发展到高级阶段的产物,它通过自动化基础设施管理,为开发者提供了一种更加高效...
Serverless是一种云计算模型,它将传统的服务器管理负担转移给了服务提供商,从而让开发者可以更加专注于应用程序的业务逻辑,而无需关心底层服务器的运维工作。在"Serverless前端技术应用实践"中,主要探讨了...
在"Serverless技术开发实战.pdf"中,我们深入探讨了如何利用Serverless进行快速开发,特别是构建一个基于分布式Puppeteer的网页截图服务。 首先,我们需要了解什么是函数计算(Function Compute)。函数计算是...
在“Serverless技术开发实战”中,我们将深入探讨如何利用这种技术进行快速开发,并以分布式Puppeteer网页截图服务为例,展示Serverless的优势。 首先,我们需要理解函数计算(Function Compute),这是实现...
- **网站和移动后端**:快速搭建全栈Web应用程序或移动应用后端服务。 5. **无服务器架构的设计原则与最佳实践** - **模块化设计**:确保每个服务都专注于单一功能,并通过API与其他服务通信。 - **事件驱动**:...
Serverless并不意味着真的没有服务器,而是指开发者无需关心服务器的管理和运维,只需关注业务逻辑代码,剩下的由云服务商负责执行和扩展。这种模式大大简化了开发流程,减少了资源浪费,提高了效率。 **无服务器...