亚马逊AWS官方博客
基于Amazon Kinesis Video Streams 与 Amazon Rekognition Streaming Video Events实时视频检测方案
1. 前言
1.1 视频识别场景介绍
在居家安防监控领域,基于实时视频的移动检测,发现监控环境中人、宠物、包裹等的出现,并且能实时地将检测结果通知给身处任何地方的用户是其重要的应用场景之一。但在这一场景的技术实现中面临如下的挑战:一是基于摄像头的视频检测通知,存在大量由于风、雨、移动的车等并非用户关注的事件误报,严重影响用户的使用体验。二是实现这一方案涉及的技术领域与复杂度很高,如设备端事件检测和触发、视频编解码处理、视频存储、机器视觉等,需要团队具备较强的技术和专业能力。本文介绍介绍的由Amazon最新推出的Amazon Rekognition Streaming Video Events很好地解决了这些挑战,接下来我们将详细介绍这一方案的实现原理与集成应用,并分析这一方案与其他实现方案的差异,基于这些分析给出技术方案选型的建议以供参考。
1.2 Amazon Kinesis Video Streams 介绍
Amazon Kinesis Video Streams(KVS) 是一项完全托管的Amazon 服务,您可以使用 Kinesis Video Streams 捕获来自数百万种源 (包括智能手机、安全摄像头、网络摄像头、车载摄像头、无人机及其他源) 的海量实时视频数据传输到 Amazon云,或者构建应用程序以进行实时视频处理或进行面向批处理的视频。Amazon KVS的优势包括:
- 可以为海量设备提供实时视频传输服务。
- 通过与Amazon Rekognition等托管服务集成可以非常方便的构建智能视觉应用。
- 使用KVS HTTP 实时流 (HLS) 可以轻松地将KVS中的实时和录制媒体流式传输到您的浏览器或移动应用程序。
- KVS让您能够使用IAM控制对流的访问,并且提供对静态与动态数据的安全保护。完全托管无需管理基础设施。
- KVS使用S3作为底层数据存储,借助 KVS能够根据设备和服务生成的时间戳,快速搜索和检索视频片段。
Amazon KVS可以分为Producer、Stream、Consumer三个组成部分,分别提供了Producer SDK、KVS Stream API和Consumer SDK方便开发者与KVS做功能集成。
1.3 Amazon Rekognition介绍
Amazon Rekognition提供预先训练和可定制的计算机视觉 (CV) 功能,可从您的图像和视频中提取信息和获得洞察力。提供高精度的人脸分析检测、人脸比较和人脸搜索、标签文本检测等功能。Amazon Rekognition 基于同样由Amazon计算机视觉科学家开发的成熟且高度可扩展的深度学习技术,每天能够分析数十亿图像和视频。它不需要机器学习专业知识即可使用。Amazon Rekognition 包含一个简单易用的API,该API 可快速分析存储在Amazon S3 中的任何图像或视频文件。
2. Amazon Rekognition Streaming Video Events方案分析
Amazon Rekognition Streaming Video Events是新推出的一项功能,它基于设备检测到监控环境的特定事件,将设备的视频流推送到云上KVS,借助Amazon Rekognition Video按照您期望检测的标签来分析视频中的数据,并将检测结果保存到S3、发送检测结果到SNS。目前提供了对实时视频的人形、包裹、宠物标签检测的功能。
2.1 架构说明
Rekognition Streaming Video Events方案整体架构分为:设备端、AWS云端、用户应用端。
- 设备端
通常为带有自动视频检测能力的摄像头设备、通过集成KVS SDK作为KVS的Producer向云端的KVS Stream推送视频流,并按需触发Amazon云端有Rekognition提供的视频检测的API。
- AWS云端
KVS Stream:提供设备视频持久化存储、视频检索、视频在线查看、视频下载等能力,并向Rekognition提供用于视频检测的数据。
Rekognition:提供自动执行视频和图像分析的能力,包括基于视频或图像的内容审核、人脸检测、人脸比较、标签检测等完全托管的能力,并且可以方便的与KVS、S3、SNS等服务集成。
Amazon S3:提供视频检测结果的存储。
Amazon SNS:完全托管的发布/订阅消息收发、SMS、电子邮件和移动推送通知在本方案中提供通知发送的能力。
该方案的整体架构图如下
2.2 执行流程说明
如下图所示Rekognition Streaming Video Events的执行流程分为预置阶段和事件处理阶段。
- 预置阶段
step1:创建S3存储桶和SNS topic,分别用于视频检测结果的存储和扇出。
step2:设备注册创建时,创建与之对应的KVS Stream、rekognition stream processor并将stream processor与step1中S存储桶和SNS topic绑定。
- 事件处理阶段
step1:IPC设备检测到事件。
step2:IPC设备调用KVS Producer SDK的PutMedia API将视频流式传输到KVS stream,同时调用API 触发rekognition stream processor对视频数据进行分析。
step3:Rekognition stream processor根据启动参数包括处理视频的启动与停止条件、处理视频的时间等信息对视频进行分析。
step4:Rekognition stream processor将视频分析结果自动保存到S3并触发SNS topic。
step5:用户通过应用程序检索视频信息或者接收通知继续完成其他的业务流程。
3. 方案集成验证
目前Rekognition Streaming Video Events这个功能支持的AWS的区域是:US East (Ohio), US East (N. Virginia), US West (Oregon), Asia Pacific (Mumbai), and Europe (Ireland)后续会陆续在其他的Region提供该功能,本次实验我们选择在Ireland。
3.1 实验准备工作
- 本次实验需要用到的AWS资源都在Ireland中创建,您需要提前准备好一个AWS account。
- 在AWS IAM中创建一个Admin User,赋予arn:aws:iam::aws:policy/AdministratorAccess策略、后续的资源创建都使用这个用户来进行。
3.2 模拟KVS Producer将视频推到KVS Stream
本小节中的实验步骤完全参照Amazon Kinesis Video Streams Workshop,下面仅对实验步骤进行简要说明,详细的执行过程请参照。https://catalog.us-east-1.prod.workshops.aws/workshops/b95b9381-baf0-4bef-ba31-63817d54c2a6/en-US/ 中的Collecting and storing videos using Amazon Kinesis Video Streams中的AWS Cloud9实验环节。
3.2.1 创建AWS Cloud9作为KVS的Producer
- Cloud9的创建方法请参考如下的链接
3.2.1 在创建的cloud9启动KVS Producer应用程序
- 执行如下命令下载KVS Producer SDK
- 执行如下的命令编译KVS Producer SDK
3.2.2 创建KVS视频流
- 创建KVS Stream
KVS Stream的创建方式参考:https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/gs-createstream.html
记录下KVS Stream的ARN在后面的实验环节中将要用到。
- 设置环境Cloud9的环境变量,为后面执行上传视频到KVS Stream做准备
在Cloud9 terminal 执行如下命令获取IAM的临时Token
在Cloud9 terminal 执行如下命令设置环境变量
3.2.3 上传本地视频到KVS Stream
- 设置KVS应用程序执行的环境变量
在Cloud9 terminal 执行如下命令设置环境变量
- 在Cloud9 terminal 执行如下命令启动KVS应用程序
- 在AWS console上打开KVS stream点击Media playback查看视频是否上传成功
如下图所示,视频成功显示,说明存储在Cloud9上的视频已经成功上传到了KVS stream。
3.3 准备Rekognition Streaming Video Events 需要的资源
3.3.1 创建S3 Bucket
创建S3 Bucket,Bucket Name命名为:video-event-analytics,在bucket创建文件夹video-result,创建S3 bucket时的其他参数都保证默认配置,创建成功后s3 bucket的信息如下。
如下图所示:记录下S3 bucket ARN 后续实验环节需要用到
3.3.2 创建SNS并配置邮件订阅
- 创建Topic,选型类型为:Standard类型,Topic名称命名为:video-event-sns。
- 记录该Topic的ARN,后续实验环节需要使用
- 创建SNS Topic的订阅
其中Topic ARN选择上面创建的SNS的ARN,Protocol选择为Email,在实际应用中您可以根据需要采用的订阅方式选型相应的协议类型。
3.3.3 创建Rekognition Service Role
创建Rekognition Service Role,该角色用于赋予Rekognition Processor操作其他服务的权限。本次实验需要给Rekognition Processor赋予操作S3和SNS的权限。
- 如下图所示,创建IAM策略授予访问KVS、SNS、S3的必要权限
- 如下图所示创建Rekognition Service Role并关联上一步创建的策略
选择Trusted Entity Type为AWS Service ,选择支持的AWS 服务的场景为 Rekognition
- 将上一步创建的IAM 策略关联到Rekognition Service Role
3.4 启动Rekognition Streaming Video Events处理流程
3.4.1 升级Cloud9的AWS Cli到最新版本
因为Rekognition Streaming Video Events是2022年4月底才发布的新功能,要采用aws cli创建rekognition-stream-processor使用该功能,需要将您的cli升级到包含rekognition这个新特性的版本,这里我们将cli升级到最新版本。
- 执行如下命名升级AWS Cli到最新版本
如果您的AWS Cli已经是最新版本,则可以跳过这个步骤。
3.4.2 创建rekognition-stream-processor
- 准备好创建rekognition-stream-processor的json文件
创建rekognition-stream-processor参数的json文件如下图所示,其中KinesisVideoStream-Arn、S3Destination-Bucket、S3Destination-KeyPrefix、RoleArn需要修改为您自己的实验环境中创建的资源。
ConnectedHome是rekognition-stream-processor新功能提供的新参数,其中ConnectedHome的Labels目前支持包括”PERSON”, “PET”, “PACKAGE”, and “ALL。可以跟您希望检测的标签来填写。详细介绍可以参考:
https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateStreamProcessor.html
- Stream-Processor Request主要参数说明
以下为Rekognition Streaming Video Events需要用到主要参数
No | Name | Required | Default | Description |
2 | Input | Yes | N/A | 目前仅支持KVS的视频流 |
3 | Output | Yes | N/A | 对应Rekognition streaming video events检测结果的输出,目前仅支持s3作为输出 |
4 | S3Destination | Yes | N/A | 用于保存推理结果,BucketName必选,ObjectKeyPrefix可选 |
5 | RoleArn | Yes | N/A | IAM Role ARN,赋予stream-processor操作kvs、s3和SNS的权限 |
6 | NotificationsChannel | Yes(for New feature) | N/A | 发送视频分析结果通知的通道,目前仅支持SNS |
7 | KMSKeyId | Yes(for New feature) | N/A | 用于对保存到s3中处理结果进行加密的KMS Key |
8 | Settings | Yes | N/A | SecurityMonitoring : 用于使用者指定需要检测的对象类型,目前支持的类型有: PERSON, PET, PACKAGE, ALL. FaceSearch: 在实时视频的场景使用者用于设置人脸搜索的设置 |
9 | HomeSecurityMonitoringObjectDetection | Yes(for New feature) | N/A | Rekognition streaming video events场景下设置视频标签检测的类型 |
10 | ObjectClassesToDetect | Yes(for New feature) | Rekognition streaming video events场景设置需要检测的标签 | |
11 | MinConfidence | No | 50 | 设置视频标签检测的最小置信度 |
12 | RegionsOfInterest | No | Empty检测全部视频帧 | 设置视频帧相应标签检测的区域 |
13 | DataSharingPreferences | No | True for optIn flag | 设置是否容许Rekognition将视频用于的模型训练 |
- 将该json文件保存到Cloud9,在Cloud9 terminal中执行如下的命令创建rekognition-stream-processor
- 执行如下命令查看rekognition-stream-processor的详细信息
describe-stream-processor说明,如下图所示stream-processor目前处于STOPPED状态
3.4.3 启动rekognition-stream-processor
- 准备启动rekognition-stream-processor的json文件,如下图所示
StartSelector
除了通过ProducerTimestamp(Producer产生视频的时间)设置视频分析的开始位置外,您还可以通过KVSFragmentNumber(视频帧号)设置开始时间。
StopSelector
通过MaxDurationInSeconds(最大视频检测时长)设置停止检测分析外,未来您还可以通过NoDetectionForDuration(在固定检测时间中如果没有检测到设定的标签则停止检测出来)。
- 执行如下命令启动rekognition-stream-processor
3.4.4 观测执行结果
stream-processor按照start-stream-processor中设定的视频检测起始与结束条件完成对设置的目标标签(Person/Package/Pet/ALl)检测处理后,将检测结果保存到S3并通过配置的SNS发送出去。
- 观测S3中保存的检测结果
执行aws s3 ls video-event-analytics —recursive —profile sunny显示保存到s3的检测结果,如下图所示其中:
video-result:对应stream-processor中配置的 ObjectKeyPrefix
video_event_stream_processor: 对应stream-processor中配置的name
7aa6f62b-dfba-42bb-aa80-b5e50e7403e8:对应start-stream-processor返回的SessionId。
- 观测SNS发送的结果
stream-processor检测结束后,将发送两种类型的通知消息到SNS,下图为视频标签检测的结果信息
下图所示为检测处理完成的信息
借助上面的检测结果,可以扩展丰富您的业务应用场景。
4. 生产应用参考架构
4.1 架构说明
在2.1参考架构的基础增加如下内容
后端服务:提供基于特定业务场景的API,如设备注册、检测信息保存、检测结果查看、视频事件处理API,该服务可以根据需要部署在EC2、AWS容器服务、Lambda上。
Database:将视频检测结果与业务信息(如用户设备信息)持久化存储以供后续的查询使用,基于这些数据的类型、读写要求建议使用Amazon DocumentDB或DynamoDB来保存。
SNS订阅处理:根据业务需要可以与短信、邮箱、APP推送集成、也可以与其他的设备如(Alexa)等集成丰富您的业务功能。
扩展后的架构如下图所示:
4.2 执行流程说明
如下图所示为Rekognition Streaming Video Events的执行流程,分为预置阶段和事件处理阶段
- 预置阶段
预置阶段处理与2.2 执行流程说明类似,后台服务提供统一API在设备注册时完成kvs stream、streaming-processor创建和对应关系绑定。
- 事件处理阶段
step1:IPC设备检测到事件。
step2:IPC设备调用KVS Producer SDK的PutMedia API将视频流式传输到KVS stream,同时调用后端服务的API触发rekognition stream processor对视频数据进行分析。
step3:rekognition stream processor根据启动参数包括处理视频的启动与停止条件、处理视频的时间等信息对视频进行分析。
step4:rekognition stream processor将视频分析结果自动保存到S3并触发SNS topic。
step5:SNS topic的订阅触发后端服务API,该API根据一定的业务逻辑将检测结果与业务信息保存到数据库。
step6:SNS topic的订阅触发消息推送,将处理结果推送给终端用户。
step7:SNS topic的订阅触发其他集成设备。
step8:终端应用调用后端服务的API查看处理结果,显示检测结果中存储在S3中的图片或者回看KVS中存储的视频片段。
5.结束语
在基于指定标签的视频检测的场景中,Amazon提供的技术一共有如下4种。
方案1:基于KVS+Rekognition Detecting labels in a video
方案2:基于KVS+Rekognition Detecting labels in an image
方案3:基于KVS+自建Detecting labels
方案4:基于KVS+Rekognition Detecting labels in streaming video events
其中方案1、2、3需要不间断的从KVS中读取视频或者抽取图片,然后调用Rekognition提供的API完成视频分析。这种方式对Rekognition的API调用非常频繁,相应的成本也较高,为了降低成本可以结合端侧设备侦测事件的能力,在后端服务中提供事件处理的API,由该API触发启停Rekognition分析视频的动作,但实现这种API需要考虑的因素比较多,开发的技术难度也较大。而方案4借助AWS Rekognition近期发布的Rekognition Streaming Video Events功能提供了这种API的实现,开发者可以借助Rekognition streaming processor的API精确控制Rekognition streaming processor的创建、启动、停止,从而降低实现于预定标签的视频检测需求的难度,快速实现视频检测功能的上线。对应方案3您需要自己构建视频检测的模型、管理模型的训练推理和自动化扩展,如果Rekognition提供的API的检测能力无法满足您特定业务需求、且开发团队具备较强的AI开发能力可以考虑使用这一方案。但如果您初次为自己的产品提供智能视觉能力,Rekognition Streaming Video Events可以帮您快速实现这一需求,降低开发与维护的成本,同时后续您也能从Rekognition Streaming Video Events不断的迭代推出新的视频检测能力中收益,大大降低前期的研发投入。
6.参考资料
Amazon Kinesis Video Streams 官方简介
Amazon Doc of Rekognition Streaming Video Events Working with streaming video events
https://docs.aws.amazon.com/rekognition/latest/dg/streaming-video.html
https://docs.aws.amazon.com/rekognition/latest/dg/streaming-labels-detection.html
Rekognition Streaming Video Events Blog
Real Time Face Identification on Live Camera Feed using Amazon Rekognition Video and Kinesis Video Streams
Amazon Kinesis Video Streams Workshop
https://catalog.us-east-1.prod.workshops.aws/workshops/b95b9381-baf0-4bef-ba31-63817d54c2a6/en-US/
Easily perform facial analysis on live feeds by creating a serverless video analytics environment using Amazon Rekognition Video and Amazon Kinesis Video Streams
Amazon Rekognition API 更新说明
https://awsapichanges.info/archive/changes/34d853-rekognition.html