SpringBoot集成百度AI实现人脸识别的项目实践

网友投稿 456 2022-07-28


目录1. 百度AI开放平台2. 文档集成3. 代码实现3.1 创建SpringBoot工程3.2 添加百度AI依赖3.3 创建AipFace3.4 注册人脸接口3.5 人脸登录接口3.6 页面3.7 测试结果

1. 百度AI开放平台

选择百度AI当然就要去创建对于的账号,同时创建应用信息。

进入百度AI官网,然后在开放能力Tab里面选择人脸与人体,按图中所示操作吧。

该登录就登录吧,百度账号。

对于新用户来说,可以选择免费尝鲜,要不然得充值,练手的话,这个就够了,反正各种免费领取。

领完后,需要创建测试的应用,生成很重要的三个信息:AppID、API Key、Secret Key

2. 文档集成

创建完应用信息后,就可以进行SDK集成了,里面有各种语言:android、IOS、java、php等等,本文集成Java HTTP SDK。

文档里面说的其实很详细了。

3. 代码实现

框架使用如下:SpringBoot + JPA + mysql。当然JPA可以使用Mybatis或者MybatisPlus

3.1 创建SpringBoot工程

3.2 添加百度AI依赖

添加以下依赖即可。其中版本号可在maven官网查询

com.baidu.aip

java-sdk

${version}

3.3 创建AipFace

AipFace是人脸识别的Java客户端,为使用人脸识别的开发人员提供了一系列的交互方法。初始化完成后建议单例使用,避免重复获取access_token(官方原话)

@Configuration

public class BaiduConfig {

@Value("${baidu.appId}")

private String appId;

@Value("${baidu.key}")

private String key;

@Value("${baidu.secret}")

private String secret;

@Bean

public AipFace aipFace(){

return new AipFace(appId,key,secret);

}

}

3.4 注册人脸接口

客户端上传的人脸的图片的Base64编码,并将该用户人脸图形进行本地保存,且存入数据库

@RequestMapping(value = "register",method = RequestMethod.POST)

public String register(String userName,String faceBase) throws IOException {

if(!StringUtils.isEmpty(userName) && !StringUtils.isEmpty(faceBase)) {

// 文件上传的地址

System.out.println(filePath);

// 图片名称

String fileName = userName + System.currentTimeMillis() + ".png";

System.out.println(filePath + "\\" + fileName);

File file = new File(filePath + "\\" + fileName);

// 往数据库里插入一条用户数据

Users user = new Users();

user.setUserName(userName);

user.setUserPhoto(filePath + "\\" + fileName);

Users exitUser = userService.selectUserByName(user);

if(exitUser != null) {

return "2";

}

userService.addUsers(user);

// 保存上传摄像头捕获的图片

saveLocalImage(faceBase, file);

// 向百度云人脸库插入一张人脸

faceSetAddUser(aipFace,faceBase,userName);

}

return "1";

}

public boolean saveLocalImage(String imgStr, File file) {

// 图像数据为空

if (imgStr == null) {

return false;

}else {

BASE64Decoder decoder = new BASE64Decoder();

try {

// Base64解码

byte[] bytes = decoder.decodeBuffer(imgStr);

for (int i = 0; i < bytes.length; ++i) {

if (bytes[i] < 0) {

bytes[i] += 256;

}

}

// 生成jpeg图片

if(!file.exists()) {

file.getParentFile().mkdir();

OutputStream out = new FileOutputStream(file);

out.write(bytes);

out.flush();

out.close();

return true;

}

} catch (Exception e) {

e.printStackTrace();

return false;

}

}

return false;

}

public boolean faceSetAddUser(AipFace client, String faceBase, String username) {

// 参数为数据库中注册的人脸

HashMap options = new HashMap();

options.put("user_info", "user's info");

jsONObject res = client.addUser(faceBasYGdbzjze, "BASE64", "user_01", username, options);

return true;

}

3.5 人脸登录接口

@RequestMapping(value = "login",method = RequestMethod.POST)

public String login(String faceBase) {

String faceData = faceBase;

// 进行人像数据对比

Double num = checkUser(faceData,aipFace);

if( num > 80) {

return "1";

}else {

return "2";

}

}

public Double checkUser(String imgBash64,AipFace client) {

// 传入可选参数调用接口

HashMap options = new HashMap();

JSONObject res = client.search(imgBash64, "BASE64", "user_01", options);

JSONObject user = (JSONObject) res.getJSONObject("result").getJSONArray("user_list").get(0);

Double score = (Double) user.get("score");

return score;

}

3.6 页面

其实比较困难的是这个PC端采集用户人脸图像,需要调用PC摄像头。

3.7 测试结果

3.7.1 注册人脸

会存入百度AI应用后台,可以去查看一下。截图需要,全程没有露脸而已。

3.7.2 人脸登录

源码地址:https://gitee.com/frank_zxd/springboot-face-ai


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:解决SpringCloud Feign异步调用传参问题
下一篇:IDEA 中使用 Big Data Tools 连接大数据组件(idea安装教程)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~