基于百度AI人脸识别技术的Demo
编写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的更多相关文章
- 基于 HTML5 的人脸识别技术
基于 HTML5 的人脸识别技术 https://github.com/auduno/headtrackr/
- 基于C# 调用百度AI 人脸识别
一.设置 登录百度云控制台,添加应用-添加人脸识别,查找,对比等. 记住API Key和Secret Key 二.创建Demo程序 1.使用Nuget安装 Baidu.AI 和 Newtonsoft. ...
- 百度AI人脸识别的学习总结
本文主要分以下几个模块进行总结分析 项目要求:运用百度AI(人脸识别)通过本地与外网之间的信息交互(MQService),从而通过刷脸实现登陆.签字.会议签到等: 1.准备工作: 内网:单击事件按钮— ...
- 技能节-AI人脸识别
我们收到技能节项目的通知是在两周之前,项目要求做个人脸评分系统. 两周时间写一个"人脸评分系统",好像时间比较紧了,还好我们完成了~这个项目是将摄像头捕获到的包含人脸的图像传输到百 ...
- 基于百度AI开放平台的人脸识别及语音合成
基于百度AI的人脸识别及语音合成课题 课题需求 (1)人脸识别 在Web界面上传人的照片,后台使用Java技术接收图片,然后对图片进行解码,调用云平台接口识别人脸特征,接收平台返回的人员年龄.性别.颜 ...
- 基于Arcface 免费离线人脸识别 2.0 Demo C#
本来打算做个C#版demo,但没用成功.使用虹软最新人脸识别技术开发完成 过程如下: 1. 传入一张单人脸照片: 2.调用检测人脸函数ASFDetectFaces,成功返回人脸信息的指针: 3.使用 ...
- python基于百度AI开发文字识别
很多场景都会用到文字识别,比如app或者网站里都会上传身份证等证件以及财务系统识别报销证件等等 第一步,你需要去百度AI里去注册一个账号,然后新建一个文字识别的应用 然后你将得到一个API Key 和 ...
- 人脸识别最新开发经验demo分享
本来打算做个C#版demo,但没用成功,基于虹软的免费人脸识别技术 过程如下: 1. 传入一张单人脸照片: 2.调用检测人脸函数ASFDetectFaces,成功返回人脸信息的指针: 3.使用 Mar ...
- 基于 OpenCV 的人脸识别
基于 OpenCV 的人脸识别 一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenC ...
随机推荐
- php基础查找算法
1.顺序查找 function line_search($array,$tar) { if(!is_array($array) || count($array) < 1) return fals ...
- filezilla server FTP 安装报错 "could not load TLS network. Aborting start of administration interface"
filezilla server FTP 安装报错 "could not load TLS network. Aborting start of administration inter ...
- IIS启用32位应用程序兼容
针对服务器出现html和jsp页面都可以应用,但唯独asp页面打不开的一种情况 win7的IIS运行在32状态下,原因是ASP程序必须在32位下才能使用ACCESS 设置办法: 打开IIS管理器,点应 ...
- js正则表达式,只允许输入纯数字或‘/’
//输入框,限数字和/----需要多个数量询价,请以/分隔 function onlyonce(obj) {//先把非数字的都替换掉,除了数字和.obj.value = obj.value.repla ...
- 服务器端编程心得(二)—— Reactor模式
最近一直在看游双的<高性能linux服务器编程>一书,下载链接: http://download.csdn.net/detail/analogous_love/9673008 书上是这么介 ...
- jQuery的鼠标移入与移出事件
mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件. 只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. mouseou ...
- Java 读取linux上的文件
今天遇到一个问题,在Windows环境上开发,测试环境和正式环境服务器都是linux: 一个导出表格的功能,在本地没问题,发布到linux服务器就报找不到文件问题,但是模板文件已经在linux下了.刚 ...
- python 库文件版本收集及安装
版本收集:pip freeze > require.txt版本安装:pip install -r require.txt
- LeetCode 123. Best Time to Buy and Sell Stock III (stock problem)
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- 又一个ajax实例,结合jQuery
又一个ajax实例,配合jQuery html <!DOCTYPE html> <html lang="zh-cn"> <head> < ...