人脸搜索与库管理 您所在的位置:网站首页 php如何调用百度云人脸识别接口信息文件 人脸搜索与库管理

人脸搜索与库管理

2024-06-09 06:17| 来源: 网络整理| 查看: 265

能力介绍

业务能力 人脸搜索与库管理主要用在人脸通用场景,采集照片与底库照片主要为生活照,通常通过手机、电脑、面板机等设备采集。如果您的照片主要由普通摄像头/抓拍机设备大角度俯拍采集获得,建议您使用场景化搜索服务,查看文档详情

人脸搜索:也称为1:N识别,在指定人脸集合中,找到最相似的人脸; 人脸搜索 M:N识别:也称为M:N识别,待识别图片中含有多个人脸时,在指定人脸集合中,找到这多个人脸分别最相似的人脸

人脸库管理相关接口,要完成1:N或者M:N识别,首先需要构建一个人脸库,用于存放所有人脸特征,相关接口如下:

人脸注册:向人脸库中添加人脸 人脸更新:更新人脸库中指定用户下的人脸信息 人脸删除:删除指定用户的某张人脸 用户信息查询:查询人脸库中某个用户的详细信息 获取用户人脸列表:获取某个用户组中的全部人脸列表 获取用户列表:查询指定用户组中的用户列表 复制用户:将指定用户复制到另外的人脸组 删除用户:删除指定用户 创建用户组:创建一个新的用户组 删除用户组:删除指定用户组 组列表查询:查询人脸库中用户组的列表

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

人脸库结构

人脸库、用户组、用户、用户下的人脸层级关系如下所示:

|- 人脸库(appid) |- 用户组一(group_id) |- 用户01(uid) |- 人脸(faceid) |- 用户02(uid) |- 人脸(faceid) |- 人脸(faceid) .... .... |- 用户组二(group_id) |- 用户组三(group_id) ....

关于人脸库的设置限制

每个appid对应一个人脸库,且不同appid之间,人脸库互不相通。 每个人脸库下,可以创建多个用户组,用户组(group)数量没有限制。 每个用户组(group)下,可添加无限个user_id,无限张人脸(注:为了保证查询速度,单个group中的人脸容量上限建议为80万)。 每个用户(user_id)所能注册的最大人脸数量20。

提醒:每个人脸库对应一个appid,一定确保不要轻易删除后台应用列表中的appid,删除后则此人脸库将失效,无法进行任何查找!

质量判断

为了保证识别效果,请控制注册人脸的质量,在调用人脸注册接口时需要使用质量控制和活体控制参数,从而保证图片的质量以及注册进入人脸库的人脸是活体。

调用方式

请求URL数据格式

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

示例代码

BashPHPJAVAPythonCppC#Node #!/bin/bash curl -i -k 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【百度云应用的AK】&client_secret=【百度云应用的SK】' 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 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 #include #include #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(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 paraList = new List(); paraList.Add(new KeyValuePair("grant_type", "client_credentials")); paraList.Add(new KeyValuePair("client_id", clientId)); paraList.Add(new KeyValuePair("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/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 若活体检测结果不满足要求,则返回结果中会提示活体检测失败 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信息。

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

BashPHPJAVAPythonCppC# 人脸搜索 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'


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有