编写demo之前首先浏览官方API:http://ai.baidu.com/docs#/Face-API/top

下面是源码:

package com.examsafety.test;

import com.examsafety.test.baiduAi.Base64Util;
import com.examsafety.test.baiduAi.FileUtil;
import com.examsafety.test.baiduAi.HttpUtil;
import net.sf.json.JSONObject; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; /**
* 百度AI人脸识别demo
*
* @author Libin
* @create 2017-12-20 16:35
* @Copyright: www.sinotn.com. All rights reserved.
**/
public class FaceAiDemo {
/**
* 百度云AK
*/
private static final String API_KEY = "你的AK";
/**
* 百度云SK
*/
private static final String SECRET_KEY = "你的SK";
/**
* 获取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"; public static void main(String[] args){
testDetect();
}
/**
* 人脸探测调用方法
*/
public static void testDetect(){
/**
* 照片路径集合:正式项目时可从数据库获取
*/
List<String> filePathList = new ArrayList<String>();
filePathList.add("C:\\Users\\Libin\\Desktop\\张三.jpg");
filePathList.add("C:\\Users\\Libin\\Desktop\\李四.jpg"); String imgFilePath = "";
String expressionStr = "";
String glassesStr = "";
for (String imgPathStr : filePathList){
JSONObject jsonObject = JSONObject.fromObject(detect(imgPathStr).optJSONArray("result").get(0));
/**
* 获取年龄、颜值分数、微笑程度、是否戴眼镜
*/
double age = jsonObject.optDouble("age");
double beauty = jsonObject.optDouble("beauty");
int expression = jsonObject.optInt("expression");
int glasses = jsonObject.optInt("glasses"); switch (expression){
case 0 : expressionStr = "不笑";
break;
case 1 : expressionStr = "微笑";
break;
case 2 : expressionStr = "大笑";
break;
default: expressionStr = "无法识别";
} switch (glasses){
case 0 : glassesStr = "无眼镜";
break;
case 1 : glassesStr = "普通眼镜";
break;
case 2 : glassesStr = "墨镜";
break;
default: glassesStr = "无法识别";
}
/**
* 控制台打印输出探测结果
* Tips:年龄默认为double,需用Math.round()四舍五入取整
*/
System.out.println("年龄:" + Math.round(age));
System.out.println("微笑程度:" + expressionStr);
System.out.println("眼镜:" + glassesStr);
System.out.println("颜值打分:" + beauty); } } /**
* 重要提示代码中所需工具类
* FileUtil,Base64Util,HttpUtil,GsonUtils请从
* https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
* https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
* https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
* https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
* 下载
*/
/**
* 人脸探测
* @return
*/
public static JSONObject detect(String filePath) {
JSONObject jsonObject = null;
try {
byte[] imgData = FileUtil.readFileByBytes(filePath);
String imgStr = Base64Util.encode(imgData);
String imgParam = URLEncoder.encode(imgStr, "UTF-8");
String param = "max_face_num=" + 5
+ "&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);
return jsonObject;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 获取权限token
* @return
*/
public static 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;
}
}

控制台打印:

基于百度AI人脸识别技术的Demo的更多相关文章

  1. 基于 HTML5 的人脸识别技术

    基于 HTML5 的人脸识别技术 https://github.com/auduno/headtrackr/

  2. 基于C# 调用百度AI 人脸识别

    一.设置 登录百度云控制台,添加应用-添加人脸识别,查找,对比等. 记住API Key和Secret Key 二.创建Demo程序 1.使用Nuget安装 Baidu.AI 和 Newtonsoft. ...

  3. 百度AI人脸识别的学习总结

    本文主要分以下几个模块进行总结分析 项目要求:运用百度AI(人脸识别)通过本地与外网之间的信息交互(MQService),从而通过刷脸实现登陆.签字.会议签到等: 1.准备工作: 内网:单击事件按钮— ...

  4. 技能节-AI人脸识别

    我们收到技能节项目的通知是在两周之前,项目要求做个人脸评分系统. 两周时间写一个"人脸评分系统",好像时间比较紧了,还好我们完成了~这个项目是将摄像头捕获到的包含人脸的图像传输到百 ...

  5. 基于百度AI开放平台的人脸识别及语音合成

    基于百度AI的人脸识别及语音合成课题 课题需求 (1)人脸识别 在Web界面上传人的照片,后台使用Java技术接收图片,然后对图片进行解码,调用云平台接口识别人脸特征,接收平台返回的人员年龄.性别.颜 ...

  6. 基于Arcface 免费离线人脸识别 2.0 Demo C#

    本来打算做个C#版demo,但没用成功.使用虹软最新人脸识别技术开发完成 过程如下: 1. 传入一张单人脸照片: 2.调用检测人脸函数ASFDetectFaces,成功返回人脸信息的指针: 3.使用 ...

  7. python基于百度AI开发文字识别

    很多场景都会用到文字识别,比如app或者网站里都会上传身份证等证件以及财务系统识别报销证件等等 第一步,你需要去百度AI里去注册一个账号,然后新建一个文字识别的应用 然后你将得到一个API Key 和 ...

  8. 人脸识别最新开发经验demo分享

    本来打算做个C#版demo,但没用成功,基于虹软的免费人脸识别技术 过程如下: 1. 传入一张单人脸照片: 2.调用检测人脸函数ASFDetectFaces,成功返回人脸信息的指针: 3.使用 Mar ...

  9. 基于 OpenCV 的人脸识别

    基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...

随机推荐

  1. 【原】简单shell练习(二)

    1.查找awk # cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7 ...

  2. PHP 下基于 php-amqp 扩展的 RabbitMQ 简单用例 (三) -- Header Exchange

    此模式下,消息的routing key 和队列的 routing key 会被完全忽略,而是在交换机推送消息和队列绑定交换机时, 分别为消息和队列设置 headers 属性, 通过匹配消息和队列的 h ...

  3. Myeclipse中dubug调试出现参数显示的框

    1.步骤: window>show view>variables 结果:

  4. Project Euler

    Euler 34 答案:40730 我用程序算了无数次都是145,蛋疼,最后拿别人的程序仔细对比…… 原来 !=…… 真蛋疼,我竟然连基础数学都忘了 Euler-44 根据公式容易得出:Pmin + ...

  5. Python Pandas库的学习(一)

    今天我们来学习一下Pandas库,前面我们讲了Numpy库的学习 接下来我们学习一下比较重要的库Pandas库,这个库比Numpy库还重要 Pandas库是在Numpy库上进行了封装,相当于高级Num ...

  6. python 列表(二)

     列表的其他操作 count 用于统计列表中某个元素出现的次数 Eg: extend 把一个列表添加到另一个列表里面 Index 输出元素的位置即根据内容索引位置 Reverse 把列表元素的位置倒过 ...

  7. Node.js & module system

    Node.js & module system Node.js v10.9.0 Documentation https://nodejs.org/api/modules.html#module ...

  8. 【BZOJ4868】期末考试(整数三分)

    题意: 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天 或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待 ...

  9. cdq分治入门--BZOJ1492: [NOI2007]货币兑换Cash

    n<=100000天,一开始有s块钱,每天股票A价格ai,B价格bi,每天可以做的事情:卖出股票:按A:B=RTi的比例买入股票.问最后的最大收益.股票可以为浮点数,答案保留三位. 用脚指头想想 ...

  10. hdu - 1394 Minimum Inversion Number(线段树水题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1394 很基础的线段树. 先查询在更新,如果后面的数比前面的数小肯定会查询到前面已经更新过的值,这时候返回的sum ...