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

    人脸检测

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

    辨别接口版本的方法是:在百度云后台进入【应用列表】,点击【应用名称】,在【API列表】中可以看到【请求地址】,若请求地址中带有【v3】标识,则您具有的是v3权限,可以阅读本文档;若请求地址中带有【v2】标识,则您具有的是v2权限,应该去阅读v2文档。 如果您对文档内容有任何疑问,可以通过以下几种方式联系我们:

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

    能力介绍

    接口能力

    • 人脸检测:检测图片中的人脸并标记出位置信息;
    • 人脸关键点:展示人脸的核心关键点信息,及150个关键点信息。
    • 人脸属性值:展示人脸属性信息,如年龄、性别等。
    • 人脸质量信息:返回人脸各部分的遮挡、光照、模糊、完整度、置信度等信息。

    业务应用

    典型应用场景:如人脸属性分析基于人脸关键点的加工分析人脸营销活动等。

    说明:检测响应速度,与图片中人脸数量相关,人脸数量较多时响应时间会有些许延长。

    质量检测

    如果需要判断一张图片中的人脸,是否符合后续识别或者对比的条件,可以使用此接口,在请求时在face_field参数中请求quality。基于返回结果quality中,以下字段及对应阈值,进行质量检测的判断,以保证人脸质量符合后续业务操作要求。

    指标 字段与解释 推荐数值界限
    遮挡范围 occlusion,取值范围[0~1],0为无遮挡,1是完全遮挡
    含有多个具体子字段,表示脸部多个部位
    通常用作判断头发、墨镜、口罩等遮挡
    left_eye : 0.6, #左眼被遮挡的阈值
    right_eye : 0.6, #右眼被遮挡的阈值
    nose : 0.7, #鼻子被遮挡的阈值
    mouth : 0.7, #嘴巴被遮挡的阈值
    left_cheek : 0.8, #左脸颊被遮挡的阈值
    right_cheek : 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像素

    调用方式

    请求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/v1/merge?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两个版本,本文档为V3版本接口的说明文档,请确认您在百度云后台获得的是V3版本接口权限,再来阅读本文档。

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

    请求示例

    HTTP方法:POST

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

    URL参数:

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

    Header:

    参数
    Content-Type application/json

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

    请求参数

    参数 必选 类型 说明
    image string 图片信息(总数据大小应小于10M),图片上传方式根据image_type来判断
    image_type string 图片类型
    BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;
    URL:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长);
    FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个。
    face_field string 包括age,beauty,expression,face_shape,gender,glasses,landmark,landmark150,
    quality,eye_status,emotion,face_type,mask,spoofing信息

    逗号分隔. 默认只返回face_token、人脸框、概率和旋转角度
    max_face_num uint32 最多处理人脸的数目,默认值为1,根据人脸检测排序类型检测图片中排序第一的人脸(默认为人脸面积最大的人脸),最大值120
    face_type string 人脸的类型
    LIVE表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等
    IDCARD表示身份证芯片照:二代身份证内置芯片中的人像照片
    WATERMARK表示带水印证件照:一般为带水印的小图,如公安网小图
    CERT表示证件照片:如拍摄的身份证、工卡、护照、学生证等证件图片
    默认LIVE
    liveness_control string 活体控制 检测结果中不符合要求的人脸会被过滤
    NONE: 不进行控制
    LOW:较低的活体要求(高通过率 低攻击拒绝率)
    NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率)
    HIGH: 较高的活体要求(高攻击拒绝率 低通过率)
    默认NONE
    face_sort_type int 人脸检测排序类型
    0:代表检测出的人脸按照人脸面积从大到小排列
    1:代表检测出的人脸按照距离图片中心从近到远排列
    默认为0

    说明:face_field参数,默认只返回人脸框、概率和旋转角度,age等更多属性,请在此参数中添加。

    示例代码

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

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

    人脸检测与属性分析
    curl -i -k 'https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=【调用鉴权接口获取的token】' --data '{"image":"027d8308a2ec665acb1bdf63e513bcb9","image_type":"FACE_TOKEN","face_field":"faceshape,facetype"}' -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/detect?access_token=' . $token;
    $bodys = "{\"image\":\"027d8308a2ec665acb1bdf63e513bcb9\",\"image_type\":\"FACE_TOKEN\",\"face_field\":\"faceshape,facetype\"}"
    $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 FaceDetect {
    
        /**
        * 重要提示代码中所需工具类
        * 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 faceDetect() {
            // 请求url
            String url = "https://aip.baidubce.com/rest/2.0/face/v3/detect";
            try {
                Map<String, Object> map = new HashMap<>();
                map.put("image", "027d8308a2ec665acb1bdf63e513bcb9");
                map.put("face_field", "faceshape,facetype");
                map.put("image_type", "FACE_TOKEN");
    
                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) {
            FaceDetect.faceDetect();
        }
    }
    # encoding:utf-8
    
    import requests
    
    '''
    人脸检测与属性分析
    '''
    
    request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"
    
    params = "{\"image\":\"027d8308a2ec665acb1bdf63e513bcb9\",\"image_type\":\"FACE_TOKEN\",\"face_field\":\"faceshape,facetype\"}"
    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/detect";
    static std::string faceDetect_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格式
        faceDetect_result = std::string((char *) ptr, size * nmemb);
        return size * nmemb;
    }
    /**
     * 人脸检测与属性分析
     * @return 调用成功返回0,发生错误返回其他错误码
     */
    int faceDetect(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\",\"face_field\":\"faceshape,facetype\"}");
            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 = faceDetect_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 FaceDetect
        {
            // 人脸检测与属性分析
            public static string faceDetect()
            {
                string token = "[调用鉴权接口获取的token]";
                string host = "https://aip.baidubce.com/rest/2.0/face/v3/detect?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\",\"face_field\":\"faceshape,facetype\"}";
                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_num int 检测到的图片中的人脸数量
    face_list array 人脸信息列表,具体包含的参数参考下面的列表。
    +face_token string 人脸图片的唯一标识 (人脸检测face_token有效期为60min)
    +location array 人脸在图片中的位置
    ++left double 人脸区域离左边界的距离
    ++top double 人脸区域离上边界的距离
    ++width double 人脸区域的宽度
    ++height double 人脸区域的高度
    ++rotation int64 人脸框相对于竖直方向的顺时针旋转角,[-180,180]
    +face_probability double 人脸置信度,范围【0~1】,代表这是一张人脸的概率,0最小、1最大。其中返回0或1时,数据类型为Integer
    +angle array 人脸旋转角度参数
    ++yaw double 三维旋转之左右旋转角[-90(左), 90(右)]
    ++pitch double 三维旋转之俯仰角度[-90(上), 90(下)]
    ++roll double 平面内旋转角[-180(逆时针), 180(顺时针)]
    +age double 年龄 ,当face_field包含age时返回
    +beauty int64 美丑打分,范围0-100,越大表示越美。当face_fields包含beauty时返回
    +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代表最大。
    +eye_status array 双眼状态(睁开/闭合) face_field包含eye_status时返回
    ++left_eye double 左眼状态 [0,1]取值,越接近0闭合的可能性越大
    ++right_eye double 右眼状态 [0,1]取值,越接近0闭合的可能性越大
    +emotion array 情绪 face_field包含emotion时返回
    ++type string angry:愤怒 disgust:厌恶 fear:恐惧 happy:高兴 sad:伤心 surprise:惊讶 neutral:无表情 pouty: 撅嘴 grimace:鬼脸
    ++probability double 情绪置信度,范围0~1
    +face_type array 真实人脸/卡通人脸 face_field包含face_type时返回
    ++type string human: 真实人脸 cartoon: 卡通人脸
    ++probability double 人脸类型判断正确的置信度,范围【0~1】,0代表概率最小、1代表最大。
    +mask array 口罩识别 face_field包含mask时返回
    ++type int 没戴口罩/戴口罩 取值0或1 0代表没戴口罩 1 代表戴口罩
    ++probability double 置信度,范围0~1
    +landmark array 4个关键点位置,左眼中心、右眼中心、鼻尖、嘴中心。face_field包含landmark时返回
    +landmark72 array 72个特征点位置 face_field包含landmark72时返回
    +landmark150 array 150个特征点位置 face_field包含landmark150时返回
    +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 判断图片是否为合成图

    关于合成图检测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%

    关于以上数值的概念介绍

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

      {	
        "face_num": 1,
        "face_list": [
              {
                  "face_token": "35235asfas21421fakghktyfdgh68bio",
                  "location": { 
                      "left": 117,
                      "top": 131,
                      "width": 172,
                      "height": 170,
                      "rotation": 4
                  },
                  "face_probability": 1,
                  "angle" :{
                       "yaw" : -0.34859421849251
                       "pitch" 1.9135693311691  
                       "roll" :2.3033397197723  
                  }
                  "landmark": [  
                      {
                          "x": 161.74819946289,
                          "y": 163.30244445801
                      },
                      ...
                  ],
                  "landmark72": [ 
                      {
                          "x": 115.86531066895,
                          "y": 170.0546875
                      },
                      ...
                  ],
                  "age": 29.298097610474,
                  "beauty": 55.128883361816,
                  "expression": {
                      "type": "smile",
                      "probability" : 0.5543018579483
                  },
                  "gender": {
                      "type": "male",
                      "probability": 0.99979132413864
                  },
                  "glasses": {
          			"type": "sun",
                      "probability": 0.99999964237213
                  },
             
                  "face_shape": {
                      "type": "triangle",
                      "probability": 0.5543018579483
                  }
                  "quality": {
                      "occlusion": {
                          "left_eye": 0,
                          "right_eye": 0,
                          "nose": 0,
                          "mouth": 0,
                          "left_cheek": 0.0064102564938366,
                          "right_cheek": 0.0057411273010075,
                          "chin": 0
                      },
                      "blur": 1.1886881756684e-10,
                      "illumination": 141,
                      "completeness": 1
                  }
              }
          ]
      }

    72个关键点分布图(对应landmark72个点的顺序,序号从0-71)

    150个关键点分布图,红色关键点为在72关键点基础上增加的关键点(对应landmark150个点的顺序,序号从0-149,且每个关键点有对应的英文命名作为参数名,请参考图片下方表格):

    关键点名称如下图,

    错误码

    请参考人脸识别错误码

    上一篇
    应用技巧
    下一篇
    人脸对比