一、原理和架构
Rekognition服务目前在AWS海外区域可用,在中国区暂时不可用。
1、原理
Rekognition的原理是:
- 上传视频到S3中,获得完整的S3存储地址;
- 调用Rekognition的API发起对S3中的某个视频文件的识别,不同类型的识别有不同的接口,比如识别物体、人脸、名人为不同的调用接口,此任务为异步,返回 JobId 信息。
- 视频分析完毕后,Rekognition回call SNS通知服务,并可根据 JobId 查询;
- 应用程序接收到SNS通知后,从SNS消息总线中取出ID,然后再次调用Rekognition的获取分析接口,获得JSON格式的输出结果,输出结果包含人物ID、任务信息、时间线等;
- 最后调用获取名人信息接口,输入人物ID,获得名称和公开信息(URL网址)。
2、架构设计
Rekognition的测试可以从完全从AWS CLI发起,此外也可以从任何一种语言通过AWS SDK调用API发起。二者区别是:
- 当从CLI发起测试时候,每个步骤都通过人工处理,间隔一段时间再次查看运行结果,不存在自动触发逻辑;这一个步骤可以说是使用Rekonition的阶段一;
- 当通过SDK从应用程序发起API访问时候,程序输入输出可通过SNS和SQS进行自动化触发;这一个步骤可以说是使用Rekonition的阶段二;
- 当使用了Serverless无服务器架构后,可使用S3 Event、Lambda、DynamoDB、SNS进行深度的自动化集成,主动将分析结果推送到某个数据库中或者第三方API接口上;此部分需要的AWS基础知识较多,本文不做描述。这一个步骤可以说是使用Rekonition的阶段三。
二、使用CLI发起操作
AWS CLI支持Windows、Linux、MacOS等多种系统,安装使用请参考另外的文档。
1、上传视频到S3存储桶
首先选定一个AWS海外区域,后续所有操作都在这个区域。请确保AWS CLI配置了正确的region参数。
下载测试文件到当前目录:
wget https://myworkshop-lxy.s3-ap-southeast-1.amazonaws.com/Rekognition/video01.mp4
在S3上新建一个存储桶,例如rekdemo01,然后将视频复制进去。执行如下命令:
aws s3 cp /home/lxy/video01.mp4 s3://rekdemo01/video01.mp4
上传完成。如果从中国的国内网络向海外AWS传输数据速度较慢,可以考虑通过S3 Transfer Acceleration进行,或者通过合法的跨境专线/SDWAN效果更好。上传加速这部分内容不在本问讨论之列。
2、发起视频检测
执行如下命令:
aws rekognition start-celebrity-recognition \
--video "S3Object={Bucket=myworkshop-lxy,Name=Rekognition/video01.mp4}"
CLI文档中的其他参数为可选参数,在CLI下最小只需输入这些参数即可运行。
运行后返回结果如下。
{
"JobId": "d6f5191abdce3fc0679d6bb16ca09a1f02e09026247c14336861b8672b6031b6"
}
(END)
记录下返回结果中的 JobId
,一个3分钟的视频检测需要几分钟时间。
3、获取检测结果
在使用CLI执行Rekognition时候,不需要将执行结果返回给SNS通知服务,因此可以等待几分钟后,手工去查询执行结果。此时需要使用上一步的 JobId
参数,命令如下。
aws rekognition get-celebrity-recognition \
--job-id d6f5191abdce3fc0679d6bb16ca09a1f02e09026247c14336861b8672b6031b6
如果任务已经执行完毕了,在接口上第一行可以看到 SUCCEEDED
表示视频处理完成。其中可以看到姓名、ID和可信度。
需要注意:返回结果是包含了多个时间线的,Timestamp
参数会给出时间。由于本视频经过剪辑和压缩,画面粗糙颗粒度大,因此视频0秒位置识别是很不准确的。在后边视频播放中,视频准确度达到98%。如下截图。
4、获取人物信息
讲上一个步骤中的名人 Id
传入,执行如下命令:
aws rekognition get-celebrity-info --id 3Zw7fr
返回结果如下。
{
"Urls": [
"www.imdb.com/name/nm0081182"
],
"Name": "Joe Biden"
}
(END)
在返回结果中包含一个网址,我们用浏览器可以访问这个网址做查验:
至此演示了使用AWS CLI发起视频中名人识别的过程。
三、使用Python发起操作
请参考Python SDK 参数和代码样例
启动任务:
获取识别结果:
获取名人信息:
四、参考资料
1、产品说明
Rekognition视频识别:
https://docs.aws.amazon.com/zh_cn/rekognition/latest/dg/video-analyzing-with-sqs.html
识别名人:
https://docs.aws.amazon.com/zh_cn/rekognition/latest/dg/celebrities-video-sqs.html
2、接口说明
启动任务:
https://docs.aws.amazon.com/zh_cn/rekognition/latest/dg/API_StartCelebrityRecognition.html
获取识别结果:
https://docs.aws.amazon.com/zh_cn/rekognition/latest/dg/API_GetCelebrityRecognition.html
查询名人信息:
https://docs.aws.amazon.com/zh_cn/rekognition/latest/dg/API_GetCelebrityInfo.html
3、AWS CLI 参数和代码样例
启动任务:
获取识别结果:
获取名人信息: