基于百度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 ...
随机推荐
- 只允许特定IP访问本网站的前端写法
在开发的过程中,有时会遇到只允许特定的几个IP访问.今天来记录一下前端的写法. 首先,引入 <script src="http://pv.sohu.com/cityjson?ie=ut ...
- 安装配置elasticsearch、安装elasticsearch-analysis-ik插件、mysql导入数据到elasticsearch、安装yii2-elasticsearch及使用
一.安装elasticsearch 获取elasticsearch的rpm:wget https://download.elastic.co/elasticsearch/release/org/ela ...
- python3 监控代码变化 自动重启 提高开发效率
#!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = 'Michael Liao' import os, sys, time, sub ...
- 对Kaldi nnet3进行奇异值分解(SVD)以减小模型大小
用处 基于SVD实现模型压缩以适配低功耗平台 根据nnet3bin/nnet3-copy,nnet3-copy或nnet3-am-copy的"--edits-config" ...
- Floyd算法实现总结
问题描述 给出图,求任意两点的最短距离 算法思路 定义n+1个矩阵矩阵A,和记录路径的矩阵path 依次求A0~An的值,最后的An即为最短路径矩阵 // int A[8][7][7],path[7] ...
- BestCoder Round #29 GTY's gay friends
#include <cstdio> #include <cstring> #include <vector> #include <algorithm> ...
- ajax接收json数据到js解析
今天又学到了一点新知识,脑子记不住东西特把它记录下来! 页面ajax请求后台时一般都是返回字符串进行判断,要是返回list或者对象时该怎么办? 第一种:ajax接收到list并返回给前台 js代码: ...
- Eclipse-Java代码规范和质量检查插件-阿里编码规约
此工具配套阿里巴巴Java开发手册:http://www.cnblogs.com/EasonJim/p/6436387.html Eclipse安装和使用方法:https://github.com/a ...
- Ubuntu 16.04安装RapidSVN
使用RabbitVCS有一些不完美,比如没有把文件增加到版本库的功能,导致无法提交等问题,现在再次安装RapidSVN来弥补这些缺点. 安装: sudo apt-get install rapidsv ...
- mybatis xml标签,批量插入
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...