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

人工智能越来越贴近我们的生活,相信大家也经常接触到人脸识别,手机付款、app注册验证、门禁等等。

如果要用Java后台使用这些功能,那么需要怎么做呢?请看完下面这篇文章,就能轻松、简单入门了!

手把手教你实现人脸识别、人脸对比

  1. 注册百度账号 https://ai.baidu.com/
    打开网站,注册百度账号并登录。然后按图1的提示进行操作。
    在图1中,选择 “人脸检测” 跳转到 图2。
    在图2中 点击 “立即使用” 然后跳转到 图3。
    在图3中 点击“创建应用” 然后跳转到 图4.
    在图4中 完成应用申请 然后就有了图5(我们最终需要的就是这个 刚创建应用的参数AppID等)

图1:
图2:

图3:

图4:

图5:

  1. Java SDK 文档地址:https://ai.baidu.com/docs#/Face-Java-SDK/top
    这里有详细的API文档。
  2. pom.xml 配置:
     <dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>4.10.0</version></dependency>
  1. 人脸识别java类
    下面的 APPID/AK/SK 改成你的,找2张人像图片在线生成Base64然后复制在下面就可以测试了。
import com.baidu.aip.face.AipFace;
import com.baidu.aip.face.MatchRequest;
import org.apache.commons.codec.binary.Base64;
import org.json.JSONObject;import java.util.ArrayList;
import java.util.HashMap;public class FaceTest {//设置APPID/AK/SKprivate static String APP_ID = "改成你的图5中的参数";private static String API_KEY = "改成你的图5中的参数";private static String SECRET_KEY = "改成你的图5中的参数";public static void main(String[] args) {// 初始化一个AipFaceAipFace client = new AipFace(APP_ID, API_KEY, SECRET_KEY);// 可选:设置网络连接参数client.setConnectionTimeoutInMillis(2000);client.setSocketTimeoutInMillis(60000);// 可选:设置代理服务器地址, http和socket二选一,或者均不设置
//            client.setHttpProxy("proxy_host", proxy_port);  // 设置http代理
//            client.setSocketProxy("proxy_host", proxy_port);  // 设置socket代理/** START  获取读取 图片Base64编码 **/// 方法一:String image1 = "找一张有人脸的图片,在线图片生成Base64编码 然后复制到这里";String image2 = "找一张有人脸的图片,在线图片生成Base64编码 然后复制到这里";// 方法二:/*// 读本地图片byte[] bytes = FileUtils.fileToBytes("D:\\Documents\\Pictures\\fc.jpg");byte[] bytes2 = FileUtils.fileToBytes("D:\\Documents\\Pictures\\fj.jpg");// 将字节转base64String image1 = Base64.encodeBase64String(bytes);String image2 = Base64.encodeBase64String(bytes2);*//** END 获取读取 图片Base64编码 **/// 人脸对比// image1/image2也可以为url或facetoken, 相应的imageType参数需要与之对应。MatchRequest req1 = new MatchRequest(image1, "BASE64");MatchRequest req2 = new MatchRequest(image2, "BASE64");ArrayList<MatchRequest> requests = new ArrayList<MatchRequest>();requests.add(req1);requests.add(req2);JSONObject res = client.match(requests);System.out.println(res.toString(2));// 人脸检测// 传入可选参数调用接口HashMap<String, String> options = new HashMap<String, String>();options.put("face_field", "age");options.put("max_face_num", "2");options.put("face_type", "LIVE");options.put("liveness_control", "LOW");JSONObject res2 = client.detect(image1, "BASE64", options);System.out.println(res2.toString(2));}
}

上面方法二中的相关类:

Base64.encodeBase64String(bytes) 来自 import org.apache.commons.codec.binary.Base64;
FileUtils.fileToBytes(“D:\Documents\Pictures\fc.jpg”);
FileUtils类 如下:

package com.weixin.demo.utils;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.*;public class FileUtils {protected static Logger logger = LoggerFactory.getLogger(FileUtils.class);public static byte[] fileToBytes(String filePath) {byte[] buffer = null;File file = new File(filePath);FileInputStream fis = null;ByteArrayOutputStream bos = null;try {fis = new FileInputStream(file);bos = new ByteArrayOutputStream();byte[] b = new byte[1024];int n;while ((n = fis.read(b)) != -1) {bos.write(b, 0, n);}buffer = bos.toByteArray();} catch (FileNotFoundException ex) {ex.printStackTrace();logger.error("", ex);} catch (IOException ex) {ex.printStackTrace();logger.error("", ex);} finally {try {if (null != bos) {bos.close();}} catch (IOException ex) {ex.printStackTrace();logger.error("", ex);} finally {try {if (null != fis) {fis.close();}} catch (IOException ex) {ex.printStackTrace();logger.error("", ex);}}}return buffer;}public static void bytesToFile(byte[] buffer, final String filePath) {File file = new File(filePath);OutputStream output = null;BufferedOutputStream bufferedOutput = null;try {output = new FileOutputStream(file);bufferedOutput = new BufferedOutputStream(output);bufferedOutput.write(buffer);} catch (FileNotFoundException ex) {ex.printStackTrace();logger.error("", ex);} catch (IOException ex) {ex.printStackTrace();logger.error("", ex);} finally {if (null != bufferedOutput) {try {bufferedOutput.close();} catch (IOException ex) {ex.printStackTrace();logger.error("", ex);}}if (null != output) {try {output.close();} catch (IOException ex) {ex.printStackTrace();logger.error("", ex);}}}}public static void bytesToFile(byte[] buffer, File file) {OutputStream output = null;BufferedOutputStream bufferedOutput = null;try {output = new FileOutputStream(file);bufferedOutput = new BufferedOutputStream(output);bufferedOutput.write(buffer);} catch (FileNotFoundException ex) {ex.printStackTrace();logger.error("", ex);} catch (IOException ex) {ex.printStackTrace();logger.error("", ex);} finally {if (null != bufferedOutput) {try {bufferedOutput.close();} catch (IOException ex) {ex.printStackTrace();logger.error("", ex);}}if (null != output) {try {output.close();} catch (IOException ex) {ex.printStackTrace();logger.error("", ex);}}}}/*** byte数组转换成16进制字符串* * @param src* @return*/public static String bytesToHexString(byte[] src) {StringBuilder stringBuilder = new StringBuilder();if (src == null || src.length <= 0) {return null;}for (int i = 0; i < src.length; i++) {int v = src[i] & 0xFF;String hv = Integer.toHexString(v);if (hv.length() < 2) {stringBuilder.append(0);}stringBuilder.append(hv);}return stringBuilder.toString();}/*** 根据文件流读取图片文件真实类型*/public static String getTypeByBytes(byte[] fileBytes) {byte[] b = new byte[4];System.arraycopy(fileBytes, 0, b, 0, b.length);String type = bytesToHexString(b).toUpperCase();if (type.contains("FFD8FF")) {return "jpg";} else if (type.contains("89504E47")) {return "png";} else if (type.contains("47494638")) {return "gif";} else if (type.contains("49492A00")) {return "tif";} else if (type.contains("424D")) {return "bmp";}return type;}public static String getTypeByFile(File file) {String fileName = file.getName();return fileName.substring(fileName.lastIndexOf(".") + 1);}public static String getTypeByFilePath(String filePath) {return filePath.substring(filePath.lastIndexOf(".") + 1);}public static byte[] toByteArray(InputStream input) throws IOException {ByteArrayOutputStream output = new ByteArrayOutputStream();byte[] buffer = new byte[4096];int n = 0;while (-1 != (n = input.read(buffer))) {output.write(buffer, 0, n);}return output.toByteArray();}}

“人脸对比” 测试结果:
主要看 score 参数,越高越匹配。满分100分。

0 [main] INFO com.baidu.aip.client.BaseClient  - get access_token success. current state: STATE_AIP_AUTH_OK
2 [main] DEBUG com.baidu.aip.client.BaseClient  - current state after check priviledge: STATE_TRUE_AIP_USER
{"result": {"score": 90.39932251,"face_list": [{"face_token": "594b9857e1bc1a6f0bb6fa7183ca962d"},{"face_token": "f552428debe38d54081dfbce5d6d6e1e"}]},"log_id": 1345050756015080031,"error_msg": "SUCCESS","cached": 0,"error_code": 0,"timestamp": 1565601508
}

“人脸检测” 测试结果:

{"result": {"face_num": 1,"face_list": [{"liveness": {"livemapscore": 1},"angle": {"roll": -3.24,"pitch": 13.22,"yaw": 7.82},"face_token": "594b9857e1bc1a6f0bb6fa7183ca962d","location": {"top": 570.86,"left": 197.56,"rotation": 1,"width": 339,"height": 325},"face_probability": 1,"age": 23}]},"log_id": 1368654456015085521,"error_msg": "SUCCESS","cached": 0,"error_code": 0,"timestamp": 1565601508
}

人脸检测 相关请求参数、返回参数解释。(详情请访问第2点的SDK地址:即 https://ai.baidu.com/docs#/Face-Java-SDK/top)


人脸对比 相关请求参数、返回参数解释。(详情请访问第2点的SDK地址:即 https://ai.baidu.com/docs#/Face-Java-SDK/top)

Java后端 + 百度SDK实现人脸识别相关推荐

  1. java 正規表示 group_经验分享|Java+百度AI实现人脸识别

    之前尝试用python+opencv实现过人脸识别,接下来我们使用Java+百度AI来实现人脸识别的尝试. I 注册百度开放平台账号 打开百度AI官方网站(https://ai.baidu.com/? ...

  2. java用虹软人脸识别SDK实现人脸识别,运行ArcSoft的Java版本Demo出错,未检出人脸

    java.lang.UnsatisfiedLinkError: Can't load library: d:\face_libs\libarcsoft_ java用虹软人脸识别SDK实现人脸识别 网上 ...

  3. java用虹软人脸识别SDK实现人脸识别,运行ArcSoft的Java版本Demo出错,未检出人脸(已解决)

    java用虹软人脸识别SDK实现人脸识别,运行ArcSoft的Java版本Demo出错,未检出人脸问题已解决!!! 原因: 虹软人脸识别SDK版本问题! 下载的java版本的demo的SDK是arcs ...

  4. 基于RTSP视频流的Java后台服务端虹软人脸识别

    1 概述       人脸识别技术是随着技术发展而产生的生物识别技术,目前已广泛应用于安防领域,主要用于身份验证和身份识别.视频监控是安防系统常见的一种表现形式,需要部署各种摄像头,包括网络摄像头IP ...

  5. SpringBoot集成百度AI实现人脸识别

    文章目录 1. 百度AI开放平台 2. 文档集成 3. 代码实现 3.1 创建SpringBoot工程 3.2 添加百度AI依赖 3.3 创建AipFace 3.4 注册人脸接口 3.5 人脸登录接口 ...

  6. 百度智能云人脸识别java_demo完整实例

    1.首先需要注册百度智能云服务,注册完登录之后 找到对应的人脸识别云服务. 2.点击立即使用 3.创建应用 4.领取免费的api接口服务 5.领取完成之后,创建自己的应用,填写必填项之后创建即可 6. ...

  7. JAVA 调用摄像头 拍照 实现人脸识别

    JAVA 调用摄像头 拍照 实现人脸识别 今天想试试百度的api 实现一下近年的热点,人脸识别,虽然咱不会,百度会呀,还免费给我无限用呀. 注册百度云账号等:略. Java中调用摄像头,网上搜到两种方 ...

  8. 使用百度云的人脸识别API实现两张照片是否为同一人的判断

    今天是小编第一次使用百度云的人脸识别API,小编是个小白,一路坎坷,经过一天的学习与研究,终于实现了这个功能. 1.下面是在这个过程中使用的所有的工具: IntelliJ IDEA(Java的开发工具 ...

  9. 树莓派+百度api实现人脸识别

    title: 树莓派+百度api实现人脸识别 tags: 树莓派 date: 2018-5-31 20:06:00 --- 树莓派对接百度api 我以前玩安卓的时候一直用的讯飞的平台和api,对于百度 ...

最新文章

  1. printf格式化输出几点注记
  2. ​简单四步,快速判断真菌是否成功侵染宿主植物
  3. 关于ES性能调优几件必须知道的事
  4. linux查看python线程,Python多线程详解
  5. USTC服务器使用笔记
  6. 【CV冬季划】终极进阶,超30个项目实战+3本书+3年知识星球
  7. mysql 10分钟_10分钟入门mysql(含常用的sql语句,mysql常见问题及解决方案)
  8. linux rmp命令安装包在哪里_rpm命令_Linux rpm 命令用法详解:RPM软件包的管理工具...
  9. 算法导论 算法_算法导论
  10. 【华为云技术分享】“敏捷+ DevOps”先行,效能提升助推企业升级
  11. Java MinIO文件上传返回访问路径及访问配置
  12. 如何提取多层json数据 python_Postgre数据库字段Json内容提取(基于Python)
  13. Service绑定模式
  14. Eclipse运行慢
  15. Hibernate入门详细教程
  16. VS2015社区版资源
  17. 计算机硬盘被制成动态硬盘,win10系统基本磁盘转换成动态磁盘的处理办法
  18. 新西兰计算机科学硕士哪所大学最好,2020年新西兰哪些大学计算机科学专业比较好及其优势介绍...
  19. 内存数据网格IMDG简单介绍
  20. SAP顾问的转型之路

热门文章

  1. [转载] java-继承和多态
  2. java clock计时_Java Clock类| offset()方法与示例
  3. python 示例_Python日历类| yeardatescalendar()方法与示例
  4. python两个中文队列比较_具有两个优先级的优先级队列Python
  5. php 同一行,php – 如何在同一行中对类方法进行多个调用?
  6. lambda python_Python | Lambda和filter()与示例
  7. Spyder:Python中机器学习的强大武器
  8. js 数组添加n次相同元素_数组中两次出现相同元素之间的最大距离
  9. 不错!SpringBoot发布Jar包优化瘦身指南!
  10. 【python】获取PC机公网IP并发送至邮箱