30分钟快速搭建门店智能监控视频分析-阿里云开发者社区

开发者社区> 阿里云Serverless Compute> 正文

30分钟快速搭建门店智能监控视频分析

简介: Severless编程模式很好的满足了业务的快速搭建、快速发展以及快速迭代的要求,对于中小企业以及创业公司,成本也是一个重要的考量。用户开发server端服务,常常面临开发效率,运维成本高,机器资源弹性伸缩等痛点,而使用Serverless架构可以很好的解决上述问题。

前言

欢迎大家来到无服务器(Serverless)编程的阿里云clouder lab实验课参与学习。
现在市场竞争激烈,在对业务创新周期要求越来越短,业务爆发越来越快的情况下,Severless编程模式很好的满足了业务的快速搭建、快速发展以及快速迭代的要求,对于中小企业以及创业公司,成本也是一个重要的考量。用户开发server端服务,常常面临开发效率,运维成本高,机器资源弹性伸缩等痛点,而使用Serverless架构可以很好的解决上述问题。下面是传统架构和Serverless架构的对比:

Item Serverless 传统方式搭建服务
维护成本 维护成本低,无需管理服务器等基础设施,只需编写代码并上传,程序员从底层设备维护中解放出来,只考虑实际业务逻辑即可。 维护成本高,自行维护服务器,需要处理服务器宕机、服务器扩容等一系列底层琐碎的事情
可用性 可用性高,函数计算为用户准备弹性、可靠的计算资源,具有根据流量自动scale特性,对有明显波峰波谷的运用效果奇佳 服务器故障会对应用服务产生严重影响
费用 按需付费,只为实际使用的计算资源付费,代码未运行则不产生费用 需要支付服务器的费用,代码运行与否都要收费

为了让大家深刻体验serverless的优势,本教程通过对几款云产品的实际上手操作,来与大家分享如何通过函数计算粘合其他云产品技术来快速搭建门店智能监控视频分析运用

效果

image

30分钟快速搭建门店智能监控视频分析运用架构图

image

  • 日志中有图片的数据信息,通过触发器推送到函数计算
  • 函数计算解析出日志中的图片数据,将图片上传到oss
  • 函数计算调用IMM服务,获取上一步解析出来的图片的人脸以及分组信息
  • 函数计算将上一步的人脸以及分组信息存储到OTS
  • 用户通过api网关调用函数计算,函数计算从OTS读取信息,并将处理后的信息返回给用户

后续操作及相关资源概览图

image

具体步骤

1. 获取云账号

  • 1.1 每位观众入场都会得到一个云账户
  • 1.2 获得账号ID和Accesskeys

  • 1.3 下载文章最后的package附件

注意: 本教程所有的服务均在华东2(上海)region进行,下面每一步创建的阿里云资源的名字(阿里云AccessKeyId、AccessKeySecret,OTS的instance名字和表格名字,OSS的bucket名字,IMM的project名字和FaceSetId)都需要记录下来,后面代码会用到

2. 开通表格存储并创建对应的project和table

2.1. 登录阿里云官网-表格存储 ,并点击服务开通

t1.png
t2.png

2.2. 创建表格存储实例

  • 2.2.1 登陆表格存储控制台
  • 2.2.2 在控制台上创建实例,在华东2创建实例(比如名字叫szworkshop), 注意:在这里我们已经预先为您创建好了对应的实例是table,请在华东2查找sz-instance开头的实例,点击进去查看有没有face_detailface_cache这两张表,如果没有,请按照下面的截图操作自己创建,最后把自己表格存储的实例名字记录下来。
    image
  • 2.2.3 进入实例,创建两个table,比如名字叫 face_detailface_cache
    主键情况如下:
face_detail:  [ 
('faceSetId', 'STRING'), 
('timestamp', 'INTEGER'),
('faceId', 'STRING')
]
face_cache:  [ 
('faceId', 'STRING')
]

截图如下图所示:
image
image
image

也可以利用package 附件的脚本create_tbl.py,修改代码中的ak, python create_tbl.py 实现创建table face_detailface_cache

3. 开通对象存储oss服务

3.1. 登录阿里云官网-对象存储 ,并点击立即开通

3.2. 进入对象存储-控制台 ,在华东2创建一个公共读的bucket,并把自己bucket名字记录下来, 如下图:

image

4. 开通日志服务

4.1. 进入日志服务,点击立即购买按钮

sls_open.png
sls_create_service.png

4.2. 在华东2创建log project和logstore,在这里我们已经给您创建好了logproject和logstore(fc_log, fc_trigger_log), logstore video1, video2需要用户自己创建

其中video1video2 : 两个摄像头采集的图像数据会分别写到这个两个logstore
fc_log 用于记录后面的函数计算中函数的输出日志
fc_trigger-log 用于记录日志触发器触发情况

比如创建 一个名叫video2 logstore操作如下:
image

最后效果如下:
image

5. 开通智能媒体管理

5.1 进入智能媒体管理,点击立即开通按钮

5.2 进入智能媒体管理控制台,创建一个project szworkshop

注意:我们会给您创建好智能媒体管理的project和FaceSetId,在线查看

image
image

5.3 在project szworkshop下面创建FaceSet

利用package 附件的脚本imm_op.py,修改对应的ak和imm project值 python imm_op.py CFS 就会成功创建一个FaceSet, 记住返回值中的FaceSetId, 如下面的FACE-0b1fe58b-58b5-44a5-9492-ea6d72918b83

 python imm_op.py CFS
{u'Status': u'Running', u'Photos': 0, u'RequestId': u'7BF48069-07D5-4675-8BF6-3EB8EE23F4C5', u'ModifyTime': u'2018-03-20 20:29:43.021911969 +0800 CST', u'SetId': u'FACE-0b1fe58b-58b5-44a5-9492-ea6d72918b83', u'CreateTime': u'2018-03-20 20:29:43.021911969 +0800 CST'}

6. 开通API网关

6.1 进入API网关产品页,点击立即开通

7. 开通函数计算

7.1. 新建函数计算service服务

  • 7.1.1 进入函数服务管理控制台
  • 7.1.2 创建service, 选择华东2,步骤如下图中的1,2,3,4; 比如创建名叫ls-workshop的service(名字自定义)
    image

在上图中点开高级配置,配置日志项目和日志仓库(这个之前已经创建好了,也可以现在创建),其中第3步的同意授权(授权函数具有访问OTS,OSS,LOG,IMM 的权利)会跳转到如下页面:
image
点击同意授权:
image
点击确定:
image

7.2. 在上一步创建的service服务下创建函数

  • 7.2.1 创建函数log_etl, 具体操作如下面截图所示:

    image

选择空白模板,runtime为python3
image
image
点击本地上传,上传附件中的log_etl.zip,上传成功后,修改函数入口为log_etl.handler,然后点击下一步
image
image
创建成功后如图所示:
image
进入代码编辑界面,修改对应的配置,然后点击保存按钮:
image

  • 7.2.2 给函数log_etl创建LOG trigger, 点击触发器按钮进行编辑,其中时间间隔设置为10s,我们这里创建两个触发器,分别为trigger-1trigger-2, 具体如下图所示:

    image

image
image
image

在这里一个函数可以对应两个触发器
image
创建完两个触发器后:
image

日志触发器具体详情
触发器名称:触发器的名称只能包含字母,数字、下划线和中划线,不能以数字、中划线开头,且长度范围为1~256字节。
Project名称:日志服务Project名称。
Logstore名称:日志服务Logstore名称(数据源)。本触发器会定时从该Logstore订阅数据到函数服务进行自定义加工,该参数在ETL Job创建后不允许修改。
触发器日志:日志服务会定时触发函数服务的的函数执行,在触发过程中发生的异常、函数执行统计信息会记录到该 Logstore, 您可以为这个Logstore创建索引以备查看。
触发间隔:日志服务触发函数运行的间隔,定义日志服务触发函数执行的间隔,例如每60秒将logstore的每个shard最近60秒数据位置读出作为函数event调用函数执行,在函数内有用户逻辑读取shard数据做计算。如果logstore的shard流量较大(超过1MB/s或者更高),建议缩短函数的触发间隔,使得每次函数运行所处理的数据量是合理大小。
重试次数:日志服务根据触发间隔每次触发函数执行时,如果遇到错误(例如权限不足、网络失败、函数执行异常返回等),该参数定义本次触发所允许的最大重试次数。对于本次触发,如果超过最大重试次数仍无法成功的,需要等到下一次触发间隔到来时,由日志服务再次触发函数执行。重试对业务造成的影响,因具体的函数代码实现逻辑而异。
函数配置:日志服务将该配置内容作为函数event一部分传入函数,如何使用该函数由函数自定义逻辑决定。每一种函数实现所要求的函数配置可能是不同的,绝大部分默认提供的函数模板也需要参考说明填写您的参数。默认不传入任何参数时请填写:{}。

  • 7.2.3 设置函数的event和调试

    函数log_etl是日志触发调用的,日志传递给函数的event的格式具体详情, 一个例子如下(把下面的projectName改成自己的):

{
  "parameter": {
  },
  "source": {
      "endpoint": "http://cn-shanghai-intranet.log.aliyuncs.com",
      "projectName": "1907026218698990",
      "logstoreName": "video1",
      "shardId": 1,
      "beginCursor": "MTUyMTQ0NDc0OTI3NTM3MTE5NA==",
      "endCursor": "MTUyMTQ0NDc0OTI3NTM3MTE5NA=="
  },
  "jobName": "ec0ebbf8f549e8a7e77888797d69084003830c63",
  "taskId": "06bf8cc1-3d0c-4625-9205-2c191e32ee72",
  "cursorTime": 1521643153
}

image
image
image

  • 7.2.4 创建函数get_show_info, 具体操作如6.2.1所示

    上传代码get_show_info.zip,创建函数get_show_info,函数入口为get_show_info.handler, 截图如下:

image

创建成功后,也需要修改下代码中对应的配置的值:
image

7.3 给函数get_show_info配置api网关

按照下面的截图操作进行,如果想了解更多api网关结合函数计算具体详情可以参考以函数计算作为 API 网关后端服务

  • 7.3.1 创建api分组

    image

  • 7.3.2 在api分组内创建api

    image

image
image
填写api网关的请求path,后面对二级域名/请求路径的http请求就是对函数的访问
image
填写api对应的函数信息
image
填写api网关的返回值示例

{
    "isBase64Encoded":true|false,
    "statusCode":httpStatusCode,
    "headers":{response headers},
    "body":"..."
}

image

  • 7.3.3 对api进行调试和发布

  • 7.3.3.1 对api进行调试

    image

image

  • 7.3.3.2 对api进行发布

    image

image
验证发布是否成功可以用如下命令(修改成自己的二级域名/请求路径):

curl -v "http://972ea82cf5334ee8adc7e318efa45455-cn-shanghai.alicloudapi.com/get_show_info"

7.3.4 将6.3.3获得的api网关的url

本教程中是http://972ea82cf5334ee8adc7e318efa45455-cn-shanghai.alicloudapi.com/get_show_info)替换掉前端展示页面中的url(package 附件下client/js 目录里面的index.js), 之后打开本地页面,就可以愉快地看监控详情了。

image

总结

利用函数计算可以快速搭建serverless运用,结合oss,ots,imm和api网关可以丰富server的功能,免服务器,免运维,成本低,不用担心流量,只需要函数就可以实现,你值的拥有!

下来

附件下载:https://developer.aliyun.com/topic/download?id=584

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
阿里云Serverless Compute
使用钉钉扫一扫加入圈子
+ 订阅

Serverless微服务应用实践分享

官方博客
函数计算官网