使用人脸聚类功能,您可以将数据集中存在相似人脸的多张图片进行分组,适用于网盘的人脸相册、家庭监控的陌生人检测、甚至新零售的顾客管理等场景。人脸聚类后,您可以根据人脸分组查询对应人员的所有图片信息。
应用场景
网盘人脸相册
将网盘中的照片进行人脸聚类,按人脸进行分组,产生个性化的人脸相册。
家庭监控
将家庭成员照片进行人脸聚类,当出现不能聚类的陌生人照片时及时预警,可有效管理环境安全,及时识别并处理危险人员及事件,保障家庭群体人身安全。
新零售顾客管理
将采集到的照片通过人脸聚类和去重可以获得准确的客流量数据,分析顾客购买偏好进行精准营销。
前提条件
已通过绑定方式(CreateBinding - 创建绑定任务)或者主动索引方式(IndexFileMeta - 文件元信息建立索引或者BatchIndexFileMeta - 批量文件元信息建立索引)将待分组的图片索引到数据集(CreateDataset - 创建数据集)中。
同一个人物在媒体集中的图片必须大于或等于3张,并且至少有3张符合如下标准的高清人脸图片:
人脸尺寸大于75×75像素。
人脸的偏转角HeadPose的三个子项的绝对值均小于30°。
人脸的质量FaceQuality大于0.8。
您可以调用GetFileMeta - 获取文件元数据接口获取人脸的偏转角和质量信息。
分组生成后,数据集中不满足上述高清人脸标准的图片,也有机会被划分为同一组人脸。关于人脸聚类的更多常见问题,请参见图片管理常见问题。
创建人脸聚类任务
您可以调用CreateFigureClusteringTask - 创建人物聚类任务接口创建一个人脸聚类任务,在您已索引到数据集的图片中,将属于不同人物的人脸进行聚类分组。如下以对数据集test-dataset中的图片进行人脸聚类分组为例。
调用该接口创建分组任务不会对保存的文件做更改,仅生成分组数据。
任务开始执行后,任务信息只保存7天,超过7天则无法再获取。您可以通过以下几种方式及时获取任务信息:
调用GetTask - 获取任务信息或ListTasks - 列出任务接口获取返回的
TaskId
,查看任务信息。在与智能媒体管理相同的地域下开通MNS服务,并配置订阅关系,及时获取任务信息通知,异步通知消息格式请参见异步通知消息格式。关于MNS SDK的更多信息,请参见步骤四:接收和删除消息。
在与智能媒体管理相同的地域下开通RocketMQ服务,并创建RocketMQ 4.0实例、Topic、Group,及时获取任务信息通知,异步通知消息格式请参见异步通知消息格式。关于RocketMQ使用的更多信息,请参见调用HTTP协议的SDK收发普通消息。
在与智能媒体管理相同的地域下开通并接入事件总线EventBridge服务,及时获取任务信息通知。更多信息,请参见智能媒体管理IMM事件。
请求示例
{
"ProjectName": "test-project",
"DatasetName": "test-dataset"
}
返回示例
{
"TaskId": "CreateFigureClusteringTask-ba5784b8-f61e-485d-8ea0-****",
"RequestId": "42F4F8FD-006D-0EF0-8F2A-****",
"EventId": "140-1L5dh6eSUErqdxV1ZvJ****"
}
返回如上所示的示例信息,表示人脸聚类任务创建成功。
示例代码
查询人脸分组信息
人脸聚类任务创建成功后,您可以调用QueryFigureClusters - 查询人物聚类接口,查询分组的信息,包括分组数量、各分组的图片数量等。如下以查询数据集test-dataset中的人脸聚类分组信息为例。
请求示例
{
"ProjectName": "test-project",
"DatasetName": "test-dataset"
}
返回示例
{
"FigureClusters": [
{
"AverageAge": 27.125,
"Cover": {
"Addresses": [],
"AudioCovers": [],
"AudioStreams": [],
"CroppingSuggestions": [],
"Figures": [
{
"Attractive": 0.9980000257492065,
"Beard": "none",
"BeardConfidence": 0.9959999918937683,
"Boundary": {
"Height": 270,
"Left": 573,
"Top": 104,
"Width": 202
},
"FaceQuality": 1.0,
"FigureId": "d7365ab8-1378-4bec-83cb-eccad8d11e0b",
"FigureType": "face",
"Glasses": "none",
"GlassesConfidence": 0.9990000128746033,
"Hat": "none",
"HatConfidence": 1.0,
"HeadPose": {
"Pitch": -0.7369999885559082,
"Roll": 2.5399999618530273,
"Yaw": 9.138999938964844
},
"Mask": "none",
"MaskConfidence": 0.7269999980926514,
"Mouth": "open",
"MouthConfidence": 0.9959999918937683,
"Sharpness": 1.0
}
],
"ImageHeight": 683,
"ImageWidth": 1024,
"Labels": [],
"OCRContents": [],
"ObjectId": "170ffdeb36cec846f4214c78a0f3a0d4b7e37d0305370216ae780f7b8c72f871",
"Subtitles": [],
"URI": "oss://bucket1/photos/2.jpg",
"VideoStreams": []
},
"CreateTime": "2022-07-12T16:41:19.336825716+08:00",
"DatasetName": "dataset1",
"FaceCount": 16,
"Gender": "female",
"ImageCount": 16,
"MaxAge": 30.0,
"MinAge": 23.0,
"ObjectId": "Cluster-7bdbcedb-bd79-42e7-a1e2-b29a48532bd6",
"ObjectType": "figure-cluster",
"OwnerId": "*****",
"ProjectName": "test-project",
"UpdateTime": "2022-09-19T17:08:59.374781532+08:00",
"VideoCount": 0
},
{
"AverageAge": 24.200000762939453,
"Cover": {
"Addresses": [],
"AudioCovers": [],
"AudioStreams": [],
"CroppingSuggestions": [],
"Figures": [
{
"Attractive": 0.9990000128746033,
"Beard": "none",
"BeardConfidence": 0.9990000128746033,
"Boundary": {
"Height": 266,
"Left": 301,
"Top": 218,
"Width": 196
},
"FaceQuality": 0.8859999775886536,
"FigureId": "f58bbdce-f3d1-4674-be6b-43d4b47c08e1",
"FigureType": "face",
"Glasses": "none",
"GlassesConfidence": 1.0,
"Hat": "none",
"HatConfidence": 1.0,
"HeadPose": {
"Pitch": 13.963000297546387,
"Roll": -12.21399974822998,
"Yaw": -6.2210001945495605
},
"Mask": "none",
"MaskConfidence": 0.7490000128746033,
"Mouth": "open",
"MouthConfidence": 0.9940000176429749,
"Sharpness": 1.0
}
],
"ImageHeight": 1024,
"ImageWidth": 683,
"Labels": [],
"OCRContents": [],
"ObjectId": "b9c80e51aa95072413e2a0a6e5262644bc3cba14a4754f54f3fa9850c4d244f1",
"Subtitles": [],
"URI": "oss://bucket1/photos/11.jpg",
"VideoStreams": []
},
"CreateTime": "2022-09-19T17:08:59.374932448+08:00",
"DatasetName": "test-dataset",
"FaceCount": 5,
"Gender": "female",
"ImageCount": 5,
"MaxAge": 26.0,
"MinAge": 22.0,
"ObjectId": "Cluster-856be781-bf5a-46d7-8494-8d7c44f5e282",
"ObjectType": "figure-cluster",
"OwnerId": "*****",
"ProjectName": "test-project",
"UpdateTime": "2022-09-19T17:08:59.374932448+08:00",
"VideoCount": 0
}
],
"NextToken": "",
"TotalCount": 2,
"RequestId": "42B3DD92-FE0D-09B7-B582-*****"
}
该返回示例显示,此数据集中的人脸图片被分为2组,其中一个分组ID为Cluster-7bdbcedb-bd79-42e7-a1e2-b29a48532bd6,包含16张图片;另一个分组ID为Cluster-856be781-bf5a-46d7-8494-8d7c44f5e282,包含5张图片。
示例代码
查询人脸分组中的图片列表
查询完分组信息之后,您可以调用SimpleQuery - 简单查询接口,通过分组ID查询某个分组中包含的所有图片。如下以查询数据集test-dataset中分组ID为Cluster-7bdbcedb-bd79-42e7-a1e2-b29a48532bd6的人脸分组图片信息为例。
请求示例
{
"ProjectName": "test-project",
"DatasetName": "test-dataset",
"Query": "{\"Field\": \"Figures.FigureClusterId\", \"Operation\": \"eq\", \"Value\": \"Cluster-7bdbcedb-bd79-42e7-a1e2-b29a48532bd6\"}",
"MaxResults": 100
}
返回示例
由于图片数量和信息较多,如下示例仅列举分组中的一张图片信息。
{
"Aggregations": [],
"Files": [
{
"Addresses": [],
"AudioCovers": [],
"AudioStreams": [],
"ContentMd5": "ViAbCBHAZgNU4zvs5****==",
"ContentType": "image/jpeg",
"CreateTime": "2022-07-12T15:57:47.792615815+08:00",
"CroppingSuggestions": [],
"DatasetName": "test-dataset",
"ETag": "\"56201B0811C0660354E33BECE4C****\"",
"EXIF": "****",
"Figures": [
{
"FaceQuality": 1.0,
"FigureClusterId": "Cluster-7bdbcedb-bd79-42e7-a1e2-b29a48532bd6",
"FigureConfidence": 1.0,
"FigureId": "cd9139bf-f339-4ec2-b5fd-****",
"FigureType": "face",
"Glasses": "none",
"GlassesConfidence": 0.9990000128746033,
"Hat": "none",
"HatConfidence": 1.0,
"HeadPose": {
"Pitch": -0.8999999761581421,
"Roll": 1.1660000085830688,
"Yaw": 7.932000160217285
},
"Mask": "none",
"MaskConfidence": 0.6830000281333923,
"Mouth": "close",
"MouthConfidence": 0.7879999876022339,
"Sharpness": 1.0,
...
}
],
"FileHash": "\"56201B0811C0660354E33BECE****\"",
"FileModifiedTime": "2022-07-12T15:56:41+08:00",
"Filename": "3.jpg",
"ImageHeight": 1024,
"ImageScore": {
"OverallQualityScore": 0.7490000128746033
},
"ImageWidth": 683,
"Labels": [
{
"CentricScore": 0.8349999785423279,
"LabelConfidence": 1.0,
"LabelLevel": 2,
"LabelName": "\u7167\u7247\u62cd\u6444",
"Language": "zh-Hans",
"ParentLabelName": "\u827a\u672f\u54c1"
},
...
],
"MediaType": "image",
"OCRContents": [],
"OSSCRC64": "3400224321778591044",
"OSSObjectType": "Normal",
"OSSStorageClass": "Standard",
"OSSTaggingCount": 0,
"ObjectACL": "default",
"ObjectId": "d132a61122c659f6fc1b42ecee1662aff358c7f1720027bead225****",
"ObjectType": "file",
"Orientation": 1,
"OwnerId": "****",
"ProduceTime": "2014-02-21T00:03:36+08:00",
"ProjectName": "test-project",
"Size": 187674,
"Subtitles": [],
"URI": "oss://bucket1/1.jpg",
"UpdateTime": "2022-07-12T16:41:19.336736388+08:00",
"VideoStreams": []
},
...
],
"NextToken": "",
"RequestId": "84E4D242-8D15-0312-B976-****"
}
返回示例显示,该分组中包含一张OSS地址为oss://bucket1/1.jpg的图片。