借助百度云api进行人脸识别(代码片段)

henuliulei henuliulei     2022-11-30     478

关键词:

前言:本篇博客是笔者第一次使用百度云api进行人脸检测,主要内容包括两部分,一是获取接口,二是借助接口进行人脸检测,最终可以给出一个百分比判别两张人脸是否属于同一个人。笔者也是初步了解这方面的内容,也是参考了杂七杂八的博文,内容可能存在错误及其他毛病,欢迎指出。

 

1:在百度AI里面创建应用

在百度AI开放平台使用百度的人脸识别能力,只需要三个核心步骤即可操作完成:

  • 获取接口权限
  • 准备接口调用工具
  • 进行接口调用。

获取接口权限

获取接口权限是调用接口的前提,主要分为以下几步:

1、进入百度云的人脸识别控制台

地址:

https://console.bce.baidu.com/ai/?_=1528192333418&fromai=1#/ai/face/overview/index

若没有百度账号,可以用手机号快速注册一个。

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。示例代码如下:

#!/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】

B、非Mac电脑操作流程如下,参考文档:http://ai.baidu.com/docs#/Auth/top

获取Access Token

请求URL数据格式

向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数:

  • grant_type: 必须参数,固定为client_credentials;
  • client_id: 必须参数,应用的API Key;
  • client_secret: 必须参数,应用的Secret Key;

例如:

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pVw2&

服务器返回的JSON文本参数如下:

  • access_token: 要获取的Access Token;
  • expires_in: Access Token的有效期(秒为单位,一般为1个月);
  • 其他参数忽略,暂时不用;

例如:


    "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"

 

若请求错误,服务器将返回的JSON文本包含以下参数:

  • error: 错误码;关于错误码的详细信息请参考下方鉴权认证错误码。
  • error_description: 错误描述信息,帮助理解和解决发生的错误。



例如认证失败返回:


    "error": "invalid_client",
    "error_description": "unknown client id"

保存获取到的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”,然后参考下图输入参数:

  • image_type=BASE64
  • image=图片的base64转码后的结果(此处要使用即将注册到人脸库的人脸图片),转码工具:https://tool.css-js.com/base64.html(注意:在base64转码工具中,要取消默认选项“包含头”)
  • group_id=gropu001(可自定义:由数字、字母、下划线组成)
  • user_id=0001(可自定义:由数字、字母、下划线组成)
技术图片

注意:在base64转码工具中,要取消默认选项“包含头”

技术图片

开始请求

点击右上角的“send”,即可请求成功。

技术图片

验证调用结果

进入百度云后台的人脸库可视化管理界面,点击人脸库名称并逐级进入到人脸维度,即可看到注册成功的人脸图片(注:调用在线API接口添加用户后,会延迟几分钟再展示到此页面,如果没更新,请勿着急)

技术图片
技术图片

 

2调用api进行人脸对比。

技术图片
 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<MatchRequest> list = Lists.newArrayList();
46         list.add(req1);
47         list.add(req2);
48 
49         JSONObject rs = client.match(list);
50         System.out.println(rs.toString(2));
51 
52     
53 
54 
View Code

该代码要导入百度云的sdk,这是我用的sdk链接:https://files.cnblogs.com/files/henuliulei/aip-java-sdk-4.11.1.zip

以及用到的另外两个jar包

https://files.cnblogs.com/files/henuliulei/google-collect-1.0.jar.zip
用到的两张图片如下,都是紫霞仙子
 

 技术图片

 

技术图片

程序运行结果如下:


  "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

得分为94点多,所以基本可以判定两张图片是同一个人脸(一般得分大于80就可以认为是同一个人)

 

3:调用api进行人脸匹配(就是在一堆图片中看有没有要被匹配的图片)

代码:

技术图片
 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 
View Code
 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 

结果满分,说明存在,同时"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进行人脸检测

技术图片
 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<String, String> options = new HashMap<String, String>();
58         options.put("face_field", "age");
59         options.put("max_face_num", "2");
60         options.put("face_type", "LIVE");
61 
62         String image = msg;
63         String imageType = "BASE64";
64 
65         // 人脸检测
66         JSONObject res = client.detect(image, imageType, null);
67         System.out.println(res.toString(2));
68 
69     
70 
71 
72 
View Code

运行结果如下,可以得到人脸的各种信息。

 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 

这是百度云的接口说明: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

 

python实现人脸识别(代码片段)

...,今天实现一下人脸识别。先问大家一个问题什么是百度Aip模块?百度AI平台提供了很多的API接口供开发者快速的调用运用在项目中本文写的是使用百度AI的在线接口SDK模块(baidu-aip)进行实现人脸识别除了人脸识... 查看详情

基于python的百度ai人脸识别api接口(可用于opencv-python人脸识别)(代码片段)

基于Python的百度AI人脸识别API接口(可用于OpenCV-Python人脸识别)资源:https://download.csdn.net/download/weixin_53403301/43644312之前的项目:【最新】基于OpenCV的Python人脸识别、检测、框选(遍历目录下所有照片依次识别... 查看详情

利用百度进行人脸特征检测(代码片段)

...#xff0c;要对人脸的特征进行检测,获取关键部位信息。百度的api提供这一接口。对一张照片的人脸进行关键特征部位的检测,本文提供以下代码供参考。#-*-coding:utf-8-*-#fromaipimportAipFaceimportcv2importbase64importmathimportmatplotlib.pyp... 查看详情

交友项目自动装配模块封装阿里云发送短信&oss对象存储&百度云人脸识别(代码片段)

...xff1a;自动装配类2.4:自动装配配置3:SpringBoot封装百度云人脸识别3.1:配置类3.2:发送短信模板对象3.3:自动装配类3.4:自动装配配置自动装配模块:tanhua-autoconfigproperties用来进行读取yml文件的参数进... 查看详情

干货|ai人脸识别之人脸搜索(代码片段)

...地址:https://www.eclipse.org/downloads/,Eclipse安装方法请自行百度。二、实操开始1.新建JAVA项目打开Eclipse,依次点击File-New-JavaProject,输入Projectname如下图设置后,点击Finish-Don‘tCreate右击JAVA项目中的src目录,依次点击new-Package接下来... 查看详情

python调用百度api实现人脸融合(代码片段)

目录1.作者介绍2.人脸融合介绍3.调用百度智能云API4.代码解析4.1导入库4.2获取token4.3读取图片,转换编码4.4调用百度智能云接口实现图片融合4.5下载融合图片4.6运行主程序4.7融合结果展示5.完整代码1.作者介绍刘帅波,男&#x... 查看详情

rv1126适配debian10(搭建人脸识别云服务器)(代码片段)

前言  主要借助人脸识别云服务器的应用来介绍RV1126的 Debian10 系统和 Rockx。   Debian10:Rockchip官方只为RV1126适配了Buildroot系统,虽然Buildroot系统开销非常小但是对于应用开发部署并不是那么友好。所以Firefly为RV1126适... 查看详情

基于javaweb人脸识别注册登录系统(代码片段)

...容开始---现在是2019年,人脸识别技术已经相当成熟了,百度自2017年发布人脸识别技术,已经被广泛应用,不管从现在的iphoneX掀起的面部解锁到手机应用端的各种人脸认证,这一技术已经悄然升息的方便了我们的生活,但是在web... 查看详情

opencv3.3人脸识别模块的api的变化(代码片段)

...enCV3.3人脸识别模块的API的变化1.前言开始用最新版的OpenCV进行人脸识别的小伙伴也许已经发现了,人脸识别的最新API变化了。这也正是人脸识别等contrib模块没有放到主仓库的原因:不稳定,仍在开发中。当然这次的... 查看详情

python丨调用百度的人脸识别api给你的颜值打个分

需要用到的工具百度的人脸识别apiFlaskPILrequests主要思路利用的百度的人脸识别库,然后自己做了一个简单的图片上传和图片处理以及信息提取加工。官网给的方法相对比较繁琐,我使用request改写了一下如下(注意把url里面的Key换... 查看详情

python调用百度ai对颜值评分(代码片段)

上一篇文章介绍了应用百度AI的文字识别功能对身份证进行识别。本文介绍应用百度AI的人脸识别功能对年龄、性别、颜值等进行识别,感兴趣的朋友一起来看看效果吧。由于安装baidu-aip模块和获取百度AI接口密钥在之前的文... 查看详情

基于c++qt设计的人脸考勤打卡签到系统(代码片段)

...特征,具有很强的自身稳定性和个体差异性,是进行身份验证的最理想依据,主要方法包括步态识别、虹膜识别、皮肤芯片、脸像识别、多模态(即多生物特征融合)技术等。其中,人脸识别技术因为具有... 查看详情

百度智能云人脸识别认证

https://ai.baidu.com/ai-doc/FACE/Ekrby2oi2APP接入时区图APP人脸https://ai.baidu.com/ai-doc/FACE/ak8tvycmh 查看详情

百度智能云人脸识别认证

https://ai.baidu.com/ai-doc/FACE/Ekrby2oi2APP接入时区图APP人脸https://ai.baidu.com/ai-doc/FACE/ak8tvycmh 查看详情

百度智能云人脸识别认证

https://ai.baidu.com/ai-doc/FACE/Ekrby2oi2APP接入时区图APP人脸https://ai.baidu.com/ai-doc/FACE/ak8tvycmh 查看详情

百度智能云人脸识别认证

https://ai.baidu.com/ai-doc/FACE/Ekrby2oi2APP接入时区图APP人脸https://ai.baidu.com/ai-doc/FACE/ak8tvycmh 查看详情

百度人脸识别sdk学习

...之类的,我就好奇搜索了一下,本人是小白级别,喜欢用百度多一点,所以就使用了百度的人脸识别SDK进行研究。不得不说百度提供的完档很详细,在学习过程中很少出现不能解决的问题,所以本人也偷个懒,把sdk文档复制下来... 查看详情

python调用百度api进行动植物识别(代码片段)

线性回归模型之波士顿房价预测1.作者介绍2.百度API动植物识别接口介绍2.1百度API2.2动植物识别中用到的技术2.2.1深度学习3.实验过程3.1实验环境3.2数据集3.3实验步骤3.4完整实验代码3.5实验结果与分析4.参考1.作者介绍何昕,女&... 查看详情