资讯 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

人脸1:N搜索

能力介绍

业务能力

本文档为人脸1:N搜索API产品的使用说明文档。如果您业务上的图片主要由普通摄像头/抓拍机设备采集的大角度俯拍照片为主,建议您使用场景化搜索服务,查看文档详情

  • 人脸1:N搜索:也称为1:N识别,在指定人脸库集合中,找到最相似的人脸。
  • 注意:需要完成人脸1:N搜索,需配合人脸库管理系列API一同使用,首先构建一个人脸库,用于存放所有待比对的人脸特征,具体文档可参考人脸库管理相关接口文档说明;

M:N识别的原理,相当于在多个人脸的图片中,先分别找出所有人脸,然后分别在待查找的人脸集合中,分别做1:N识别,最后将识别结果汇总在一起进行返回。

若人脸库超过1年未使用(无入库、搜索等操作),平台将对相关人脸库资源进行释放,以确保用户信息安全。

人脸1:N搜索

在线调试

您可以在 示例代码中心 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。

请求说明

注意事项

  • 请求体格式化:Content-Type为application/json,通过json格式化请求体。
  • Base64编码:请求的图片需经过Base64编码,图片的base64编码指将图片数据编码成一串字符串,使用该字符串代替图像地址。您可以首先得到图片的二进制,然后用Base64格式编码即可。需要注意的是,图片的base64编码是不包含图片头的,如data:image/jpg;base64,
  • 图片格式:现支持PNG、JPG、JPEG、BMP,不支持GIF图片

请求示例

HTTP方法:POST

请求URL: https://aip.baidubce.com/rest/2.0/face/v3/search

URL参数:

参数
access_token 通过API Key和Secret Key获取的access_token,参考“Access Token获取

Header如下:

参数
Content-Type application/json

Body中放置请求参数,参数详情如下:

请求参数

参数 必选 类型 说明
image string 图片信息,图片上传方式根据image_type来判断,为base64时,编码后图片大小不超过2M,分辨率应小于1920*1080
image_type string 图片类型
BASE64:(推荐)图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M
FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。
group_id_list string 从指定的group中进行查找 用逗号分隔,上限10个
quality_control string 图片质量控制
NONE: 不进行控制
LOW:较低的质量要求
NORMAL: 一般的质量要求
HIGH: 较高的质量要求
默认 NONE
若图片质量不满足要求,则返回结果中会提示质量检测失败
liveness_control string 活体检测控制
NONE: 不进行控制
LOW:较低的活体要求(高通过率 低攻击拒绝率)
NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率)
HIGH: 较高的活体要求(高攻击拒绝率 低通过率)
默认NONE
若活体检测结果不满足要求,则返回结果中会提示活体检测失败
spoofing_control string 合成图控制
NONE: 不进行控制
LOW:较低的合成图阈值数值,由于合成图判定逻辑为大于阈值视为合成图攻击,该项代表低通过率、高攻击拒绝率
NORMAL: 一般的合成图阈值数值,由于合成图判定逻辑为大于阈值视为合成图攻击,该项代表平衡的攻击拒绝率, 通过率
HIGH: 较高的合成图阈值数值,由于合成图判定逻辑为大于阈值视为合成图攻击,该项代表高通过率、低攻击拒绝率)
默认为NONE
user_id string 当需要对特定用户进行比对时,指定user_id进行比对。即人脸认证功能。
max_user_num unit32 查找后返回的用户数量。返回相似度最高的几个用户,默认为1,最多返回50个。
face_sort_type int 人脸检测排序类型
0:代表检测出的人脸按照人脸面积从大到小排列
1:代表检测出的人脸按照距离图片中心从近到远排列
默认为0
match_threshold int 匹配阈值(设置阈值后,score低于此阈值的用户信息将不会返回) 最大100 最小0 默认0
此阈值设置得越高,检索速度将会越快,推荐使用阈值80

说明:如果使用base 64格式的图片,两张请求的图片请分别进行base64编码。

示例代码

提示一:使用示例代码前,请记得替换其中的示例Token、图片地址或Base64信息。

提示二:部分语言依赖的类或库,请在代码注释中查看下载地址。

人脸搜索
curl -i -k 'https://aip.baidubce.com/rest/2.0/face/v3/search?access_token=【调用鉴权接口获取的token】' --data '{"image":"027d8308a2ec665acb1bdf63e513bcb9","image_type":"FACE_TOKEN","group_id_list":"group_repeat,group_233","quality_control":"LOW","liveness_control":"NORMAL"}' -H 'Content-Type:application/json; charset=UTF-8'
<?php
/**
 * 发起http post请求(REST API), 并获取REST请求的结果
 * @param string $url
 * @param string $param
 * @return - http response body if succeeds, else false.
 */
function request_post($url = '', $param = '')
{
    if (empty($url) || empty($param)) {
        return false;
    }

    $postUrl = $url;
    $curlPost = $param;
    // 初始化curl
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $postUrl);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    // 要求结果为字符串且输出到屏幕上
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    // post提交方式
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
    // 运行curl
    $data = curl_exec($curl);
    curl_close($curl);

    return $data;
}

$token = '[调用鉴权接口获取的token]';
$url = 'https://aip.baidubce.com/rest/2.0/face/v3/search?access_token=' . $token;
$bodys = "{\"image\":\"027d8308a2ec665acb1bdf63e513bcb9\",\"image_type\":\"FACE_TOKEN\",\"group_id_list\":\"group_repeat,group_233\",\"quality_control\":\"LOW\",\"liveness_control\":\"NORMAL\"}"
$res = request_post($url, $bodys);

var_dump($res);
package com.baidu.ai.aip;

import com.baidu.ai.aip.utils.HttpUtil;
import com.baidu.ai.aip.utils.GsonUtils;

import java.util.*;

/**
* 人脸搜索
*/
public class FaceSearch {

    /**
    * 重要提示代码中所需工具类
    * FileUtil,Base64Util,HttpUtil,GsonUtils请从
    * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
    * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
    * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
    * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
    * 下载
    */
    public static String faceSearch() {
        // 请求url
        String url = "https://aip.baidubce.com/rest/2.0/face/v3/search";
        try {
            Map<String, Object> map = new HashMap<>();
            map.put("image", "027d8308a2ec665acb1bdf63e513bcb9");
            map.put("liveness_control", "NORMAL");
            map.put("group_id_list", "group_repeat,group_233");
            map.put("image_type", "FACE_TOKEN");
            map.put("quality_control", "LOW");

            String param = GsonUtils.toJson(map);

            // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
            String accessToken = "[调用鉴权接口获取的token]";

            String result = HttpUtil.post(url, accessToken, "application/json", param);
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        FaceSearch.faceSearch();
    }
}
# encoding:utf-8

import requests

'''
人脸搜索
'''

request_url = "https://aip.baidubce.com/rest/2.0/face/v3/search"

params = "{\"image\":\"027d8308a2ec665acb1bdf63e513bcb9\",\"image_type\":\"FACE_TOKEN\",\"group_id_list\":\"group_repeat,group_233\",\"quality_control\":\"LOW\",\"liveness_control\":\"NORMAL\"}"
access_token = '[调用鉴权接口获取的token]'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/json'}
response = requests.post(request_url, data=params, headers=headers)
if response:
    print (response.json())
#include <iostream>
#include <curl/curl.h>

// libcurl库下载链接:https://curl.haxx.se/download.html
// jsoncpp库下载链接:https://github.com/open-source-parsers/jsoncpp/
const static std::string request_url = "https://aip.baidubce.com/rest/2.0/face/v3/search";
static std::string faceSearch_result;
/**
 * curl发送http请求调用的回调函数,回调函数中对返回的json格式的body进行了解析,解析结果储存在全局的静态变量当中
 * @param 参数定义见libcurl文档
 * @return 返回值定义见libcurl文档
 */
static size_t callback(void *ptr, size_t size, size_t nmemb, void *stream) {
    // 获取到的body存放在ptr中,先将其转换为string格式
    faceSearch_result = std::string((char *) ptr, size * nmemb);
    return size * nmemb;
}
/**
 * 人脸搜索
 * @return 调用成功返回0,发生错误返回其他错误码
 */
int faceSearch(std::string &json_result, const std::string &access_token) {
    std::string url = request_url + "?access_token=" + access_token;
    CURL *curl = NULL;
    CURLcode result_code;
    int is_success;
    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url.data());
        curl_easy_setopt(curl, CURLOPT_POST, 1);
        curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Content-Type:application/json;charset=UTF-8");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"image\":\"027d8308a2ec665acb1bdf63e513bcb9\",\"image_type\":\"FACE_TOKEN\",\"group_id_list\":\"group_repeat,group_233\",\"quality_control\":\"LOW\",\"liveness_control\":\"NORMAL\"}");
        result_code = curl_easy_perform(curl);
        if (result_code != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
                    curl_easy_strerror(result_code));
            is_success = 1;
            return is_success;
        }
        json_result = faceSearch_result;
        curl_easy_cleanup(curl);
        is_success = 0;
    } else {
        fprintf(stderr, "curl_easy_init() failed.");
        is_success = 1;
    }
    return is_success;
}
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Web;

namespace com.baidu.ai
{
    public class FaceSearch
    {
        // 人脸搜索
        public static string faceSearch()
        {
            string token = "[调用鉴权接口获取的token]";
            string host = "https://aip.baidubce.com/rest/2.0/face/v3/search?access_token=" + token;
            Encoding encoding = Encoding.Default;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
            request.Method = "post";
            request.KeepAlive = true;
            String str = "{\"image\":\"027d8308a2ec665acb1bdf63e513bcb9\",\"image_type\":\"FACE_TOKEN\",\"group_id_list\":\"group_repeat,group_233\",\"quality_control\":\"LOW\",\"liveness_control\":\"NORMAL\"}";
            byte[] buffer = encoding.GetBytes(str);
            request.ContentLength = buffer.Length;
            request.GetRequestStream().Write(buffer, 0, buffer.Length);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
            string result = reader.ReadToEnd();
            Console.WriteLine("人脸搜索:");
            Console.WriteLine(result);
            return result;
        }
    }
}

返回说明

返回参数

  • 返回结果
字段 必选 类型 说明
face_token string 人脸图片的唯一标识(有效期60min)。此token由用于搜索的人脸图片生成,非搜索到的人脸face_token
user_list array 匹配的用户信息列表
+group_id string 用户所属的group_id
+user_id string 用户的user_id
+user_info string 注册用户时携带的user_info
+score float 用户的匹配得分,推荐阈值80分
  • 返回示例
  {
    "face_token": "fid",
    "user_list": [  
       {
          "group_id" : "test1",
          "user_id": "u333333",
          "user_info": "Test User",
          "score": 99.3  
      }
    ]
  }
  • 质量控制参数说明

不同的控制度下所对应的质量控制阈值,如果检测出来的质量信息某一项不符合控制阈值的要求,则会返回错误信息。

遮挡情况的阈值

控制度 left_eye right_eye nose mouth left_cheek right_cheek chin_contour
LOW 0.8 0.8 0.8 0.8 0.8 0.8 0.8
NORMAL 0.6 0.6 0.6 0.6 0.6 0.6 0.6
HIGH 0.2 0.2 0.2 0.2 0.2 0.2 0.2

模糊度、完整度的阈值

控制度 illumination blurdegree completeness
LOW 20 0.8 0
NORMAL 40 0.6 0
HIGH 100 0.2 1

活体控制参数说明

不同的控制度下所对应的活体控制阈值,如果检测出来的活体分数小于控制阈值,则会返回错误信息。

控制度 阈值 说明
LOW 0.05 活体误拒率:万分之一;拒绝率:63.9%
NORMAL 0.3 活体误拒率:千分之一;拒绝率:90.3%
HIGH 0.9 活体误拒率:百分之一;拒绝率:97.6%

1、误拒率: 把真人识别为假人的概率. 阈值越高,安全性越高, 要求也就越高, 对应的误识率就越高 2、通过率=1-误拒率

关于以上数值的概念介绍:

拒绝率(TRR):如99%,代表100次作弊假体攻击,会有99次被拒绝。 误拒率(FRR):如0.5%,指1000次真人请求,会有5次因为活体分数低于阈值被错误拒绝。 通过率(TAR):如99%,指100次真人请求,会有99次因为活体分数高于阈值而通过。 阈值(Threshold):高于此数值,则可判断为活体。

合成图控制参数说明

不同的控制度下所对应的合成图检测(PS、人脸融合等)阈值,如果检测出来的分数大于控制阈值,则会返回错误信息。

控制度 阈值 误拒率(FRR) 通过率 攻击拒绝率(TRR))
LOW 0.00023 5% 95% 94.93%
NORMAL(推荐) 0.00048 1% 99% 89.71%
HIGH 0.00109 0.1% 99.9% 84.57%

1、误拒率:把正常图片识别为合成图片的概率。阈值越低,安全性越高,要求也就越高,对应的误识率就越高。 2、通过率=1-误拒率

关于以上数值的概念介绍:

阈值(Threshold):高于此数值,则可判断为是合成图攻击。

错误码

  • 接口流控及鉴权错误码
错误码 错误信息 描述 处理建议
2 Service temporarily unavailable 服务暂不可用 服务暂不可用,请再次请求,如果持续出现此类错误,请在控制台提交工单联系技术支持团队
4 Open api request limit reached 集群超限额 集群超限额,请再次请求,如果持续出现此类错误,请在控制台提交工单联系技术支持团队
6 no permission to access data 没有接口权限 请确认您调用的接口已经被赋权
常见问题是有V3版本权限,调用的是v2版本接口;
需要企业认证的,开通企业认证后一个小时左右即可使用。
17 Open api daily request limit reached 每天流量超限额 免费测试资源使用完毕,每天请求量超限额,已支持计费的接口,您可以在控制台人脸识别选择购买相关接口的次数包或开通按量后付费;邀测和未支持计费的接口,您可以在控制台提交工单申请提升限额
18 Open api qps request limit reached QPS超限额 可直接自助购买更多QPS、联系商务接口人、或者提交工单
19 Open api total request limit reached 请求总量超限额 免费测试资源使用完毕,每天请求量超限额,已支持计费的接口,您可以在控制台人脸识别选择购买相关接口的次数包或开通按量后付费;邀测和未支持计费的接口,您可以在控制台提交工单申请提升限额
100 Invalid parameter 无效的access_token参数 token拉取失败,可以参考“Access Token获取”重新获取
110 Access token invalid or no longer valid Access Token失效 token有效期为30天,注意需要定期更换,也可以每次请求都拉取新token
111 Access token expired Access token过期 token有效期为30天,注意需要定期更换,也可以每次请求都拉取新token
  • 人脸1:N搜索错误码
错误码 错误信息 描述 处理建议
222200 request body should be json format 1:请求体不是有效的JSON对象
2:请求体中字段参数值数据类型与接口文档要求不符
参考API文档说明,修改请求参数
222013 param[group_id_list] format error 参数格式错误 参考API文档说明,修改请求参数
222013 param[image] format error 参数格式错误 参考API文档说明,修改请求参数
222015 param[image_type] format error 参数格式错误 参考API文档说明,修改请求参数
222018 param[user_id] format error 参数格式错误 参考API文档说明,修改请求参数
222019 param[quality_control] format error 参数格式错误 参考API文档说明,修改请求参数
222020 param[liveness_control] format error 参数格式错误 参考API文档说明,修改请求参数
222021 param[max_user_num] format error 参数格式错误 参考API文档说明,修改请求参数
222030 param[match_threshold] format error 参数格式错误 参考API文档说明,修改请求参数
222039 param[face_sort_type] format error] 参数格式错误 参考API文档说明,修改请求参数
222201 param[scene_type] format error 请求参数scene_type 格式错误 请检查请求参数
222202 pic not has face 图片中没有人脸 检查图片质量,确保存在人脸
222203 image check fail 图片无法解析人脸 检查图片质量
222204 image download fail 从图片的url下载图片失败 确认图片 URL 公网可访问(没有白名单限制)
222207 match user is not found 未找到匹配的用户 请确认人脸库中是否存在此用户
222209 face token not exist face token不存在 请确认您操作的人脸已创建成功。
若face_token未注册到人脸库则有效期只有1小时
若注册到人脸库的face_token永久有效
222301 get face fail 获取人脸失败
备注:image_type为FACE_TOKEN模式时才会出现
请重试请求,如果持续出现此类错误,请提交工单
222304 image size is too large 图片尺寸太大 请确保图片尺寸不超过 6000 x 6000
223113 face is covered 人脸有被遮挡 提示用户请勿遮挡面部
223114 face is fuzzy 人脸模糊 提示用户请勿在拍摄人脸照时晃动手机
223115 face light is not good 人脸光照不好 提示用户到光线适宜的地方拍摄
223116 incomplete face 人脸不完整 提示用户将完整人脸移入框内
223120 liveness check fail 图片人脸活体检测未通过 此图人脸活体检测结果为非活体
223121 left eye is occlusion 质量检测未通过,左眼遮挡程度过高 提示用户请勿遮挡左眼
223122 right eye is occlusion 质量检测未通过,右眼遮挡程度过高 提示用户请勿遮挡右眼
223123 left cheek is occlusion 质量检测未通过,左脸遮挡程度过高 提示用户请勿遮挡左脸颊
223124 right cheek is occlusion 质量检测未通过,右脸遮挡程度过高 提示用户请勿遮挡右脸颊
223125 chin contour is occlusion 质量检测未通过,下巴遮挡程度过高 提示用户请勿遮挡下巴
223126 nose is occlusion 质量检测未通过,鼻子遮挡程度过高 提示用户请勿遮挡鼻子
223127 mouth is occlusion 质量检测未通过,嘴巴遮挡程度过高 提示用户请勿遮挡嘴巴
223129 face not forward 人脸未面向正前方(人脸角度超出限制) 请使用面向正前方的人脸图片
222915 system busy 后端服务连接失败 请重试请求,若尝试多次无效,请提交工单咨询
222205 network not availablel 服务端请求失败 请重试请求,若尝试多次无效,请提交工单咨询
222206 rtse service return fail 服务端请求失败 请重试请求,若尝试多次无效,请提交工单咨询
上一篇
人脸1:1对比
下一篇
人脸M:N搜索