亚马逊AWS官方博客
使用Amazon IoT Core, Amazon Kinesis Video Streams 和Amazon Rekognition构建中小安防系统的方法
中小企业商户(SMB)及家用入侵报警系统从传统传感器探测,报警主机上报警情发展到通过智能网络摄像头实现入侵的监测,报警,以及警情视频验证(Alarm Video Verify)。 使用低成本的网络摄像头(硬件资源有限,不支持边缘推理计算)+云端存储推理实现家用及中小商户安防监控成为一个流行的方式。
本文将介绍如何使用Amazon IoT控制网络摄像头的布防撤防状态,根据自带移动探测器(PIR Motion Detector) 触发拍摄一段视频通过Kinesis Video Streams服务上传云端,同时可以使用云端的人工智能Amazon Rekognition服务提供人脸的识别,提供更精准的警报推送服务。
关于Amazon IoT Core,Amazon Kinesis Video Streams, Amazon Rekognition
Amazon IoT Core提供云服务将 IoT 设备连接到其它设备和 Amazon云服务,Amazon IoT Core 提供设备软件以帮助您将 IoT 设备集成到基于 Amazon IoT 的解决方案。 本方案使用到的Amazon IoT Device Shadow 服务在 Amazon IoT Core事物对象中添加设备影子,无论设备是否连接到 Amazon IoT Core,设备影子都可以向应用程序和其他服务提供设备的状态。
Amazon Kinesis Video Streams 是一项完全托管的 Amazon 服务,您可以使用 Kinesis Video Streams 捕获来自数百万种源 (包括智能手机、安全摄像头、网络摄像头、车载摄像头、无人机及其他源) 的海量实时视频数据传输到 Amazon云,或者构建应用程序以进行实时视频处理或进行面向批处理的视频。
Amazon Rekognition 提供高精度的人脸分析,人脸比较和人脸搜索功能。Amazon Rekognition 基于同样由 Amazon 计算机视觉科学家开发的成熟且高度可扩展的深度学习技术,每天能够分析数十亿图像和视频。它不需要机器学习专业知识即可使用。Amazon Rekognition 包含一个简单易用的 API,该 API 可快速分析存储在 Amazon S3 中的任何图像或视频文件。
解决方案架构综述
本方案使用Amazon IoT Device Shadow 服务设置网络摄像头的布防撤防状态,摄像机在布防状态下会使能自带移动探测器(PIR) , PIR探测到有人进入时,会拍摄一段视频通过设备中的Kinesis Video Streams producer上传云端。同时将视频传送至Amazon Rekognition服务进行人脸的识别,Amazon Rekognition将分析的结果通过Lambda,SNS推送邮件给用户,报告发生警情.
方案的整体架构如下:
先决条件
- Amazon 云账户
- 一部树莓派4B+摄像头
- 一台笔记本电脑
演练操作步骤
本演练操作中有三个部分:
- 通过IoT Device Shadow控制设备的布防撤防状态
- 使用Kinesis Video Streams Producer C++ SDK传输视频流到云端Kinesis Video Streams
- 使用Amazon Rekognition分析视频流中人脸信息,推送SNS邮件信息
通过Amazon IoT Device Shadow控制设备的布防撤防状态
在家用或中小商户安防系统中,根据家中有人在否可以区分为布防状态(离家状态),撤防状态(居家状态),在这里我们使用IoT Device Shadow设备影子来控制和同步设备,云端,用户客户端的状态, 影子为设备、应用程序和其它云服务提供可靠的数据存储以共享数据。它们允许设备、应用程序和其它云服务连接和断开连接,而不会丢失设备的状态。
a). 参考用户开发手册,创建IoT thing,保存thing的证书,私钥,Root CA证书
b). 下载aws-iot-device-sdk-embedded-C 到Raspberry Pi
git clone --recurse-submodules https://github.com/aws/aws-iot-device-sdk-embedded-C.git
从这里获取支持本文测试的shadow_demo_main.c , 替换原SDK中的\aws-iot-device-sdk-embedded-C-main\demos\shadow\shadow_demo_main.c. 并改动shadow_demo_helpers.c,去除static
c). 将thing的证书,私钥,Root CA证书保存于Raspberry Pi的文件系统
如图为例:
d). 在aws-iot-device-sdk-embedded-C根目录下执行
你可以在Amazon IoT Console的settings界面中发现 “<your-aws-iot-endpoint>,格式如 ABCDEFG1234567.iot.us-east-2.amazonaws.com.
在本演示中,
e). cd build , make shadow_demo_main
cd bin, 执行 ./shadow_demo_main
f). 在IoT console MQTT test client,订阅shadow的topic, 模拟客户端应用,publish设备的 shadow中的布防和撤防状态。
从Raspberry Pi终端的log中,可以看到/update/delta的消息,表明设备端收到了状态修改的命令
使用Kinesis Video Streams Producer C++ SDK传输视频流到云端Kinesis Video Streams
本部分将介绍如何在设备端将使用Kinesis Video Streams Producer SDK将视频传输到云端Kinesis Video Streams。确保你的Raspberry Pi安装了CSI摄像头(本例使用Raspberry Pi Camera Rev1.3), 测试方法可以参考指南。
a). 登录Raspberry Pi, 安装依赖库
b). Git clone Kinesis Video Streams C++ SDK到Raspberry Pi,编译SDK
git clone --recursive https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git
执行以下cmake命令,下载build依赖库
执行make 命令,build SDK
make
c). 设置运行环境变量
为测试目的可以使用你Amazon 账户的Access key和Secret key, 生产目的可以使用IoT thing的证书去做Kinesis Video Streams的鉴权。
d). 运行producer SDK,获取视频流并上传云端
e). 在云端查看Kinesis Video Streams 视频流
打开Kinesis Video Streams console,点击kvs-rekognition-stream, media playback, 你会看到从raspberry Pi端采集的实时视频流,根据网络状况,会有一定延时。
在实际的产品开发中,设备端应用程序根据IoT Device Shadow设置的布防撤防状态,当移动探测器(PIR)触发时,启动Producer的视频上传逻辑。
使用Amazon Rekognition分析视频流中人脸信息
本节将介绍如何使用Amazon Rekognition video从Kinesis Video Streams中获取视频流,并从中检测人脸,对比存储于face collection中的人脸图片,将匹配信息发送到Kinisis data stream,并通过Lambda 将人脸分析结果推送到邮箱,通知用户有熟人或者陌生人进入监控区域。
步骤1、 创建一个Amazon Rekognition face collection
a). 在你的Raspberry Pi中安装及配置AWS CLI,可以参考相应指南。
b). 创建S3 bucket,比如kvs-rekognition-bucket
c). 将自己以及其它两到三人的脸部照片上传到kvs-rekognition-bucket, 图片命名如name.jpg, 识别结果会以name标识。
d). 在Raspberry Pi终端执行
e). S3中的人脸图片加入collection,设置环境变量
export BUCKET_NAME="kvs-rekognition-bucket"
f). 执行一下命令将S3中的人脸图片加入collection
控制端会出现类似信息
g). 使用如下命令确认collection创建成功
aws rekognition describe-collection --collection-id $COLLECTION_ID
步骤2、 使用CloudFormation 创建Kinesis Data Streams, Lambda, SNS, IAM role。
a). 获取CloudFormation yaml文件及Lambda 文件
从这里获CloudFormation yaml file kvsRekognitiondeploy.yaml
创建S3 bucket并上传Lambda.zip
在kvsRekognitiondeploy.yaml中修改Code的S3Bucket名称,与你上传的Lambda.zip一致
b). 打开CloudFormation console创建stack
c). 输入stack 名称,以及SNS消息推送的邮箱地址
d). 等待stack创建成功,关注outputs,后边将会使用到
步骤3、创建Amazon rekognition stream processer
a). 执行命令设置环境变量
b). 执行以下命令创建recognition stream processor
执行结果如下所示:
c). 启动processor
aws rekognition start-stream-processor --name kvs-rekognition-processor --region us-west-2
确认processor运行状态
aws rekognition list-stream-processors --region us-west-2
步骤4、启动producer,传输视频,等待人脸识别结果
参考第二部分介绍,在raspberry Pi 启动producer,
./kvs_gstreamer_sample kvs-rekognition-stream
这时你面向Raspberry Pi摄像头,数秒后收到邮件通知,一个已知的人脸被识别出。
步骤5、分析结果的说明
Amazon Rekognition Video stream processor 会将视频中每帧分析的结果输出到Kinesis Data Stream,以下部分是一帧视频的分析结果输出。
InputInformation 是输入的视频帧的信息,包含它的时间等信息。
FaceSearchResponse 里DetectedFace表示视频帧中识别到的人脸的位置,信心度等信息。
MatchedFaces是匹配到collection中人脸的信息。
Lambda会解析输出结果,将分析结果中匹配人脸以及未匹配人脸信息发送到SNS,并推送邮件。
清理环境
演练结束之后,请将相关服务资源关闭。
总结
在本文中,我们按步骤介绍了如何使用Amazon IoT Device Shadow设置摄像头的布防,撤防状态,实际产品也可以通过shadow设置其它参数。通过Kinesis Video Streams和Amazon Rekognition等服务实现了事件触发视频片段的上传,分析,人脸对比,匹配结果邮件推送。在实际产品中,可以设置SNS推送到App, App收到提醒可以查看视频片段的回放,可以参考相关开发手册。限于篇幅,不在这里详细介绍。