借助百度云API进行人脸识别
2021-06-06 23:07
标签:处理 ota app images pos 延迟 head tostring turn 前言:本篇博客是笔者第一次使用百度云api进行人脸检测,主要内容包括两部分,一是获取接口,二是借助接口进行人脸检测,最终可以给出一个百分比判别两张人脸是否属于同一个人。笔者也是初步了解这方面的内容,也是参考了杂七杂八的博文,内容可能存在错误及其他毛病,欢迎指出。 1:在百度AI里面创建应用 在百度AI开放平台使用百度的人脸识别能力,只需要三个核心步骤即可操作完成: 获取接口权限 获取接口权限是调用接口的前提,主要分为以下几步: 1、进入百度云的人脸识别控制台 地址: 若没有百度账号,可以用手机号快速注册一个。 2、创建人脸识别应用 账号登录成功,您需要创建应用才可正式调用AI能力。应用是您调用API服务的基本操作单元,您可以基于应用创建成功后获取的API Key及Secret Key,进行接口调用操作,及相关配置。 创建应用,填写【应用名称】和【应用描述】,即可创建应用(其他选项可以不做操作,使用默认值即可) 创建完成后,点击“返回应用列表”进行下一步操作。 3、获取秘钥 在您创建完毕应用后,平台将会分配给您此应用的相关凭证:API Key、Secret Key。使用秘钥将可以在下一步中获取调用接口所需的Access Token。 获取调用接口所需的Access Token 人脸识别在线接口主要针对HTTP API调用者,,调用API时必须在URL中带上accesss_token参数,获取Access Token的流程如下: A、如果您使用的是mac电脑可以将此示例代码复制到“终端”上直接获取token。示例代码如下: B、非Mac电脑操作流程如下,参考文档:http://ai.baidu.com/docs#/Auth/top 获取Access Token 请求URL数据格式 向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数: 例如: 服务器返回的JSON文本参数如下: 例如: 若请求错误,服务器将返回的JSON文本包含以下参数: 例如认证失败返回: 保存获取到的Access Token,在调用接口时会用到。 2、 准备接口调用工具 Postman是一个比较给力的Http请求模拟工具,可以快速进行接口调用。 没有安装的小伙伴可以?下方 嘿 顺便把它还学了一遍 程序员必备工具:PostMan 安装结束后进入主界面 如下图,这就是Postman的主界面。 4、 进行调用接口 在postman上可以快速进行接口请求,调用人脸识别接口需要输入正确的接口地址,提前准备人脸图片,具体如下: 输入请求地址 可直接复制的请求地址:“https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add?access_token=【在第一步中获取的access-token】” 注:需要将请求格式切换为“Post” 修改请求头(header) Key栏输入:Content-Type Value栏输入:application/x-www-form-urlencoded 输入请求参数(body) 先选择“x-www-form-urlencoded”,然后参考下图输入参数: 注意:在base64转码工具中,要取消默认选项“包含头” 开始请求 点击右上角的“send”,即可请求成功。 验证调用结果 进入百度云后台的人脸库可视化管理界面,点击人脸库名称并逐级进入到人脸维度,即可看到注册成功的人脸图片(注:调用在线API接口添加用户后,会延迟几分钟再展示到此页面,如果没更新,请勿着急) 2调用api进行人脸对比。 该代码要导入百度云的sdk,这是我用的sdk链接:https://files.cnblogs.com/files/henuliulei/aip-java-sdk-4.11.1.zip 以及用到的另外两个jar包 程序运行结果如下: 得分为94点多,所以基本可以判定两张图片是同一个人脸(一般得分大于80就可以认为是同一个人) 3:调用api进行人脸匹配(就是在一堆图片中看有没有要被匹配的图片) 代码: 结果满分,说明存在,同时"group_id": "group002","user_id": "user1",指明了具体的位置。 个人表示在实现上个代码花了很长时间,遇到了各种错误,其中最主要的还是下面两种。 1:使用identifyUser()报错 解决办法已经在我这篇博客讲明:https://www.cnblogs.com/henuliulei/p/10759473.html 2:即使用和库里面相同的图片,检测结果也是0, 解决办法已经在我这篇博客讲明:https://www.cnblogs.com/henuliulei/p/10759567.html 4:调用api进行人脸检测 运行结果如下,可以得到人脸的各种信息。 这是百度云的接口说明:https://cloud.baidu.com/doc/FACE/Face-Java-SDK.html#.E4.BA.BA.E8.84.B8.E6.A3.80.E6.B5.8B 其他接口的使用请自行参考,这里不再细述。 reference: https://cloud.tencent.com/developer/article/1169345 借助百度云API进行人脸识别 标签:处理 ota app images pos 延迟 head tostring turn 原文地址:https://www.cnblogs.com/henuliulei/p/10757666.html
https://console.bce.baidu.com/ai/?_=1528192333418&fromai=1#/ai/face/overview/index
#!/bin/bash curl -i -k‘https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【API Key】&client_secret=【Seceret Key】
https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pVw2&
{
"refresh_token": "25.b55fe1d287227ca97aab219bb249b8ab.315360000.1798284651.282335-8574074",
"expires_in": 2592000,
"scope": "public wise_adapt",
"session_key": "9mzdDZXu3dENdFZQurfg0Vz8slgSgvvOAUebNFzyzcpQ5EnbxbF+hfG9DQkpUVQdh4p6HbQcAiz5RmuBAja1JJGgIdJI",
"access_token": "24.6c5e1ff107f0e8bcef8c46d3424a0e78.2592000.1485516651.282335-8574074",
"session_secret": "dfac94a3489fe9fca7c3221cbf7525ff"
}
{
"error": "invalid_client",
"error_description": "unknown client id"
}
1 package Test1;
2
3 import com.baidu.aip.face.AipFace;
4 import com.baidu.aip.face.MatchRequest;
5 import com.baidu.aip.util.Base64Util;
6 import com.google.common.collect.Lists;
7 import org.apache.commons.io.FileUtils;
8 import org.json.JSONObject;
9
10 import java.io.File;
11 import java.io.IOException;
12 import java.util.List;
13
14 /**
15 * 人脸对比
16 */
17 public class BaiduFaceTest {
18
19 // 这里填写你自己应用的三项
20 public static final String APP_ID = "16090420";
21 public static final String API_KEY = "iinpWTE1pvOnH3YNmk4tG5Z6";
22 public static final String SECRET_KEY = "LMl3pgidH2AzGcTnOM3qh1x3GFnh6jt5";
23
24
25
26 public static void main(String[] args) throws IOException {
27 AipFace client = new AipFace(APP_ID, API_KEY, SECRET_KEY);
28
29 String image1 = "C:\\Users\\19575\\Pictures\\Saved Pictures\\紫霞仙子\\a.jpg";
30 String image2 = "C:\\Users\\19575\\Pictures\\Saved Pictures\\紫霞仙子\\b.jpg";
31
32
33 byte[] b1 = FileUtils.readFileToByteArray(new File(image1));
34 byte[] b2 = FileUtils.readFileToByteArray(new File(image2));
35
36
37 String s1 = Base64Util.encode(b1);
38 String s2 = Base64Util.encode(b2);
39
40
41
42 MatchRequest req1 = new MatchRequest(s1, "BASE64");
43 MatchRequest req2 = new MatchRequest(s2, "BASE64");
44
45 List
{
"result": {
"score": 94.56459045,
"face_list": [
{"face_token": "7e88487df6dba99d358a14e503ae54c4"},
{"face_token": "ec1a03aba650adc1a7a9fcaca62a0414"}
]
},
"log_id": 305486860102237231,
"error_msg": "SUCCESS",
"cached": 0,
"error_code": 0,
"timestamp": 1556010223
}
1 package Test1;
2
3 import java.io.FileInputStream;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.util.HashMap;
7
8 import org.json.JSONObject;
9
10 import com.baidu.aip.face.AipFace;
11
12 import sun.misc.BASE64Encoder;
13
14 /**
15 * 人脸对比
16 */
17 public class BaiduFaceTest {
18
19 // 这里填写你自己应用的三项
20 public static final String APP_ID = "16090420";
21 public static final String API_KEY = "iinpWTE1pvOnH3YNmk4tG5Z6";
22 public static final String SECRET_KEY = "LMl3pgidH2AzGcTnOM3qh1x3GFnh6jt5";
23
24
25
26 public static void main(String[] args) throws IOException {
27 AipFace client = new AipFace(APP_ID, API_KEY, SECRET_KEY);
28
29 String image1 = "C:\\Users\\19575\\Pictures\\Saved Pictures\\紫霞仙子\\c.jpg";
30 System.out.println(image1);
31 String image2 = "C:\\Users\\19575\\Pictures\\Saved Pictures\\紫霞仙子\\b.jpg";
32
33 String msg=GetImageStr(image1);
34 JSONObject rs = client.search(msg, "BASE64", "group002", new HashMap());
35 // JSONObject rs=client.detect(image1, "URL", new HashMap());
36 System.out.println(rs.toString(2));
37
38 }
39 public static String GetImageStr(String imgFile)
40 {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理
41 InputStream in = null;
42 byte[] data = null;
43 //读取图片字节数组
44 try
45 {
46 in = new FileInputStream(imgFile);
47 data = new byte[in.available()];
48 in.read(data);
49 in.close();
50 }
51 catch (IOException e)
52 {
53 e.printStackTrace();
54 }
55 //对字节数组Base64编码
56 BASE64Encoder encoder = new BASE64Encoder();
57 return encoder.encode(data);//返回Base64编码过的字节数组字符串
58 }
59
60
61 }
1 {
2 "result": {
3 "face_token": "93299a14e0a246dcc5b4cc5484341ea4",
4 "user_list": [{
5 "score": 100,
6 "group_id": "group002",
7 "user_id": "user1",
8 "user_info": ""
9 }]
10 },
11 "log_id": 305486860288576101,
12 "error_msg": "SUCCESS",
13 "cached": 0,
14 "error_code": 0,
15 "timestamp": 1556028857
16 }
1 package Test1;
2
3 import java.io.FileInputStream;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.util.HashMap;
7
8 import org.json.JSONObject;
9
10 import com.baidu.aip.face.AipFace;
11
12 import sun.misc.BASE64Encoder;
13
14 /**
15 * 人脸对比
16 */
17 public class BaiduFaceTest {
18
19 // 这里填写你自己应用的三项
20 public static final String APP_ID = "16090420";
21 public static final String API_KEY = "iinpWTE1pvOnH3YNmk4tG5Z6";
22 public static final String SECRET_KEY = "LMl3pgidH2AzGcTnOM3qh1x3GFnh6jt5";
23
24
25
26 public static void main(String[] args) throws IOException {
27 AipFace client = new AipFace(APP_ID, API_KEY, SECRET_KEY);
28
29 String image1 = "C:\\Users\\19575\\Pictures\\Saved Pictures\\紫霞仙子\\b.jpg";
30
31 String msg=GetImageStr(image1);
32 sample(client,msg);
33
34 }
35 public static String GetImageStr(String imgFile)
36 {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理
37 InputStream in = null;
38 byte[] data = null;
39 //读取图片字节数组
40 try
41 {
42 in = new FileInputStream(imgFile);
43 data = new byte[in.available()];
44 in.read(data);
45 in.close();
46 }
47 catch (IOException e)
48 {
49 e.printStackTrace();
50 }
51 //对字节数组Base64编码
52 BASE64Encoder encoder = new BASE64Encoder();
53 return encoder.encode(data);//返回Base64编码过的字节数组字符串
54 }
55 public static void sample(AipFace client,String msg) {
56 // 传入可选参数调用接口
57 HashMap
1 {
2 "result": {
3 "face_num": 1,
4 "face_list": [{
5 "angle": {
6 "roll": 15.52,
7 "pitch": 5.23,
8 "yaw": -19.37
9 },
10 "face_token": "456e1e3b70e535d5e2cce32317018510",
11 "location": {
12 "top": 54.95,
13 "left": 174.35,
14 "rotation": 16,
15 "width": 139,
16 "height": 139
17 },
18 "face_probability": 1
19 }]
20 },
21 "log_id": 304569260325958791,
22 "error_msg": "SUCCESS",
23 "cached": 0,
24 "error_code": 0,
25 "timestamp": 1556032595
26 }