本文介绍了在使用人脸聚类过程中可能遇到的问题。

为什么无法生成人脸分组?

为了确保人脸分组的准确性,生成分组需要满足如下条件:

  • 使用IndexImage将图片添加到媒体集。
  • 同一个人物在媒体集中的图片必须大于或等于3张,并且至少有3张符合如下高清人脸标准:
    • 人脸尺寸大于50×50像素。
    • 人脸的偏转角HeadPose的三个子项的绝对值均小于30°。
    • 人脸的质量FaceQuality大于0.8。

分组生成后,媒体集中不满足上述高清人脸标准的图片,也有可能被划分为同一组人脸。

为什么生成的人脸分组无法搜索到?

由于产品的索引机制为异步处理,从图片索引、人脸分组、人脸分组能被搜索到均需要一定的时间,所以在设计业务逻辑时,请考虑延迟带来的数据一致性问题。
  • 图片索引:通常IndexImage对图片的索引需要10秒 。
  • 人脸分组:CreateGroupFacesJob人脸聚类分组操作需要最多180秒。时间和单次索引的图片数量有关,一般数秒完成。
    注意 CreateGroupFacesJob依赖IndexImage完成图片中人脸的检测。如果您使用MNS消息订阅了IndexImage结果,则应当在IndexImage完成后,等待3秒再调用CreateGroupFacesJob,以便CreateGroupFacesJob接口能够获得最新的图片中人脸信息。
  • IndexImage、CreateGroupFacesJob等异步接口完成后,您可以通过FindImages搜索到最新结果的时间为3秒。

应该每次索引图片后调用一次CreateGroupFacesJob吗?

不建议如此操作。CreateGroupFacesJob接口为增量分组接口,通常您可以在一批图片完成索引后,一次性调用CreateGroupFacesJob来进行批量聚类。

推荐如下两个方案:

  • 简单方法,即对每一个媒体集,每隔固定间隔(例如5分钟)调用一次CreateGroupFacesJob接口进行聚类。
  • 更佳方案,每次IndexImage时,将对应的媒体集推入一个延迟队列。定时从该队列中获取SetId,即可得到有新图片的媒体集。在最后一次IndexImage的(10+3)秒后运行CreateGroupFacesJob。

图片或者人脸数量是否有限制?

媒体集数量无限制。其他限制请参见用户限额(Quota)

媒体集的粒度如何设计?

媒体集是媒体搜索和人脸聚类的范围,不允许跨媒体集进行搜索和聚类。建议以此为依据进行划分。例如云相册场景,建议每个终端用户一个媒体集。

一张图片会被分到几个组?一个图片中有很多人会怎么样?

人脸聚类是按照人脸的维度来分组的。如果一个图片有多个人物,每个人脸均有机会被分到某个组。

FindImages按照组(GroupId)搜索,为什么结果中有其他人脸?

FindImages接口返回的维度是图片。因此图片内的所有人脸、标签均会返回。如果需要找到图片中所搜索的组(人物)的人脸信息,请通过遍历结果中的Faces字段,并检索其中的GroupId和您搜索的GroupId一致的人脸Object,即可了解对应人脸的位置、表情、年龄等信息。

其他问题

如果在使用中有疑问,请进入钉钉用户群(钉钉群号:21714099)与阿里云智能媒体管理的工程师实时沟通。