You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:15:02