AWS Rekognition searchFacesByImage仅返回最多1个匹配结果问题求助
AWS Rekognition searchFacesByImage多人脸匹配返回数量不足问题解决方案
问题根因
searchFacesByImage接口的默认执行逻辑是优先检测输入图像中尺寸最大的1张人脸,仅用这张人脸匹配指定人脸集合。你设置的MaxFaces参数作用是单张查询人脸可返回的最大匹配结果数,并非控制输入图像的人脸检测数量,所以无论输入图包含多少人脸,默认调用都只会返回1张人脸的匹配结果。
解决步骤
- 第一步:先调用
detectFaces接口处理输入图像,提取出图中所有符合质量要求的人脸的BoundingBox坐标参数,可根据需求调整QualityFilter参数过滤模糊、角度过大的无效人脸 - 第二步:遍历上一步得到的所有人脸边界框,对每一个边界框单独调用
searchFacesByImage接口,调用时传入对应的BoundingBox参数指定要匹配的人脸范围,同时保留你设置的MaxFaces、FaceMatchThreshold参数即可
代码示例(Python boto3)
import boto3 rekognition = boto3.client('rekognition') collection_id = "替换为你的人脸集合ID" input_image = {'S3Object': {'Bucket': '替换为你的S3桶名', 'Name': '替换为输入图片的S3路径'}} # 第一步:检测输入图中所有符合要求的人脸 detect_response = rekognition.detect_faces(Image=input_image, Attributes=['DEFAULT']) all_face_bboxes = [face['BoundingBox'] for face in detect_response['FaceDetails']] # 第二步:逐个人脸单独发起匹配查询 all_match_results = [] for bbox in all_face_bboxes: search_response = rekognition.search_faces_by_image( CollectionId=collection_id, Image=input_image, MaxFaces=6, FaceMatchThreshold=70, BoundingBox=bbox ) all_match_results.append({ "input_face_bbox": bbox, "face_matches": search_response.get('FaceMatches', []) })
注意事项
- 该方案会根据输入图像的人脸数量产生对应次数的API调用,需要提前确认你的AWS账号Rekognition接口的调用配额,避免触发限流
- 如果输入图像中人脸尺寸过小、遮挡严重,
detectFaces可能无法识别出对应人脸,可适当降低QualityFilter阈值提升召回率
内容的提问来源于stack exchange,提问作者Tomer
相关产品推荐
相关产品推荐

