如何在AWS Rekognition中复制或克隆集合?能否以新集合ID复制现有集合?
AWS Rekognition集合复制/克隆方法及新ID复制说明
AWS Rekognition没有原生的集合克隆API,但可以通过手动导出+导入的方式实现,并且完全支持使用新的集合ID复制已有集合,具体步骤如下:
步骤1:导出原集合的所有人脸数据
使用ListFaces API遍历原集合的所有人脸记录,该API存在分页限制,需循环调用直到返回的NextToken为空,获取每个Face的FaceId、ExternalImageId等关键信息。
示例Python代码:
import boto3 def fetch_all_faces(collection_id): rekog_client = boto3.client('rekognition') all_faces = [] next_token = None while True: request_params = {'CollectionId': collection_id} if next_token: request_params['NextToken'] = next_token response = rekog_client.list_faces(**request_params) all_faces.extend(response['Faces']) next_token = response.get('NextToken') if not next_token: break return all_faces
步骤2:创建新的目标集合
调用CreateCollection API,传入你指定的新集合ID,完成集合创建。
示例Python代码:
def create_new_collection(new_collection_id): rekog_client = boto3.client('rekognition') return rekog_client.create_collection(CollectionId=new_collection_id)
步骤3:将人脸数据导入新集合
针对导出的每一条人脸记录,调用IndexFaces API将其添加到新集合中。需确保能访问该人脸对应的原始图像(比如存储在S3桶中),同时可保留原有的ExternalImageId等元数据,保证新集合与原集合数据一致。
示例Python代码:
def import_faces_to_collection(new_collection_id, faces_list, image_s3_bucket): rekog_client = boto3.client('rekognition') for face in faces_list: # 假设原人脸的图像存储在指定S3桶中,ExternalImageId为图像文件名 rekog_client.index_faces( CollectionId=new_collection_id, Image={'S3Object': {'Bucket': image_s3_bucket, 'Name': face['ExternalImageId']}}, ExternalImageId=face['ExternalImageId'] )
注意事项
- 权限要求:执行操作的IAM角色需具备
rekognition:ListFaces、rekognition:CreateCollection、rekognition:IndexFaces权限,以及S3桶的读取权限(若图像存储在S3)。 - 数量限制:每个Rekognition集合最多支持1亿人脸,导入时需确保不超过该上限。
- 元数据保留:若原集合人脸包含自定义属性,需在
IndexFaces调用时重新传入对应参数以保留数据。
内容的提问来源于stack exchange,提问作者Alen Paul Varghese
相关产品推荐
相关产品推荐

