之前尝试用python+opencv实现过人脸识别,接下来我们使用Java+百度AI来实现人脸识别的尝试。

I 注册百度开放平台账号

打开百度AI官方网站(https://ai.baidu.com/?track=cp:aipinzhuan|pf:pc|pp:AIpingtai|pu:title|ci:|kw:10005792),注册账号并打开控制台,点击人脸识别模块并创建应用,这里我们已经创建好了一个人脸识别应用。

这里我们会发现API Key和Secret Key(Secret Key的值以*隐藏的,我们可以点击后面的显示让他显示出来),这两个码我们在后面会使用。

II 下载SDK文档

点击页面左侧的http SDK按钮,进入SDK文档界面,点击人脸识别,下载java HTTP SDK文件。

解压这个文件,我们会发现4个jar文件,在桌面创建项目文件夹,将这4个文件拖入项目文件夹。

III 代码实践

接下来我们可以用java来写我们的人脸识别代码了,我们可以借鉴百度官方文档的帮助。

我们可以看到人脸识别的各个模块,我们选择java语言的帮助。

首先我们新建人脸检测、识别和人脸库代码。

package com.creating.FaceRecognition;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;public class FacebaiduDeal {/*** 百度云AK*/private static final String API_KEY = "AFC0zf1I3Dhz63ChFDkxxGiX";/*** 百度云SK*/private static final String SECRET_KEY = "UCgZ8nIp9gdP1KbI6AwGvjTF5ehjP44N";/*** 获取access_token的接口地址*/private static final String AUTH_HOST = "https://aip.baidubce.com/oauth/2.0/token?";/*** 进行人脸检测的接口地址*/private static final String DETECT_HOST = "https://aip.baidubce.com/rest/2.0/face/v1/detect";/*** 进行人脸入人脸库的接口地址*/private static final String FACEADD_HOST = "https://aip.baidubce.com/rest/2.0/face/v2/faceset/user/add";/*** 进行人脸识别的接口地址*/private static final String FACRENZ_HOST = "https://aip.baidubce.com/rest/2.0/face/v2/identify";/*** 进行人脸识别的接口地址*/private static final String FACERGX_HOST = "https://aip.baidubce.com/rest/2.0/face/v2/faceset/user/update";/*** 进行人脸删除的接口地址*/private static final String FACEDELE_HOST = "https://aip.baidubce.com/rest/2.0/face/v2/faceset/user/delete";/*** 进行人脸信息查询的接口地址*/private static final String FACESELECT_HOST = "https://aip.baidubce.com/rest/2.0/face/v2/faceset/user/get";/*** 人脸探测* @return* @throws Exception */public void detect(String imgParam) throws Exception {JSONObject jsonObject = null;String param = "max_face_num=" + 1+ "&face_fields="+ "age,beauty,expression,faceshape,gender,glasses,landmark,race,qualities"+ "&image=" + imgParam;String accessToken = getAuth();String result = HttpUtil.post(DETECT_HOST, accessToken, param);jsonObject = JSONObject.fromObject(result);JSONObject jsonObjectd = JSONObject.fromObject(jsonObject.optJSONArray("result").get(0));int blur = jsonObjectd.optInt("blur");//人脸模糊程度,范围[0~1],0表示清晰,1表示模糊JSONObject jsontype = JSONObject.fromObject(JSONObject.fromObject(jsonObjectd.getString("qualities")).getString("type"));//真实人脸置信度,[0~1],大于0.5可以判断为人脸double human = jsontype.getDouble("human");//真实人脸置信度,[0~1],大于0.5可以判断为人脸//1表示人脸模糊if(blur==1){throw new Exception("人脸模糊!");}//是否是人类的脸if(human<0.5){throw new Exception("提供的人脸照片非人类的脸!");}System.out.println("blur:"+blur);System.out.println("human:"+human);}/*** 人脸信息入人脸库* @return* imgParam:人脸base64串* uid:人脸id(例如身份证等)* @throws Exception */public JSONObject faceadd(String imgParam,String uid,String userinfo) throws Exception {JSONObject jsonObject = null;if(userinfo==null){userinfo = uid;}String param = "uid=" + uid+ "&group_id=creating_face_group"+ "&image=" + imgParam+ "&user_info=" + userinfo+ "&action_type=replace";String accessToken = getAuth();String result = HttpUtil.post(FACEADD_HOST, accessToken, param);jsonObject = JSONObject.fromObject(result);return jsonObject;}/*** 人脸信息识别,判断指定人脸是否存在库中* @param imgParam:人脸信息,base64转码后的串* @return*/public JSONObject facerecognition(String imgParam) {JSONObject jsonObject = null;try {String param = "&group_id=creating_face_group"+ "&image=" + imgParam+ "&user_top_num=1";String accessToken = getAuth();String result = HttpUtil.post(FACRENZ_HOST, accessToken, param);jsonObject = JSONObject.fromObject(result);return jsonObject;} catch (Exception e) {e.printStackTrace();}return null;}/*** 人脸信息库存更新* @param imgParam* @param userinfo* @return*/public JSONObject faceupdate(String imgParam,String userinfo,String uid) {JSONObject jsonObject = null;try {String param = "&uid="+uid+ "&image=" + imgParam  + "&user_info=" + userinfo +"&group_id=creating_face_group"+ "&action_type=replace";String accessToken = getAuth();String result = HttpUtil.post(FACERGX_HOST, accessToken, param);jsonObject = JSONObject.fromObject(result);return jsonObject;} catch (Exception e) {e.printStackTrace();}return null;}/*** 指定人脸信息删除* @param uid* @return*/public JSONObject facedelete(String uid) {JSONObject jsonObject = null;try {String param = "&uid="+uid+"&group_id=creating_face_group";String accessToken = getAuth();String result = HttpUtil.post(FACEDELE_HOST, accessToken, param);jsonObject = JSONObject.fromObject(result);return jsonObject;} catch (Exception e) {e.printStackTrace();}return null;}public JSONObject faceselect(String uid) {JSONObject jsonObject = null;try {String param = "&uid="+uid+"&group_id=creating_face_group";String accessToken = getAuth();String result = HttpUtil.post(FACESELECT_HOST, accessToken, param);jsonObject = JSONObject.fromObject(result);return jsonObject;} catch (Exception e) {e.printStackTrace();}return null;}/*** 获取权限token* @return*/public  String getAuth(){// 获取token地址String getAccessTokenUrl = AUTH_HOST// 1. grant_type为固定参数+ "grant_type=client_credentials"// 2. 官网获取的 API Key+ "&client_id=" + API_KEY// 3. 官网获取的 Secret Key+ "&client_secret=" + SECRET_KEY;JSONObject jsonObject = null;BufferedReader in = null;try {URL realUrl = new URL(getAccessTokenUrl);HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();connection.setRequestMethod("GET");connection.connect();// 获取所有响应头字段
//            Map<String, List<String>> map = connection.getHeaderFields();// 遍历所有的响应头字段/*for (String key : map.keySet()) {System.err.println(key + "--->" + map.get(key));}*/// 定义 BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String result = "";String line;while ((line = in.readLine()) != null) {result += line;}/*** 返回结果示例*/jsonObject = JSONObject.fromObject(result);String access_token = jsonObject.getString("access_token");return access_token;} catch (Exception e) {e.printStackTrace();} finally {if(in!=null){try {in.close();} catch (IOException e) {e.printStackTrace();}}}return null;}
}

这里的API Key和Secret Key更新为你注册的。

接下来编辑main文件。

package com.creating.FaceRecognition;import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;import org.apache.commons.lang.exception.ExceptionUtils;import net.sf.json.JSONObject;/*** * @author 沈克强* 20180107*调用百度提供的人脸识别接口进行人脸信息的*入库、检测、识别、库中人脸修改、库中人脸*删除以及相关查询*/
public class FacebaiduMain {/*** 沈克强*人脸信息处理的主方法:向外部提供该方法,*通过传过来的标志进行相关方法的调用*imgStr:人脸信息,经base64转码后的*faceflag:人脸信息处理标志,如下*detect:人脸信息检测*add:向人脸库中增加人脸信息*recognition:人脸识别,判断指定人脸是否在人脸库中*update:修改库中已存在的人脸信息*delete:删除库中指定人脸信息*select:查询库中指定人脸信息* @throws Exception * @throws UnsupportedEncodingException */public void Faceinfomain(String faceflag,String imgStr,String uid,String userinfo) throws Exception{try {//人脸处理类FacebaiduDeal facedeal = new FacebaiduDeal();String imgParam = null;if(faceflag.equals("detect")||faceflag.equals("add")||faceflag.equals("recognition")||faceflag.equals("update")){if(imgStr==null){throw new Exception("人脸信息不能为空!");}imgParam = URLEncoder.encode(imgStr, "UTF-8");}//人脸检测,imgParamif(faceflag.equals("detect")){facedeal.detect(imgParam);}//人脸信息入人脸库if(faceflag.equals("add")){//入库之前先检测下人脸信息是否合规facedeal.detect(imgParam);JSONObject jsonObject = facedeal.faceadd(imgParam, uid, userinfo);if(jsonObject==null){throw new Exception("脸部信息入库失败!");}String errorcode = jsonObject.optString("error_code");if(!errorcode.equals("")){String errormsg = jsonObject.optString("error_msg");System.out.println("errormsg:"+errormsg);throw new Exception("脸部信息入库失败!报错信息为:"+errormsg);}}//人脸信息识别,判断指定人脸是否在人脸库中if(faceflag.equals("recognition")){JSONObject jsonjt = facedeal.facerecognition(imgParam);if(jsonjt.optJSONArray("result")!=null){JSONObject jsonObjectd = JSONObject.fromObject(jsonjt.optJSONArray("result").get(0));String group_id = jsonObjectd.optString("group_id");String uidkc = jsonObjectd.optString("uid");String user_info = jsonObjectd.optString("user_info");String[] jsscores =  jsonObjectd.optString("scores").replace("[", "").replace("]","").split(",");double scores = Double.valueOf(jsscores[0]);if(scores<80){throw new Exception("该人脸信息在人脸库中不存在!");}System.out.println("group_id:"+group_id);System.out.println("uidkc:"+uidkc);System.out.println("user_info:"+user_info);System.out.println("scores:"+scores);}else{String errorcode = jsonjt.optString("error_msg");System.out.println("errorcode:"+errorcode);}}//人脸信息更新if(faceflag.equals("update")){//入库之前先检测下人脸信息是否合规facedeal.detect(imgParam);JSONObject jsonObject = facedeal.faceupdate(imgParam, userinfo,uid);String errorcode = jsonObject.optString("error_code");if(errorcode!=null){String errormsg = jsonObject.optString("error_msg");System.out.println("errormsg:"+errormsg);}jsonObject.optDouble("log_id");}//人脸信息删除if(faceflag.equals("delete")){JSONObject jsonObject = facedeal.facedelete(uid);String errorcode = jsonObject.optString("error_code");if(errorcode!=null){String errormsg = jsonObject.optString("error_msg");System.out.println("errormsg:"+errormsg);}jsonObject.optDouble("log_id");}//人脸信息查询if(faceflag.equals("select")){JSONObject sjson = facedeal.faceselect(uid);if(sjson.optJSONObject("result")!=null){JSONObject jsonObjectd = JSONObject.fromObject(sjson.optJSONObject("result").get(0));String group_id = jsonObjectd.optString("group_id");String uidkc = jsonObjectd.optString("uid");String user_info = jsonObjectd.optString("user_info");System.out.println("group_id:"+group_id);System.out.println("uidkc:"+uidkc);System.out.println("user_info:"+user_info);}else{String errorcode = sjson.optString("error_msg");System.out.println("errorcode:"+errorcode);}}} catch (Exception e) {// TODO Auto-generated catch blockthrow new Exception(ExceptionUtils.getStackTrace(e));}}
}

最后编写test文件。

package com.creating.FaceRecognition;import java.io.IOException;import com.baidu.aip.util.Base64Util;public class FacebaiduTest {public static void main(String[] args) {try {byte[] imgData = FileUtil.readFileByBytes("F:s1.jpg");String imgStr = Base64Util.encode(imgData);FacebaiduMain facedeal = new FacebaiduMain();facedeal.Faceinfomain("select", imgStr, "12345667", "NEW PERSON");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

java 正規表示 group_经验分享|Java+百度AI实现人脸识别相关推荐

  1. 一位工作七年的Java工程师给毕业生的经验分享

    活动地址:毕业季·进击的技术er 一位工作七年的Java工程师给毕业生的经验分享 大学专业与工作? 第一份工作 毕业季职场新人应如何选择工作? 工作中,技术er应如何在技术领域快速成长? 你用过哪些开 ...

  2. Java后端 + 百度SDK实现人脸识别

    Java后端 + 百度SDK实现人脸识别 人工智能越来越贴近我们的生活,相信大家也经常接触到人脸识别,手机付款.app注册验证.门禁等等. 如果要用Java后台使用这些功能,那么需要怎么做呢?请看完下 ...

  3. Day663.大佬学习经验分享 -Java业务开发常见错误

    大佬学习经验分享 Hi,我是阿昌,今天学习记录分析的是关于某大佬的学习经验分享. 大佬工作这些年来,经常会有同学来找大佬沟通学习和成长,他们的问题整体可以归结为两个. 一是,长期参与 CRUD 业务开 ...

  4. Java项目-王者荣耀源码分享~Java项目开发

    众所周知,王者荣耀是近几年大火的游戏! 今天学姐就给大家带来一个Java新项目,王者荣耀!相信在座的各位都有听说过.作为2022年最火的游戏之一,我们学Java的同学们当然不能错过! 在家打王者不如自 ...

  5. java 获取文件大小_利用百度AI OCR图片识别,Java实现PDF中的图片转换成文字

    序言:我们在读一些PDF版书籍的时候,如果PDF中不是图片,做起读书笔记的还好:如果PDF中的是图片的话,根本无法编辑,做起笔记来,还是很痛苦的.我是遇到过了.我们搞技术的,当然得自己学着解决现在的痛 ...

  6. java调用百度AI实现图文识别功能

    一.创建百度应用 1.在浏览器输入网址https://login.bce.baidu.com/或者百度搜索'百度ai'点击第一个.点击主页的产品服务,看到文字识别.如下图所示: 2.点击创建应用 创建 ...

  7. 项目经验分享——Java常用工具类集合 转

    http://blog.csdn.net/xyw591238/article/details/51678525 写在前面 本文涉及的工具类部分是自己编写,另一部分是在项目里收集的.工具类涉及数据库连接 ...

  8. Java开发社招面试经验:java下载安装包

    前言 前段时间,我向一位在阿里的朋友寻求进大厂的秘诀,他分享给我一份阿里内部资料--JAVA核心进阶手册,仔细翻阅一番才知道里面收纳整理的知识可真是齐全,不得不来感叹一番- 我将JAVA核心进阶手册大 ...

  9. java打印 好看的图形_分享java打印简单图形的实现代码

    我们平时都是使用的画图工具进行简单图形的绘制,今天我们使用java打印一些简单的图形 实现代码如下 package test; /** * * @author hanzel * @打印图形 * */ ...

最新文章

  1. Tensorflow 源码安装成功,导入报错 ImportError: cannot import name 'build_info'
  2. mysql等价语句是_Mysql基本语句(个人笔记)
  3. 开源的悲哀——袁萌100天变身实录[2]
  4. Go 语言编程 — net/http — 支持 HTTPS
  5. 剑指Offer——合并两个排序的链表
  6. React 深度学习:ReactFiberLazyComponent
  7. 用Tableau制作滚动时间轴(上)
  8. golang函数:命名返回值代码示例
  9. SAP Spartacus B2B 页面popover对话框的渲染逻辑
  10. Pandas: 使用read_excel、describe、loc方法求极差、变异系数与四分位数间距
  11. Winform 事件
  12. 第3章 关系数据模型
  13. 小米回应设备被谷歌禁用;苹果中国宣布 2019 款 iPad 降价;Wine 5.0-rc4 发布 | 极客头条...
  14. 2019蓝桥杯B组:完全二叉树权值
  15. 【语音去噪】基于matlab低通+自适应滤波去噪【含Matlab源码 352期】
  16. Java根据国家二字码获取国家英文名称,中文名称实例
  17. lda数学八卦_[ LDA主题模型应用和改进组 ] 招募成员
  18. 董桥《南山雨》(选自:旧时月色)
  19. 【按键】[独立按键] - 2:双击
  20. Gradle入门(五)——Gradle其它模块与Plugin插件详解

热门文章

  1. android五子棋设计模板,基于android的五子棋游戏设计
  2. 聚合,组合,继承的区别
  3. Java对json遍历_如何遍历Java中的json对象
  4. 如何在linux当中,大量的添加用户
  5. In_interrupt( ) 和In_irq( )【转】
  6. 【selenium学习笔记一】python + selenium定位页面元素的办法。
  7. VMware中的三种网络模式-----NAT模式
  8. 卡布教你:脸上长痘痘平时要注意什么呢
  9. 【Vegas原创】重建Exchange 2007 OWA的虚拟目录
  10. Operations Manager 2007 监控Active Directory SCOM-Part 3