百度云人脸识别

前言:

百度云AI实际上也是基于人工智能的领域,人工智能(Artificial Intelligence)简称为AI。人工智能也是计算机科学的一个分支,用于研究开发用于模拟延伸和扩展人的智能的理论方法技术及应用系统的一门新的技术科学

人工智能包括很多应用领域
智能家电穿戴设备智能机器人,人工智能技术已经进入到生活的各个领域,引发越来越多的关注

百度云AI概述

官网地址:https://cloud.baidu.com/

百度智能云是由百度创建并运营,提供云计算的服务的网站,创立于2015年。

百度人脸识别基于深度学习的人脸识别方案,准确识别图片中的人脸信息,提供如下功能:

1,人脸检测:快速检测人脸并返回人脸框位置,输出人脸150个关键点坐标,准确识别多种属性信息

2,人脸对比:两张人脸进行 1:1 比对,得到人脸相似度

3,人脸搜索:给定一张照片,对比人脸库中N张人脸,进行1:N搜索或者M:N搜索,返回搜索到的人脸以及对应的相似度

4,人脸库管理:人脸库管理接口组,包含人脸注册、删除、更新等11个接口

百度云AI的开发步骤

1.首先得注册一个帐号然后创建应用(这一步是需要实名认证的)
2.搭建工程导入相关依赖
3.人脸注册
4.人脸识别

注册与认证

1),如果没有帐号的话,可以注册一个帐号:
打开百度云注册官网:https://login.bce.baidu.com/reg.html?tpl=bceplat&from=portal 进行帐号注册,(如果有百度帐号就不需要注册了可以直接使用百度的帐号进行登录)

2),创建应用:
找到产品–>人工智能–>人脸识别激活应用,并且注册应用。

2.1),进来之后你会看到一个控制台找到创建应用按钮创建一个应用,输入应用名称,选择类型,最后的描述可以随意写一点,最后点击立即创建即可

3),创建完成后点击管理应用按钮,需要把AppIDAPI Key以及Secret Key这三个属性值全部复制下来后面会用到

搭建工程

1),新建一个项目

2),导入依赖:

1
2
3
4
5
6
7
8
9
10
11
12
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.10.0</version>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
s<scope>test</scope>
</dependency>

编写一个Junit测试类,在init方法中的三个参数是前面复制的三个参数依次填入即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139


package cn.itcast.test;

import com.baidu.aip.face.AipFace;
import com.baidu.aip.util.Base64Util;
import org.json.JSONObject;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;

public class FaceTest {


private AipFace client;

@Before
public void init(){
//1.创建java代码和百度云交互的client对象
client = new AipFace("AppID","API Key","Secret Key");
}


//人脸注册
@Test
public void testFaceRegister() throws IOException {
//2.参数设置
HashMap<String,String > options = new HashMap<String, String>();
options.put("quality_control","NORMAL"); //图片的质量 NONE LOW WORMAL HIGH
options.put("liveness_control","LOW"); //活体检测

//3.构造图片
String path ="D:\\saas\\10-刷脸登录\\资源\\照片\\002.png";
//上传图片有两种格式:一种是url另外一种是Beans64位的
byte[] bytes = Files.readAllBytes(Paths.get(path));
String encode = Base64Util.encode(bytes);
//4。调用API方法完成人脸注册

/**
* 参数一:是图片的url或者图片的base64
* 参数二:代表的是图片的形式 一种叫做url另外一种叫做beans64
* 参数三:组ID(固定字符串)
* 参数四:用户id
* 参数五:hashmap中的基本参数配置
*/
JSONObject jsonObject = client.addUser(encode, "BASE64", "itcast", "100", options);
System.out.println(jsonObject.toString()); //转换为String,然后输出
}


/**
* 人脸检测
*/
@Test
public void testFaceCheck() throws IOException {
//3.构造图片
String path ="D:\\saas\\10-刷脸登录\\资源\\照片\\001.png";
//上传图片有两种格式:一种是url另外一种是Beans64位的
byte[] bytes = Files.readAllBytes(Paths.get(path));
String encode = Base64Util.encode(bytes);

//调用方法进行人脸检测
/**
* 参数一:是图片的url或者图片的base64
* 参数二:图片形式
* 参数三:hashmap中的基本参数配置
*
*/
JSONObject jsonObject = client.detect(encode, "BASE64", null);
System.out.println(jsonObject.toString(2));
}


/**
* 人脸搜索,根据用户上传的图片和指定的人脸库中得所有人脸进行比较,
* 获取相似度最高的一个或者某几个评分
*
* 说明:返回值:
* score:代表相似度评分(80分以上可以认为是同一个人)
*/
@Test
public void testFaceSearch() throws IOException {
//3.构造图片
String path ="D:\\saas\\10-刷脸登录\\资源\\照片\\003.png";
//上传图片有两种格式:一种是url另外一种是Beans64位的
byte[] bytes = Files.readAllBytes(Paths.get(path));
String encode = Base64Util.encode(bytes);

//人脸搜索
/**
* String image,
* String imageType,
* String groupIdList,
* HashMap<String,
* String> options
*/
JSONObject search = client.search(encode, "BASE64", "itcast", null);
System.out.println(search.toString(2));
}


/**
* 人脸更新,根据的年龄增长,面部会发生一些变化
*/

@Test
public void testFaceUpdate() throws IOException {

//2.参数设置
HashMap<String,String > options = new HashMap<String, String>();
options.put("quality_control","NORMAL");
options.put("liveness_control","LOW");

//3.构造图片
String path ="D:\\saas\\10-刷脸登录\\资源\\照片\\002.png";
//上传图片有两种格式:一种是url另外一种是Beans64位的
byte[] bytes = Files.readAllBytes(Paths.get(path));
String encode = Base64Util.encode(bytes);
//4。调用API方法完成人脸注册

/**
* 参数一:是图片的url或者图片的base64
* 参数二:代表的是图片的形式 一种叫做url另外一种叫做beans64
* 参数三:组ID(固定字符串)
* 参数四:用户id
* 参数五:hashmap中的基本参数配置
*/
JSONObject jsonObject = client.updateUser(encode, "BASE64", "itcast", "100", options);
System.out.println(jsonObject.toString()); //转换为String,然后输出

}


}

添加以上代码的时候可能还需要在xml文件里面添加一点内容:

1
2
3
4
5
6
7
8
9
10
11
12
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>

刷脸登陆

导入依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- 百度云AI API-->
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.10.0</version>
</dependency>
<!-- 二维码 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.2.1</version>
</dependency>

二维码的生成:两种方式一种是生成一张图片保存到本地第二种是生成一张DataUrl的二维码

关于DataUrl的说明:https://segmentfault.com/a/1190000009692722,

就是一个其允许内容创建者向文档中嵌入小文件官网地址:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/data_URIs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package cn.itcast.test;

import com.baidu.aip.util.Base64Util;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageConfig;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

import javax.imageio.ImageIO;0
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;

public class QrCodeTest {

// public static void main(String[] args) throws WriterException, IOException {
//
// //1.填写二维码中的信息
// String content =" http://lyunqi.gitee.io/youreeverythingtome";
// //2.通过zxing生成二维码
//
// //3.创建QrCodeWriter对象
//
// QRCodeWriter qrCodeWriter = new QRCodeWriter();
//
// BitMatrix bt = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, 200, 200);
// //4.保存到本地
//
// Path path= new File( "D:\\src\\SpringBoot\\Saas\\09章节\\test.png").toPath();
//
//
// MatrixToImageWriter.writeToPath(bt,"png",path);
//
// }


/**
* 生成DataUrl的二维码
*/
public static void main(String[] args) throws WriterException, IOException {

//1.二维码中的信息
String content = "http://www.itcast.cn";
//2.通过zxing生成二维码(保存到本地图片,支持以data url的形式体现)
//创建QRCodeWriter对象
QRCodeWriter writer = new QRCodeWriter();
//基本配置
BitMatrix bt = writer.encode(content, BarcodeFormat.QR_CODE, 200, 200);
//创建ByteArrayOutputstream
ByteArrayOutputStream os = new ByteArrayOutputStream();
//将二维码数据以byte数组的形式保存到ByteArrayOutputstream
/**
* 1:image对象
* 2:图片格式
* 3:Outputstream
*/
BufferedImage image = MatrixToImageWriter.toBufferedImage(bt);
ImageIO.write(image,"png",os);
//对byte数组进行base64处理
String encode = Base64Util.encode(os.toByteArray());
System.out.println(new String("data:image/png;base64,"+encode));


}

}