java腾讯AI人脸对比对接代码实例
技术栈:
- Springboot2.x
- 腾讯
- java版本1.8
注意事项:
- 本文内的“**.**”需要自己替换为自己的路径。
- 常量内的“**”需要自己定义自己内容。
- 业务中认证图片,上传至阿里云OSS上
话不多说,直接上代码
1、pom文件:
org.apache.httpcomponents httpclient 4.5.6 com.aliyun.oss aliyun-sdk-oss 2.2.1
2、人脸识别业务:FaceController文件:
packagecom.**.**.controller;
importcom.mb.initial.entity.Test;
importcom.mb.initial.enums.ResultEnum;
importcom.mb.initial.result.Result;
importcom.mb.initial.service.IFaceService;
importcom.mb.initial.util.ResultUtils;
importio.swagger.annotations.Api;
importio.swagger.annotations.ApiOperation;
importio.swagger.annotations.ApiResponse;
importio.swagger.annotations.ApiResponses;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestMethod;
importorg.springframework.web.bind.annotation.RequestParam;
importorg.springframework.web.bind.annotation.RestController;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
/**
*人脸识别业务
*@author:yanjianghua
*@date:2018/11/1616:58
*/
@Api(value="人脸识别业务",description="人脸识别业务")
@ApiResponses(value={@ApiResponse(code=200,message="success",response=Test.class)})
@RequestMapping(value="/1.0/face",method={RequestMethod.GET,RequestMethod.POST})
@RestController
publicclassFaceController{
privateLoggerlog=LoggerFactory.getLogger(FaceController.class);
@Autowired
privateIFaceServicefaceService;
@ApiOperation(value="人脸对比信息接口",notes="人脸对比信息接口")
@RequestMapping(value="/getFaceCompare")
publicResultgetFaceCompare(@RequestParam(value="imageBaseAuthentication",required=false)StringimageBaseAuthentication,
@RequestParam(value="imageBase",required=false)StringimageBase,
HttpServletResponseresponse,
HttpServletRequestrequest)throwsException{
if(imageBaseAuthentication==null||imageBase==null||"".equals(imageBase)||"".equals(imageBaseAuthentication)){
returnResultUtils.response(ResultEnum.PARAMETER_NULL);
}
Objectresult=faceService.getFaceCompare(imageBaseAuthentication,imageBase);
if(result==null){
returnResultUtils.response(ResultEnum.ERROR);
}else{
returnResultUtils.response(result);
}
}
}
3、IFaceService文件:
packagecom.**.**.service;
/**
*
*@author:yanjianghua
*@date:2018/11/1616:49
*/
publicinterfaceIFaceService{
/**
*人脸对比API接口
*@paramimageBaseAuthentication
*@paramimageBase
*@return
*/
publicObjectgetFaceCompare(StringimageBaseAuthentication,StringimageBase);
}
4、逻辑实现类:IFaceServiceImpl
packagecom.**.**.service.impl;
importcom.alibaba.fastjson.JSON;
importcom.alibaba.fastjson.JSONObject;
importcom.**.**.constants.BaseConstants;
importcom.**.**.exception.BillingException;
importcom.**.**.result.HttpClientResult;
importcom.**.**.service.IFaceService;
importcom.**.**.util.HttpClientUtils;
importcom.**.**.util.MD5Utils;
importcom.**.**.util.TencentAISignUtils;
importcom.**.**.util.TimeUtils;
importorg.springframework.stereotype.Service;
importjava.io.IOException;
importjava.util.HashMap;
importjava.util.Map;
/**
*
*@author:yanjianghua
*@date:2018/11/1616:50
*/
@Service
publicclassIFaceServiceImplimplementsIFaceService{
@Override
publicObjectgetFaceCompare(StringimageBaseAuthentication,StringimageBase){
HttpClientResultresult=null;
Mapparams=newHashMap();
params.put("app_id",String.valueOf(BaseConstants.APP_ID_AI_OCR));
params.put("time_stamp",String.valueOf(System.currentTimeMillis()/1000+""));
params.put("nonce_str",MD5Utils.getCharAndNumr(10,3));
params.put("image_a",imageBaseAuthentication);
params.put("image_b",imageBase);
params.put("sign","");
//获取sign
Stringsign=null;
try{
//POST
sign=TencentAISignUtils.getSignature(params);
if(sign==null){
thrownewBillingException("sign错误");
}
params.put("sign",sign);
result=HttpClientUtils.doPost(BaseConstants.FACE_COMPARE_URL,params);
if(result!=null){
System.out.println("===faceCompare===:"+result.getContent());
JSONObjectcontent=JSON.parseObject(result.getContent());
JSONObjectresData=JSON.parseObject(content.getString("data"));
returnresData;
}
}catch(IOExceptione){
e.printStackTrace();
}catch(Exceptione){
e.printStackTrace();
}
returnnull;
}
}
5、http工具类:HttpClientUtils
packagecom.**.**.util;
importjava.io.IOException;
importjava.io.UnsupportedEncodingException;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importjava.util.Map.Entry;
importjava.util.Set;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStream;
importjava.io.OutputStreamWriter;
importjava.net.HttpURLConnection;
importjava.net.URL;
importorg.apache.http.HttpStatus;
importorg.apache.http.NameValuePair;
importorg.apache.http.client.config.RequestConfig;
importorg.apache.http.client.entity.UrlEncodedFormEntity;
importorg.apache.http.client.methods.CloseableHttpResponse;
importorg.apache.http.client.methods.HttpDelete;
importorg.apache.http.client.methods.HttpEntityEnclosingRequestBase;
importorg.apache.http.client.methods.HttpGet;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.client.methods.HttpPut;
importorg.apache.http.client.methods.HttpRequestBase;
importorg.apache.http.client.utils.URIBuilder;
importorg.apache.http.impl.client.CloseableHttpClient;
importorg.apache.http.impl.client.HttpClients;
importorg.apache.http.message.BasicNameValuePair;
importorg.apache.http.util.EntityUtils;
importcom.**.**.result.HttpClientResult;
/**
*Description:httpClient工具类
*
*@authorJourWon
*@dateCreatedon2018年11月30日
*/
publicclassHttpClientUtils{
//编码格式。发送编码格式统一用UTF-8
privatestaticfinalStringENCODING="UTF-8";
//设置连接超时时间,单位毫秒。
privatestaticfinalintCONNECT_TIMEOUT=6000;
//请求获取数据的超时时间(即响应时间),单位毫秒。
privatestaticfinalintSOCKET_TIMEOUT=6000;
/**
*发送get请求;不带请求头和请求参数
*
*@paramurl请求地址
*@return
*@throwsException
*/
publicstaticHttpClientResultdoGet(Stringurl)throwsException{
returndoGet(url,null,null);
}
/**
*发送get请求;带请求参数
*
*@paramurl请求地址
*@paramparams请求参数集合
*@return
*@throwsException
*/
publicstaticHttpClientResultdoGet(Stringurl,Mapparams)throwsException{
returndoGet(url,null,params);
}
/**
*发送get请求;带请求头和请求参数
*
*@paramurl请求地址
*@paramheaders请求头集合
*@paramparams请求参数集合
*@return
*@throwsException
*/
publicstaticHttpClientResultdoGet(Stringurl,Mapheaders,Mapparams)throwsException{
//创建httpClient对象
CloseableHttpClienthttpClient=HttpClients.createDefault();
//创建访问的地址
URIBuilderuriBuilder=newURIBuilder(url);
if(params!=null){
Set>entrySet=params.entrySet();
for(Entryentry:entrySet){
uriBuilder.setParameter(entry.getKey(),entry.getValue());
}
}
//创建http对象
HttpGethttpGet=newHttpGet(uriBuilder.build());
/**
*setConnectTimeout:设置连接超时时间,单位毫秒。
*setConnectionRequestTimeout:设置从connectManager(连接池)获取Connection
*超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。
*setSocketTimeout:请求获取数据的超时时间(即响应时间),单位毫秒。如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。
*/
RequestConfigrequestConfig=RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
httpGet.setConfig(requestConfig);
//设置请求头
packageHeader(headers,httpGet);
//创建httpResponse对象
CloseableHttpResponsehttpResponse=null;
try{
//执行请求并获得响应结果
returngetHttpClientResult(httpResponse,httpClient,httpGet);
}finally{
//释放资源
release(httpResponse,httpClient);
}
}
/**
*发送post请求;不带请求头和请求参数
*
*@paramurl请求地址
*@return
*@throwsException
*/
publicstaticHttpClientResultdoPost(Stringurl)throwsException{
returndoPost(url,null,null);
}
/**
*发送post请求;带请求参数
*
*@paramurl请求地址
*@paramparams参数集合
*@return
*@throwsException
*/
publicstaticHttpClientResultdoPost(Stringurl,Mapparams)throwsException{
returndoPost(url,null,params);
}
/**
*发送post请求;带请求头和请求参数
*
*@paramurl请求地址
*@paramheaders请求头集合
*@paramparams请求参数集合
*@return
*@throwsException
*/
publicstaticHttpClientResultdoPost(Stringurl,Mapheaders,Mapparams)throwsException{
//创建httpClient对象
CloseableHttpClienthttpClient=HttpClients.createDefault();
//创建http对象
HttpPosthttpPost=newHttpPost(url);
/**
*setConnectTimeout:设置连接超时时间,单位毫秒。
*setConnectionRequestTimeout:设置从connectManager(连接池)获取Connection
*超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。
*setSocketTimeout:请求获取数据的超时时间(即响应时间),单位毫秒。如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。
*/
RequestConfigrequestConfig=RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
httpPost.setConfig(requestConfig);
httpPost.setHeader("Content-Type","application/x-www-form-urlencoded");
//设置请求头
/*httpPost.setHeader("Cookie","");
httpPost.setHeader("Connection","keep-alive");
httpPost.setHeader("Accept","application/json");
httpPost.setHeader("Accept-Language","zh-CN,zh;q=0.9");
httpPost.setHeader("Accept-Encoding","gzip,deflate,br");
httpPost.setHeader("User-Agent","Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/65.0.3325.181Safari/537.36");*/
packageHeader(headers,httpPost);
//封装请求参数
packageParam(params,httpPost);
//创建httpResponse对象
CloseableHttpResponsehttpResponse=null;
try{
//执行请求并获得响应结果
returngetHttpClientResult(httpResponse,httpClient,httpPost);
}finally{
//释放资源
release(httpResponse,httpClient);
}
}
/**
*发送put请求;不带请求参数
*
*@paramurl请求地址
*@return
*@throwsException
*/
publicstaticHttpClientResultdoPut(Stringurl)throwsException{
returndoPut(url);
}
/**
*发送put请求;带请求参数
*
*@paramurl请求地址
*@paramparams参数集合
*@return
*@throwsException
*/
publicstaticHttpClientResultdoPut(Stringurl,Mapparams)throwsException{
CloseableHttpClienthttpClient=HttpClients.createDefault();
HttpPuthttpPut=newHttpPut(url);
RequestConfigrequestConfig=RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
httpPut.setConfig(requestConfig);
packageParam(params,httpPut);
CloseableHttpResponsehttpResponse=null;
try{
returngetHttpClientResult(httpResponse,httpClient,httpPut);
}finally{
release(httpResponse,httpClient);
}
}
/**
*发送delete请求;不带请求参数
*
*@paramurl请求地址
*@return
*@throwsException
*/
publicstaticHttpClientResultdoDelete(Stringurl)throwsException{
CloseableHttpClienthttpClient=HttpClients.createDefault();
HttpDeletehttpDelete=newHttpDelete(url);
RequestConfigrequestConfig=RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
httpDelete.setConfig(requestConfig);
CloseableHttpResponsehttpResponse=null;
try{
returngetHttpClientResult(httpResponse,httpClient,httpDelete);
}finally{
release(httpResponse,httpClient);
}
}
/**
*发送delete请求;带请求参数
*
*@paramurl请求地址
*@paramparams参数集合
*@return
*@throwsException
*/
publicstaticHttpClientResultdoDelete(Stringurl,Mapparams)throwsException{
if(params==null){
params=newHashMap();
}
params.put("_method","delete");
returndoPost(url,params);
}
/**
*Description:封装请求头
*@paramparams
*@paramhttpMethod
*/
publicstaticvoidpackageHeader(Mapparams,HttpRequestBasehttpMethod){
//封装请求头
if(params!=null){
Set>entrySet=params.entrySet();
for(Entryentry:entrySet){
//设置到请求头到HttpRequestBase对象中
httpMethod.setHeader(entry.getKey(),entry.getValue());
}
}
}
/**
*Description:封装请求参数
*
*@paramparams
*@paramhttpMethod
*@throwsUnsupportedEncodingException
*/
publicstaticvoidpackageParam(Mapparams,HttpEntityEnclosingRequestBasehttpMethod)
throwsUnsupportedEncodingException{
//封装请求参数
if(params!=null){
Listnvps=newArrayList();
Set>entrySet=params.entrySet();
for(Entryentry:entrySet){
nvps.add(newBasicNameValuePair(entry.getKey(),entry.getValue()));
}
//设置到请求的http对象中
httpMethod.setEntity(newUrlEncodedFormEntity(nvps,ENCODING));
}
}
/**
*Description:获得响应结果
*
*@paramhttpResponse
*@paramhttpClient
*@paramhttpMethod
*@return
*@throwsException
*/
publicstaticHttpClientResultgetHttpClientResult(CloseableHttpResponsehttpResponse,
CloseableHttpClienthttpClient,HttpRequestBasehttpMethod)throwsException{
//执行请求
httpResponse=httpClient.execute(httpMethod);
//获取返回结果
if(httpResponse!=null&&httpResponse.getStatusLine()!=null){
Stringcontent="";
if(httpResponse.getEntity()!=null){
content=EntityUtils.toString(httpResponse.getEntity(),ENCODING);
}
returnnewHttpClientResult(httpResponse.getStatusLine().getStatusCode(),content);
}
returnnewHttpClientResult(HttpStatus.SC_INTERNAL_SERVER_ERROR);
}
/**
*Description:释放资源
*
*@paramhttpResponse
*@paramhttpClient
*@throwsIOException
*/
publicstaticvoidrelease(CloseableHttpResponsehttpResponse,CloseableHttpClienthttpClient)throwsIOException{
//释放资源
if(httpResponse!=null){
httpResponse.close();
}
if(httpClient!=null){
httpClient.close();
}
}
}
6、http响应类
packagecom.**.**.result;
importjava.io.Serializable;
/**
*Description:封装httpClient响应结果
*@author:yanjianghua
*@date:2018/9/1213:45
*/
publicclassHttpClientResultimplementsSerializable{
privatestaticfinallongserialVersionUID=2168152194164783950L;
/**
*响应状态码
*/
privateintcode;
/**
*响应数据
*/
privateStringcontent;
publicHttpClientResult(){
}
publicHttpClientResult(intcode){
this.code=code;
}
publicHttpClientResult(Stringcontent){
this.content=content;
}
publicHttpClientResult(intcode,Stringcontent){
this.code=code;
this.content=content;
}
publicintgetCode(){
returncode;
}
publicvoidsetCode(intcode){
this.code=code;
}
publicStringgetContent(){
returncontent;
}
publicvoidsetContent(Stringcontent){
this.content=content;
}
@Override
publicStringtoString(){
return"HttpClientResult[code="+code+",content="+content+"]";
}
}
7、常量类:BaseConstants
packagecom.**.**.constants;
/**
*常量类
*/
publicclassBaseConstants{
//默认使用的redis的数据库
publicstaticfinalIntegerASSETCENTER_DEFAULT_FLAG=0;
//redis的数据库1库
publicstaticfinalIntegerASSETCENTER_BUSNESS_FLAG=1;
/**
*腾讯AI对外开放平台-APP_ID
*/
publicstaticfinalintAPP_ID_AI_OCR=*********;
/**
*腾讯AI对外开放平台-APP_KEY
*/
publicstaticfinalStringAPP_KEY_AI_OCR="*********";
publicstaticfinalStringOCR_ID_CARD_OCR_URL="https://api.ai.qq.com/fcgi-bin/ocr/ocr_idcardocr";
publicstaticfinalStringOCR_CREDITCARD_OCR_URL="https://api.ai.qq.com/fcgi-bin/ocr/ocr_creditcardocr";
publicstaticfinalStringFACE_COMPARE_URL="https://api.ai.qq.com/fcgi-bin/face/face_facecompare";
publicstaticfinalStringALIYUN_OSS_OBJECT_NAME_OCR="idCardocr/";
publicstaticfinalStringALIYUN_OSS_OBJECT_CREDITCARD_OCR="creditCard/";
publicstaticfinalStringALIYUN_OSS_OBJECT_AUTH_DIR="authentication/";
}
以上所述是小编给大家介绍的java腾讯AI人脸对比对接详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
热门推荐
10 新人红包祝福语简短精辟
11 幼师给毕业祝福语简短
12 生日高考祝福语妹妹简短
13 下飞机祝福语简短英文
14 元宵发客户祝福语简短
15 爸妈金婚文案祝福语简短
16 新郎朋友红包祝福语简短
17 虎年五一祝福语大全简短
18 出阁宴祝福语姐姐简短