使用Rekognition识别视频中的名人

一、原理和架构

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%。如下截图。

image-20210508193327984

4、获取人物信息

讲上一个步骤中的名人 Id 传入,执行如下命令:

aws rekognition get-celebrity-info --id 3Zw7fr

返回结果如下。

{
  "Urls": [
      "www.imdb.com/name/nm0081182"
  ],
  "Name": "Joe Biden"
}
(END)

在返回结果中包含一个网址,我们用浏览器可以访问这个网址做查验:

image-20210508193827642

至此演示了使用AWS CLI发起视频中名人识别的过程。

三、使用Python发起操作

请参考Python SDK 参数和代码样例

启动任务:

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rekognition.html#Rekognition.Client.start_celebrity_recognition

获取识别结果:

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rekognition.html#Rekognition.Client.get_celebrity_recognition

获取名人信息:

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rekognition.html#Rekognition.Client.get_celebrity_info

四、参考资料

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 参数和代码样例

启动任务:

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rekognition/start-celebrity-recognition.html

获取识别结果:

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rekognition/get-celebrity-recognition.html

获取名人信息:

https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rekognition/get-celebrity-info.html