开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
人脸识别

    明镜在线图片活体

    人脸识别接口分为V2、V3、V4三个版本,本文档为V4版本接口的说明文档,请确认您在百度云后台获得的是V4版本接口权限,再来阅读本文档。

    辨别接口版本的方法是:在百度云后台进入【应用列表】,点击【应用名称】,在【API列表】中可以看到【请求地址】,若请求地址中带有【v4】标识,则您具有的是v4权限,可以阅读本文档;若请求地址中带有【v3】标识,则您具有的是v3权限,应该去阅读v3文档

    如果您对文档内容有任何疑问,可以通过以下几种方式联系我们:

    • 在百度云控制台内 提交工单,咨询问题类型请选择人工智能服务
    • 如有需要讨论的疑问,欢迎进入 AI社区 与其他开发者们一同交流。

    能力介绍

    接口能力

    • 人脸基础信息:包括人脸框位置,人脸空间旋转角度,人脸置信度等信息。
    • 人脸质量检测:判断人脸的遮挡、光照、模糊度、完整度等质量信息。可用于判断上传的人脸是否符合标准。
    • 基于图片的活体检测:基于单张图片,判断图片中的人脸是否为二次翻拍(举例:如用户A用手机拍摄了一张包含人脸的图片一,用户B翻拍了图片一得到了图片二,并用图片二伪造成用户A去进行识别操作,这种情况普遍发生在金融开户、实名认证等环节)以及是否为合成图攻击。此能力可用于H5场景下的一些人脸采集场景中,增加人脸注册的安全性和真实性。
    • 图片加密及风控:当配合增强级采集SDK、增强级安全加固采集SDK、金融级采集SDK、金融级安全加固采集SDK版本使用,对采集SDK输出的加密图片进行解密(加密传输可以有效避免第三方非法黑产绕过APP模拟请求攻击云端接口的行为,Eg:脚本攻击等); 以及结合百度安全实验室大数据风控能力,对采集SDK的发起端设备进行风控识别,辨别是否为风险设备,Eg:ROM注入、视频劫持等;

    调用方式

    请求URL数据格式

    向API服务地址使用POST发送请求,必须在URL中带上参数access_token,可通过后台的API Key和Secret Key生成,具体方式请参考“Access Token获取”。

    示例代码

    #!/bin/bash
    curl -i -k 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【百度云应用的AK】&client_secret=【百度云应用的SK】'
    <?php
    function request_post($url = '', $param = '') {
            if (empty($url) || empty($param)) {
                return false;
            }
            
            $postUrl = $url;
            $curlPost = $param;
            $curl = curl_init();//初始化curl
            curl_setopt($curl, CURLOPT_URL,$postUrl);//抓取指定网页
            curl_setopt($curl, CURLOPT_HEADER, 0);//设置header
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
            curl_setopt($curl, CURLOPT_POST, 1);//post提交方式
            curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
            $data = curl_exec($curl);//运行curl
            curl_close($curl);
            
            return $data;
        }
    
        $url = 'https://aip.baidubce.com/oauth/2.0/token';
        $post_data['grant_type']       = 'client_credentials';
        $post_data['client_id']      = '你的 Api Key';
        $post_data['client_secret'] = '你的 Secret Key';
        $o = "";
        foreach ( $post_data as $k => $v ) 
        {
            $o.= "$k=" . urlencode( $v ). "&" ;
        }
        $post_data = substr($o,0,-1);
        
        $res = request_post($url, $post_data);
    
        var_dump($res);
    
    ?>
    package com.baidu.ai.aip.auth;
    
    import org.json.JSONObject;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.List;
    import java.util.Map;
    
    /**
     * 获取token类
     */
    public class AuthService {
    
        /**
         * 获取权限token
         * @return 返回示例:
         * {
         * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",
         * "expires_in": 2592000
         * }
         */
        public static String getAuth() {
            // 官网获取的 API Key 更新为你注册的
            String clientId = "百度云应用的AK";
            // 官网获取的 Secret Key 更新为你注册的
            String clientSecret = "百度云应用的SK";
            return getAuth(clientId, clientSecret);
        }
    
        /**
         * 获取API访问token
         * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
         * @param ak - 百度云官网获取的 API Key
         * @param sk - 百度云官网获取的 Securet Key
         * @return assess_token 示例:
         * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
         */
        public static String getAuth(String ak, String sk) {
            // 获取token地址
            String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
            String getAccessTokenUrl = authHost
                    // 1. grant_type为固定参数
                    + "grant_type=client_credentials"
                    // 2. 官网获取的 API Key
                    + "&client_id=" + ak
                    // 3. 官网获取的 Secret Key
                    + "&client_secret=" + sk;
            try {
                URL realUrl = new URL(getAccessTokenUrl);
                // 打开和URL之间的连接
                HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
                connection.setRequestMethod("GET");
                connection.connect();
                // 获取所有响应头字段
                Map<String, List<String>> map = connection.getHeaderFields();
                // 遍历所有的响应头字段
                for (String key : map.keySet()) {
                    System.err.println(key + "--->" + map.get(key));
                }
                // 定义 BufferedReader输入流来读取URL的响应
                BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String result = "";
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
                /**
                 * 返回结果示例
                 */
                System.err.println("result:" + result);
                JSONObject jsonObject = new JSONObject(result);
                String access_token = jsonObject.getString("access_token");
                return access_token;
            } catch (Exception e) {
                System.err.printf("获取token失败!");
                e.printStackTrace(System.err);
            }
            return null;
        }
    
    }
     # encoding:utf-8
    import requests 
    
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
    response = requests.get(host)
    if response:
        print(response.json())
    #include <iostream>
    #include <curl/curl.h>
    #include <json/json.h>
    #include "access_token.h"
    // libcurl库下载链接:https://curl.haxx.se/download.html
    // jsoncpp库下载链接:https://github.com/open-source-parsers/jsoncpp/
    // 获取access_token所需要的url
    const std::string access_token_url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials";
    // 回调函数获取到的access_token存放变量
    // static std::string access_token_result;
    /**
     * curl发送http请求调用的回调函数,回调函数中对返回的json格式的body进行了解析,解析结果储存在result中
     * @param 参数定义见libcurl库文档
     * @return 返回值定义见libcurl库文档
     */
    static size_t callback(void *ptr, size_t size, size_t nmemb, void *stream) {
        // 获取到的body存放在ptr中,先将其转换为string格式
        std::string s((char *) ptr, size * nmemb);
        // 开始获取json中的access token项目
        Json::Reader reader;
        Json::Value root;
        // 使用boost库解析json
        reader.parse(s,root);
        std::string* access_token_result = static_cast<std::string*>(stream);
        *access_token_result = root["access_token"].asString();
        return size * nmemb;
    }
    
    /**
     * 用以获取access_token的函数,使用时需要先在百度云控制台申请相应功能的应用,获得对应的API Key和Secret Key
     * @param access_token 获取得到的access token,调用函数时需传入该参数
     * @param AK 应用的API key
     * @param SK 应用的Secret key
     * @return 返回0代表获取access token成功,其他返回值代表获取失败
     */
    int get_access_token(std::string &access_token, const std::string &AK, const std::string &SK) {
        CURL *curl;
        CURLcode result_code;
        int error_code = 0;
        curl = curl_easy_init();
        if (curl) {
            std::string url = access_token_url + "&client_id=" + AK + "&client_secret=" + SK;
            curl_easy_setopt(curl, CURLOPT_URL, url.data());
            curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
            curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
            std::string access_token_result;
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &access_token_result);
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
            result_code = curl_easy_perform(curl);
            if (result_code != CURLE_OK) {
                fprintf(stderr, "curl_easy_perform() failed: %s\n",
                        curl_easy_strerror(result_code));
                return 1;
            }
            access_token = access_token_result;
            curl_easy_cleanup(curl);
            error_code = 0;
        } else {
            fprintf(stderr, "curl_easy_init() failed.");
            error_code = 1;
        }
        return error_code;
    }
    using System;
    using System.Collections.Generic;
    using System.Net.Http;
    
    namespace com.baidu.ai
    {
        public static class AccessToken
    
        {
            // 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
            // 返回token示例
            public static String TOKEN = "24.adda70c11b9786206253ddb70affdc46.2592000.1493524354.282335-1234567";
    
            // 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务
            private static String clientId = "百度云应用的AK";
            // 百度云中开通对应服务应用的 Secret Key
            private static String clientSecret = "百度云应用的SK";
    
            public static String getAccessToken() {
                String authHost = "https://aip.baidubce.com/oauth/2.0/token";
                HttpClient client = new HttpClient();
                List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
                paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
                paraList.Add(new KeyValuePair<string, string>("client_id", clientId));
                paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret));
    
                HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
                String result = response.Content.ReadAsStringAsync().Result;
                Console.WriteLine(result);
                return result;
            }
        }
    }
    var https = require('https');
    var qs = require('querystring');
    
    const param = qs.stringify({
        'grant_type': 'client_credentials',
        'client_id': '您的 Api Key',
        'client_secret': '您的 Secret Key'
    });
    
    https.get(
        {
            hostname: 'aip.baidubce.com',
            path: '/oauth/2.0/token?' + param,
            agent: false
        },
        function (res) {
            // 在标准输出中查看运行结果
            res.pipe(process.stdout);
        }
    );

    注意access_token的有效期为30天,切记需要每30天进行定期更换,或者每次请求都拉取新token

    例如此接口,使用HTTPS POST发送:

    https://aip.baidubce.com/rest/2.0/face/v4/faceverify?access_token=24.f9ba9c5341b67688ab4added8bc91dec.2592000.1485570332.282335-8574074

    POST中Body的参数,按照下方请求参数说明选择即可。

    提示:如果您为百度云老用户,正在使用其他非AI的服务,可以参考百度云AKSK鉴权方式发送请求,虽然请求方式鉴权方法和本文所介绍的不同,但请求参数和返回结果一致。

    请求说明

    注意事项

    • 请求体格式化:Content-Type为application/json,通过json格式化请求体。
    • Base64编码:请求的图片需经过Base64编码,图片的base64编码指将图片数据编码成一串字符串,使用该字符串代替图像地址。您可以首先得到图片的二进制,然后用Base64格式编码即可。需要注意的是,图片的base64编码是不包含图片头的,如data:image/jpg;base64,
    • 图片格式:现支持PNG、JPG、JPEG、BMP,不支持GIF图片
    • 人脸识别接口分为V2和V3、V4三个版本,本文档为V4版本接口的说明文档,请确认您在百度云后台获得的是V4版本接口权限,再来阅读本文档。

    辨别接口版本的方法是:在百度云后台进入【应用列表】,点击【应用名称】,在【API列表】中可以看到【请求地址】,若请求地址中带有【v4】标识,则您具有的是v4权限,可以阅读本文档;若请求地址中带有【v3】标识,则您具有的是v3权限,应该去阅读v3文档。

    请求示例

    HTTP方法:POST

    请求URL: https://aip.baidubce.com/rest/2.0/face/v4/faceverify

    URL参数:

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

    Header:

    参数
    Content-Type application/json

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

    请求参数

    参数 是否必选 类型 说明
    sdk_version string 1 :非加密图片,适用于标准级sdk、H5场景或纯服务端场景
    2 :非安全加固增强级采集sdk、非安全加固金融级采集sdk
    3 :安全加固增强级采集sdk、安全加固金融级采集sdk
    face_field string 包括age,beauty,expression,face_shape,gender,glasses,landmark,quality,face_type,spoofing信息,逗号分隔,默认只返回face_token、活体数、人脸框、概率和旋转角度
    option string 场景信息,程序会视不同的场景选用相对应的模型。当前支持的场景有COMMON(通用场景),GATE(闸机场景),FINANCE(金融场景),LOGISTICS(物流场景),INTERNET(泛互联网场景), 默认使用COMMON 。注意:如果请求参数中存在多个option值时,则取第一个option的值,同时除通用场景外的其他场景需要联系工作人员对您所使用的appid进行配置
    app string 端类型 ios / android
    非安全加固增强级采集sdk、非安全加固金融级采集sdk、安全加固增强级采集sdk、安全加固金融级采集sdk必传该项
    s_key string 端上提供的用于解密图片的skey
    安全加固增强级采集sdk、安全加固金融级采集sdk必传该项
    device_id string 端上提供的用于解密图片的deviceId
    安全加固增强级采集sdk、安全加固金融级采集sdk必传该项
    data string 加固版端上提供的加密后的图片数组
    安全加固增强级采集sdk、安全加固金融级采集sdk必传该项
    scene string 采集sdk的级别,默认增强级
    "" : 增强级
    "financial_level" : 金融级
    image_list array 图片BASE64数组
    标准级sdk、H5场景或纯服务端场景非加密图片和非安全加固增强级采集sdk、非安全加固金融级采集sdk必填
    zid string 风控参数,安全SDK唯一标识ZID
    非安全加固增强级采集sdk、非安全加固金融级采集sdk、安全加固增强级采集sdk、安全加固金融级采集sdk必传该项
    phone string 风控参数,手机号
    非安全加固增强级采集sdk、非安全加固金融级采集sdk、安全加固增强级采集sdk、安全加固金融级采集sdk必传该项

    返回参数

    参数 是否必须 类型 说明
    log_id string 日志id
    error_code int 错误码状态,若为0则表示认证成功
    error_msg string 错误码说明,若为 success 则表示认证成功
    result object 活体结果
    +face_liveness float 活体分数值
    +thresholds array 由服务端返回最新的阈值数据(随着模型的优化,阈值可能会变化),将此参数与返回的face_liveness进行比较,可以作为活体判断的依据。
    frr_1e-4:万分之一误识率的阈值;
    frr_1e-3:千分之一误识率的阈值;
    frr_1e-2:百分之一误识率的阈值。
    误识率越低,准确率越高,相应的拒绝率也越高
    +face_list array 每张图片的详细信息描述,如果只上传一张图片,则只返回一个结果。
    ++face_token string 人脸图片的唯一标识
    ++location array 人脸在图片中的位置
    +++left double 人脸区域离左边界的距离
    +++top double 人脸区域离上边界的距离
    +++width double 人脸区域的宽度
    +++height double 人脸区域的高度
    +++rotation int64 人脸框相对于竖直方向的顺时针旋转角,[-180,180]
    ++face_probability double 人脸置信度,范围【0~1】,代表这是一张人脸的概率,0最小、1最大。
    ++angel array 人脸旋转角度参数
    +++yaw double 三维旋转之左右旋转角[-90(左), 90(右)]
    +++pitch double 三维旋转之俯仰角度[-90(上), 90(下)]
    +++roll double 平面内旋转角[-180(逆时针), 180(顺时针)]
    ++age double 年龄 ,当face_field包含age时返回
    ++expression array 表情,当 face_field包含expression时返回
    +++type string none:不笑;smile:微笑;laugh:大笑
    +++probability double 表情置信度,范围【0~1】,0最小、1最大。
    ++face_shape array 脸型,当face_field包含face_shape时返回
    +++type double square: 正方形 triangle:三角形 oval: 椭圆 heart: 心形 round: 圆形
    +++probability double 置信度,范围【0~1】,代表这是人脸形状判断正确的概率,0最小、1最大。
    ++gender array 性别,face_field包含gender时返回
    +++type string male:男性 female:女性
    +++probability double 性别置信度,范围【0~1】,0代表概率最小、1代表最大。
    ++glasses array 是否带眼镜,face_field包含glasses时返回
    ++type string none:无眼镜,common:普通眼镜,sun:墨镜
    +++probability double 眼镜置信度,范围【0~1】,0代表概率最小、1代表最大。
    ++face_type array 真实人脸/卡通人脸 face_field包含face_type时返回
    +++type string human: 真实人脸 cartoon: 卡通人脸
    +++probability double 人脸类型判断正确的置信度,范围【0~1】,0代表概率最小、1代表最大。
    ++landmark array 4个关键点位置,左眼中心、右眼中心、鼻尖、嘴中心。face_field包含landmark时返回
    ++landmark72 array 72个特征点位置 face_field包含landmark时返回
    ++quality array 人脸质量信息。face_field包含quality时返回
    +++occlusion array 人脸各部分遮挡的概率,范围[0~1],0表示完整,1表示不完整
    ++++left_eye double 左眼遮挡比例,[0-1] , 1表示完全遮挡
    ++++right_eye double 右眼遮挡比例,[0-1] , 1表示完全遮挡
    ++++nose double 鼻子遮挡比例,[0-1] , 1表示完全遮挡
    ++++mouth double 嘴巴遮挡比例,[0-1] , 1表示完全遮挡
    ++++left_cheek double 左脸颊遮挡比例,[0-1] , 1表示完全遮挡
    ++++right_cheek double 右脸颊遮挡比例,[0-1] , 1表示完全遮挡
    ++++chin double 下巴遮挡比例,,[0-1] , 1表示完全遮挡
    +++blur double 人脸模糊程度,范围[0~1],0表示清晰,1表示模糊
    +++illumination double 取值范围在[0~255], 表示脸部区域的光照程度 越大表示光照越好
    +++completeness int64 人脸完整度,0或1, 0为人脸溢出图像边界,1为人脸都在图像边界内
    ++spoofing double 合成图打分 判断图片是否为合成图 face_field包含时返回spoofing
    risk_level string 判断设备是否发生过风险行为来判断风险级别,取值(数值有高到低):1 – 高危
    2 – 嫌疑
    3 – 普通
    4 – 正常
    risk_tag string 风险标签,若判断为有风险,则会有风险标签 json 数组告知风险类型
    dec_image array 非安全加固增强级采集sdk、非安全加固金融级采集sdk、安全加固增强级采集sdk、安全加固金融级采集sdk会返回解密后的原图

    返回示例

    {
        "result": {
            "thresholds": {
                "frr_1e-3": 0.3,
                "frr_1e-2": 0.9,
                "frr_1e-4": 0.05
            },
            "face_liveness": 0.1976952702,
            "face_list": [
                {
                    "liveness": {
                        "livemapscore": 0.1976952702
                    },
                    "angle": {
                        "roll": 0.31,
                        "pitch": -2.07,
                        "yaw": 0.85
                    },
                    "face_token": "abd1b4ce743099336cfed40193ff4944",
                    "location": {
                        "top": 161.74,
                        "left": 79.04,
                        "rotation": 1,
                        "width": 318,
                        "height": 333
                    },
                    "face_probability": 1
                },
                {
                    "liveness": {
                        "livemapscore": 0.1976952702
                    },
                    "angle": {
                        "roll": 0.31,
                        "pitch": -2.07,
                        "yaw": 0.85
                    },
                    "face_token": "abd1b4ce743099336cfed40193ff4944",
                    "location": {
                        "top": 161.74,
                        "left": 79.04,
                        "rotation": 1,
                        "width": 318,
                        "height": 333
                    },
                    "face_probability": 1
                },
                {
                    "liveness": {
                        "livemapscore": 0.1976952702
                    },
                    "angle": {
                        "roll": 0.31,
                        "pitch": -2.07,
                        "yaw": 0.85
                    },
                    "face_token": "abd1b4ce743099336cfed40193ff4944",
                    "location": {
                        "top": 161.74,
                        "left": 79.04,
                        "rotation": 1,
                        "width": 318,
                        "height": 333
                    },
                    "face_probability": 1
                },
                {
                    "liveness": {
                        "livemapscore": 0.1976952702
                    },
                    "angle": {
                        "roll": 0.31,
                        "pitch": -2.07,
                        "yaw": 0.85
                    },
                    "face_token": "abd1b4ce743099336cfed40193ff4944",
                    "location": {
                        "top": 161.74,
                        "left": 79.04,
                        "rotation": 1,
                        "width": 318,
                        "height": 333
                    },
                    "face_probability": 1
                },
                {
                    "liveness": {
                        "livemapscore": 0.1976952702
                    },
                    "angle": {
                        "roll": 0.31,
                        "pitch": -2.07,
                        "yaw": 0.85
                    },
                    "face_token": "abd1b4ce743099336cfed40193ff4944",
                    "location": {
                        "top": 161.74,
                        "left": 79.04,
                        "rotation": 1,
                        "width": 318,
                        "height": 333
                    },
                    "face_probability": 1
                },
                {
                    "liveness": {
                        "livemapscore": 0.1976952702
                    },
                    "angle": {
                        "roll": 0.31,
                        "pitch": -2.07,
                        "yaw": 0.85
                    },
                    "face_token": "abd1b4ce743099336cfed40193ff4944",
                    "location": {
                        "top": 161.74,
                        "left": 79.04,
                        "rotation": 1,
                        "width": 318,
                        "height": 333
                    },
                    "face_probability": 1
                },
                {
                    "liveness": {
                        "livemapscore": 0.1976952702
                    },
                    "angle": {
                        "roll": 0.31,
                        "pitch": -2.07,
                        "yaw": 0.85
                    },
                    "face_token": "abd1b4ce743099336cfed40193ff4944",
                    "location": {
                        "top": 161.74,
                        "left": 79.04,
                        "rotation": 1,
                        "width": 318,
                        "height": 333
                    },
                    "face_probability": 1
                },
                {
                    "liveness": {
                        "livemapscore": 0.1976952702
                    },
                    "angle": {
                        "roll": 0.31,
                        "pitch": -2.07,
                        "yaw": 0.85
                    },
                    "face_token": "abd1b4ce743099336cfed40193ff4944",
                    "location": {
                        "top": 161.74,
                        "left": 79.04,
                        "rotation": 1,
                        "width": 318,
                        "height": 333
                    },
                    "face_probability": 1
                }
            ]
        },
        "risk_level": "3",
        "log_id": 1423545654699779516,
        "risk_tag": [
            "空"
        ],
        "dec_image": [
                "/9j/4AAQ..."
        ]
    }

    活体阈值参考

    请务必在产品侧做好以下条件限制

    • 检测的图片为二次采集,即通过相机当场拍摄,确保时间及操作条件的约束;
    • SDK输出的多帧情况,只要这些帧中,任何一张通过了阈值,即可判断为活体,建议可用三帧情况
    • 推荐分值采用99.5%

    关于活体检测faceliveness的判断阈值选择,可参考以下数值信息

    阈值(Threshold) 误拒率(FRR) 通过率(TAR) 攻击拒绝率(TRR))
    0.05 0.01% 99.99% 97.75%
    0.1 0.05% 99.95% 98.33%
    0.3 (推荐 0.1% 99.9% 98.82%
    0.5 0.5% 99.5% 99.67%
    0.9 1% 99% 99.77%

    关于以上数值的概念介绍

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

    合成图阈值参考

    新推出合成图检测能力,在face_field字段中增加spoofing参数,进行判断,若spoofing分值高于合成图推荐阈值,则可判断为合成图攻击;此参数在face_liveness基础上进行合成图判断

    关于合成图检测spoofing的判断阈值选择,可参考以下数值信息

    阈值 误拒率(FRR) 通过率(TAR) 攻击拒绝率(TRR))
    0.00023 5% 95% 94.93%
    0.00048(推荐 1% 99% 89.71%
    0.00066 0.5% 99.5% 88.02%
    0.00109 0.1% 99.9% 84.57%
    0.00171 0.05% 99.95% 81.52%
    0.00547 0.01% 99.99% 65.52%
    • 阈值(Threshold):高于此数值,则可判断为是合成图攻击。

    质量检测参考

    指标 字段与解释 推荐数值界限
    遮挡范围 occlusion,取值范围[0~1],0为无遮挡,1是完全遮挡
    含有多个具体子字段,表示脸部多个部位
    通常用作判断头发、墨镜、口罩等遮挡
    left_eye : 0.6, #左眼被遮挡的阈值
    right_eye : 0.6, #右眼被遮挡的阈值
    nose : 0.7, #鼻子被遮挡的阈值
    mouth : 0.7, #嘴巴被遮挡的阈值
    left_check : 0.8, #左脸颊被遮挡的阈值
    right_check : 0.8, #右脸颊被遮挡的阈值
    chin_contour : 0.6, #下巴被遮挡阈值
    模糊度范围 blur,取值范围[0~1],0是最清晰,1是最模糊 小于0.7
    光照范围 illumination,取值范围[0~255]
    脸部光照的灰度值,0表示光照不好
    以及对应客户端SDK中,YUV的Y分量
    大于40
    姿态角度 Pitch:三维旋转之俯仰角度[-90(上), 90(下)]
    Roll:平面内旋转角[-180(逆时针), 180(顺时针)]
    Yaw:三维旋转之左右旋转角[-90(左), 90(右)]
    分别小于20度
    人脸完整度 completeness(0或1),0为人脸溢出图像边界,1为人脸都在图像边界内 视业务逻辑判断
    人脸大小 人脸部分的大小
    建议长宽像素值范围:80*80~200*200
    人脸部分不小于100*100像素

    人脸空间姿态角参考

    姿态角分为PitchRollYaw,用于表示人脸在空间三维坐标系内的角度,常用于判断识别角度的界限值。

    各角度阈值如下:

    Pitch:三维旋转之俯仰角度,范围:[-90(上), 90(下)],推荐俯仰角绝对值不大于20度;
    Roll:平面内旋转角,范围:[-180(逆时针), 180(顺时针)],推荐旋转角绝对值不大于20度;
    Yaw:三维旋转之左右旋转角,范围:[-90(左), 90(右)],推荐旋转角绝对值不大于20度;

    各角度范围示意图如下:

    从姿态角度来看,这三个值的绝对值越小越好,这样代表人脸足够正视前方,最利于实际注册/识别使用。

    错误码

    请参考人脸识别错误码

    上一篇
    明镜人脸对比
    下一篇
    人像特效API文档