百度人脸识别api php demo,百度人脸识别api实现及demo
要说人脸检测、识别国内最好的还是face++,但是无奈,face++的技术支持太差了,既没有交流群,技术支持邮件也没人理。没办法,最后尝试使用百度的。
注意,虽然该服务表面上是免费的,但是对象存储BOS 是收费的,没有bos你没办法上传图片,不过也很便宜。
百度的人脸识别使用了rest风格的api,只需要简单的http请求即可。整个api的难点在于权限认证,
足足调了2天。
权限认证实现:
package com.baidubce;
import java.io.UnsupportedEncodingException;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Hex;
/**
* 认证字符串生成
* @author pc
*
*/
public class BceAuthString {
/**
* 生成BceAuthString(认证字符串)
*/
public String createBceAuthString(String accessKeyID, String secretAccessKey, String httpMethod, String path, Map header, String UTCTime){
String authStringPrefix = "bce-auth-v1/{accessKeyId}/{timestamp}/{expirationPeriodInSeconds}";
authStringPrefix = authStringPrefix.replace("{accessKeyId}", accessKeyID);
authStringPrefix = authStringPrefix.replace("{timestamp}", UTCTime);
authStringPrefix = authStringPrefix.replace("{expirationPeriodInSeconds}", "1800");
String canonicalRequest = this.createCanonicalRequest(httpMethod, path, header);
String signingKey = this.createSigningKey(secretAccessKey, authStringPrefix);
String signature = this.createSignature(signingKey, canonicalRequest);
String signedHeaders = createSignedHeaders(header);
String bceAuthString = authStringPrefix + "/" + signedHeaders + "/" + signature;
return bceAuthString;
}
/**
* 创建CanonicalRequest
* CanonicalRequest = HTTP Method + "\n" + CanonicalURI + "\n" + CanonicalQueryString + "\n" + CanonicalHeaders
*/
private String createCanonicalRequest(String httpMethod, String path, Map header){
httpMethod = httpMethod.toUpperCase();
if(path == null || path.trim().equals(""))
path = "";
String canonicalURI = path;
String canonicalQueryString = "";
int index = path.indexOf("?");
if(index != -1){
canonicalURI = path.substring(0, index);
canonicalQueryString = path.substring(index + 1);
}
//生成CanonicalURI
if(!canonicalURI.startsWith("/"))
canonicalURI = "/" + canonicalURI;
canonicalURI = uriEncode(canonicalURI, false);
//生成CanonicalQueryString
String[] queryArray = canonicalQueryString.split("&");
for(int i = 0; i
String item = queryArray[i];
if(item == null || item.trim().equals(""))
continue;
String key = item.split("=")[0];
String value = item.split("=")[1];
key = uriEncode(key, true);
value = uriEncode(value, true);
queryArray[i] = key + "=" + value;
}
Arrays.sort(queryArray);
StringBuffer sb = new StringBuffer();
for(int i = 0; i
String item = queryArray[i];
if(item == null || item.trim().equals(""))
continue;
sb.append(item + "&");
}
if(sb.length() > 0)
sb.deleteCharAt(sb.length() - 1);
canonicalQueryString = sb.toString();
//生成CanonicalHeaders
String[] headerArray = new String[header.size()];
index = 0;
for (Map.Entry entry : header.entrySet()) {
String key = entry.getKey().toLowerCase();
String value = entry.getValue().trim();
headerArray[index] = uriEncode(key, true) + ":" + uriEncode(value, true);
index++;
}
Arrays.sort(headerArray);
sb = new StringBuffer();
for(int i = 0; i
String item = headerArray[i];
sb.append(item + "\n");
}
String canonicalHeaders = sb.toString();
if(canonicalHeaders.length() > 0)
canonicalHeaders = canonicalHeaders.substring(0, canonicalHeaders.lastIndexOf("\n"));
return httpMethod + "\n" + canonicalURI + "\n" + canonicalQueryString + "\n" + canonicalHeaders;
}
/**
* 生成SigningKey
* @param input
* @param encodeSlash
* @return
*/
private String createSigningKey(String secretAccessKey, String authStringPrefix){
String signingKey = sha256Hex(secretAccessKey, authStringPrefix);
return signingKey;
}
/**
* 生成Signature
* @param input
* @param encodeSlash
* @return
*/
private String createSignature(String signingKey, String canonicalRequest){
String signature = sha256Hex(signingKey, canonicalRequest);
return signature;
}
/**
* 创建signedHeaders
* @param input
* @param encodeSlash
* @return
*/
private String createSignedHeaders(Map header){
String[] headerArray = new String[header.size()];
int index = 0;
for (Map.Entry entry : header.entrySet()) {
String key = entry.getKey().toLowerCase();
headerArray[index] = key;
index++;
}
Arrays.sort(headerArray);
StringBuffer sb = new StringBuffer();
for(int i = 0; i
String item = headerArray[i];
sb.append(item + ";");
}
if(sb.length() > 0)
sb.deleteCharAt(sb.length() - 1);
String signedHeaders = sb.toString();
return signedHeaders;
}
public String uriEncode(CharSequence input, boolean encodeSlash) {
StringBuilder result = new StringBuilder();
try {
for (int i = 0; i
char ch = input.charAt(i);
if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9') || ch == '_' || ch == '-' || ch == '~' || ch == '.') {
result.append(ch);
} else if (ch == '/') {
result.append(encodeSlash ? "%2F" : ch);
} else {
result.append(toHexUTF8(ch));
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result.toString();
}
private String toHexUTF8(char c){
try {
byte[] b = String.valueOf(c).getBytes(BceConstants.ENCODING);
for (int j = 0; j
int k = b[j];
if (k
k += 256;
return "%" + Integer.toHexString(k).toUpperCase();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
private String sha256Hex(String signingKey, String stringToSign) {
try {
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(signingKey.getBytes(BceConstants.ENCODING), "HmacSHA256"));
return new String(Hex.encodeHex(mac.doFinal(stringToSign.getBytes(BceConstants.ENCODING))));
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
}
百度人脸识别api php demo,百度人脸识别api实现及demo相关推荐
- 人脸表情识别 微信小程序 百度智能云人脸识别API(含完整项目文件)
展示 界面展示 正下方三个按钮: 左边:切换前后置摄像头 中间:拍照 右边:选择相册 识别结果展示 图像中有人脸时显示识别结果: 图像中无人脸时不显示识别结果: 获取百度智能云人脸识别API 1.进入 ...
- 基于百度云人脸识别API与opencv的人脸识别系统
基于百度云人脸识别API与opencv的人脸识别系统 简介 弄这个东西是因为参加了学校的项目,第一次开发做的不是很好. 本系统是基于百度云人脸识别API.opencv级联器.PYQT5进行开发.百度云 ...
- 树莓派人脸识别python_树莓派调用百度人脸识别API实现人脸识别
前言 树莓派配置OpenCV,配置起来有点繁琐且耗时,调用百度智能云的人脸识别API是一个很好的解决方案 接上摄像头的树莓派.png 一.申请AppID.API Key和Secret Key 1.1 ...
- 基于Emgu CV+百度人脸识别,实现视频动态 人脸抓取与识别
背景 目前AI 处于风口浪尖,作为 公司的CTO,也作为自己的技术专研,开始了AI之旅,在朋友圈中也咨询 一些大牛对于AI 机器学习框架的看法,目前自己的研究方向主要开源的 AI 库,如:Emgu C ...
- 【java】调用百度开发平台ai接口,完成人脸识别(人脸搜索、人脸对比、人脸检测等)功能--------超详细,适合小白
基本流程理解: 我们要使用百度提供的接口去实现某些功能,大致流程如下: 1.注册百度开放平台帐号: 浏览器打开http://ai.baidu.com/,进入百度ai的页面,点击右上角的控制台按钮进行登 ...
- 百度人脸识别技术应用001---百度人脸识别应用业务介绍
1.最近在做人脸识别方面的APP,百度人脸识别分为,人脸识别离线SDK,需要输入序列号才能使用. 还有,在线API,关于,人脸识别离线SDK,前面已经在,AndroidStudio相关的文章中,写到了 ...
- 【API调用】人脸检测+人脸属性(旷视 / 百度)
文章目录 1 简介 2 旷视 face++ 2.1 注册 [获得 API Key](https://console.faceplusplus.com.cn/app/apikey/list) 2.2 调 ...
- 人脸检测颜值软件_百度AI人脸识别测颜值源码
百度AI人脸识别测颜值由百度AI官方推出百度AI人脸识别测颜值源码,目前已将人脸识别氛围V2和V3两个接口,使用前需要参考相应的文档权限来选择接口类型.今天为大家带来的源码,就是让大家能够了解学习到百 ...
- 人脸检测颜值软件_百度AI人脸识别颜值-百度AI人脸识别测颜值源码下载-西西软件下载...
百度AI人脸识别测颜值由百度AI官方推出,目前已将人脸识别氛围V2和V3两个接口,使用前需要参考相应的文档权限来选择接口类型.本次为大家带来百度AI人脸识别测颜值平台源码资源下载,相关的测量源码数据都 ...
- 百度AI人脸检测测颜值php,百度AI人脸识别测颜值源码app
百度AI人脸识别测颜值源码app是由百度AI官方提供的,将人脸识别分为了两个接口,v2与vv3.需要根据文档权限来选择接口类型,这款软件非常方便用户学习和体验.想要学习相关信息的朋友可以来看看哦. 百 ...
最新文章
- 关于SQL语言的初步认识
- yii2 nginx去掉index.php?r=
- 记一次线上偶现的循环依赖问题
- linux u8 头文件,2019-12-11 转载TCP/IP编程常用C语言头文件
- 【linux】zip unzip
- linux 常用参数,Linux 常用命令及参数整理
- OpenCV中基本数据结构(7)_Vec
- 手把手教你从零开始搭建个人博客,20分钟上手
- 程序员的“三十而已”,你都30岁了,职业该如何规划?
- 【清橙 A1206】小Z的袜子(莫队算法)
- 怎么分析出京东快递物流多次派件的单号
- html5 打气球小游戏,javascript开发打气球小游戏
- oracle sql 分区查询语句_Oracle SQL调优之分区表
- MySQL:环境搭建,初识数据库----Datawhale第一次打卡笔记
- 【实用工具系列之爬虫】python实现爬取代理IP(防 ‘反爬虫’)
- 我们对Google的排名算法到底了解多少?
- 2.1.3 列表推导式
- 华为任正非老爷子的一番话,听得我不寒而栗
- Ansys Speos | 新型计算方法:使用 GPU 提升计算速率
- 【Gaze】Generating Image Descriptions via Sequential Cross-Modal Alignment Guided by Human Gaze
热门文章
- 测试框架 Mocha 实例教程
- 文件大小与占用空间大小(附带字节转KB,MB公式)
- Cascading Style Sheet层叠样式表
- vue v-modle实现组件之间的动态传值
- 使用SwipeRecyclerView配合下拉刷新出现Scrapped or attached views may not be recycled. isScrap:false isAttached:
- 2W+字系统讲解如何用Python自动化操作PPT,学懂这篇文章就够了
- 【多多情报通】看完让人焕然大悟的6种拼多多店铺玩法
- Python也有对象了哈哈哈哈哈哈嗝
- 华硕路由 ac ax_【路由器】华硕网络开启802.11ax电竞生态
- 真实渗透改编--综合渗透 sql注入写马+文件上传+udf提权 安鸾靶场SQL注入学习