如何在Microsoft Azure中使用匹配阈值规则创建FaceList
Azure FaceList 按相似度阈值过滤添加人脸实现方案
1. 前置准备
- 提前开通Azure AI Face服务,获取服务的endpoint和访问密钥,Python环境可通过
pip install azure-ai-vision-face安装官方SDK - 根据业务场景自定义相似度阈值,官方默认参考阈值为0.6,可自行调整
2. 核心实现逻辑
整体流程为:先检测待添加人脸拿到faceId → 与FaceList中已有特征做相似度比对 → 满足similarity_score < 阈值条件再执行添加操作,否则跳过。
完整代码示例(Python)
from azure.ai.vision.face import FaceClient from azure.ai.vision.face.models import FaceDetectionModel, FaceRecognitionModel from azure.core.credentials import AzureKeyCredential # 基础配置 ENDPOINT = "替换为你的Azure Face服务端点" KEY = "替换为你的服务访问密钥" SIMILARITY_THRESHOLD = 0.6 # 自定义相似度阈值 FACE_LIST_ID = "自定义facelist的唯一ID" # 初始化Face客户端 face_client = FaceClient(endpoint=ENDPOINT, credential=AzureKeyCredential(KEY)) # 初始化FaceList(不存在则创建,存在则跳过) try: face_client.face_list.create( face_list_id=FACE_LIST_ID, name="自定义FaceList名称", recognition_model=FaceRecognitionModel.RECOGNITION_04 ) except: pass # 检测人脸获取faceId def get_face_id(image_path): with open(image_path, "rb") as f: detect_result = face_client.face.detect( f.read(), detection_model=FaceDetectionModel.DETECTION_03, recognition_model=FaceRecognitionModel.RECOGNITION_04, return_face_id=True ) return detect_result[0].face_id if detect_result else None # 按阈值规则添加人脸到FaceList def add_face_if_qualified(target_face_id, image_path): # 获取FaceList中已存的人脸列表 face_list = face_client.face_list.get(FACE_LIST_ID) existing_faces = face_list.persisted_faces # 列表为空直接添加 if not existing_faces: with open(image_path, "rb") as f: add_result = face_client.face_list.add_face( face_list_id=FACE_LIST_ID, image=f.read(), detection_model=FaceDetectionModel.DETECTION_03 ) return f"添加成功,人脸ID:{add_result.persisted_face_id}" # 非空则做相似度比对 similar_faces = face_client.face.find_similar( face_id=target_face_id, face_list_id=FACE_LIST_ID, max_num_of_candidates_returned=1 ) # 取最高相似度分数 max_score = similar_faces[0].confidence if similar_faces else 0 if max_score < SIMILARITY_THRESHOLD: with open(image_path, "rb") as f: add_result = face_client.face_list.add_face( face_list_id=FACE_LIST_ID, image=f.read(), detection_model=FaceDetectionModel.DETECTION_03 ) return f"添加成功,人脸ID:{add_result.persisted_face_id}" else: return f"最高相似度{max_score}高于阈值{SIMILARITY_THRESHOLD},跳过添加" # 调用示例 if __name__ == "__main__": test_image_path = "替换为待添加的人脸图片路径" face_id = get_face_id(test_image_path) if face_id: print(add_face_if_qualified(face_id, test_image_path)) else: print("图片中未检测到有效人脸")
3. 注意事项
- 创建FaceList时指定的
recognition_model必须和人脸检测、比对时使用的模型版本一致,否则会报错 - 普通FaceList最多存储1000个人脸特征,如需存储更多可改用LargeFaceList
- similarity_score取值范围为0~1,分数越高代表两个人脸相似度越高
内容的提问来源于stack exchange,提问作者Rakesh Jarupula
相关产品推荐
相关产品推荐

