java腾讯AI人脸对比对接代码实例

网友投稿 402 2023-01-10


java腾讯AI人脸对比对接代码实例

技术栈:

Spring boot 2.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文件:

package com.**.**.controller;

import com.mb.initial.entity.Test;

import com.mb.initial.enums.ResultEnum;

import com.mb.initial.result.Result;

import com.mb.initial.service.IFaceService;

import com.mb.initial.util.ResultUtils;

import io.swagger.annotations.Api;

import io.swagger.annotations.ApiOperation;

import io.swagger.annotations.ApiResponse;

import io.swagger.annotations.ApiResponses;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* 人脸识别业务

* @author: yanjianghua

* @date: 2018/11/16 16: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

public class FaceController {

private Logger log = LoggerFactory.getLogger(FaceController.class);

@Autowired

private IFaceService faceService;

@ApiOperation(value = "人脸对比信息接口", notes = "人脸对比信息接口")

@RequestMapping(value = "/getFaceCompare")

public Result getFaceCompare(@RequestParam(value = "imageBaseAuthentication", required = false) String imageBaseAuthentication,

@RequestParam(value = "imageBase", required = false) String imageBase,

HttpServletResponse response,

HttpServletRequest request) throws Exception{

if (imageBaseAuthentication == null || imageBase == null || "".equals(imageBase) || "".equals(imageBaseAuthentication)) {

return ResultUtils.response(ResultEnum.PARAMETER_NULL);

}

Object result = faceService.getFaceCompare(imageBaseAuthentication, imageBase);

if(result == null){

return ResultUtils.response(ResultEnum.ERROR);

}else{

return ResultUtils.response(result);

}

}

}

3、IFaceService文件:

package com.**.**.service;

/**

*

* @author: yanjianghua

* @date: 2018/11/16 16:49

*/

public interface IFaceService {

/**

* 人脸对比API接口

* @param imageBaseAuthentication

* @param imageBase

* @return

*/

public Object getFaceCompare(String imageBaseAuthentication, String imageBase);

}

4、逻辑实现类:IFaceServiceImpl

package com.**.**.service.impl;

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONObject;

import com.**.**.constants.BaseConstants;

import com.**.**.exception.BillingException;

import com.**.**.result.HttpClientResult;

import com.**.**.service.IFaceService;

import com.**.**.util.HttpClientUtils;

import com.**.**.util.MD5Utils;

import com.**.**.util.TencentAISignUtils;

import com.**.**.util.TimeUtils;

import org.springframework.stereotype.Service;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

/**

*

* @author: yanjianghua

* @date: 2018/11/16 16:50

*/

@Service

public class IFaceServiceImpl implements IFaceService {

@Override

public Object getFaceCompare(String imageBaseAuthentication, String imageBase){

HttpClientResult result = null;

Map params = new HashMap();

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

String sign = null;

try {

//POST

sign = TencentAISignUtils.getSignature(params);

if(sign == null) {

throw new BillingException("sign错误") ;

}

params.put("sign", sign);

result = HttpClientUtils.doPost(BaseConstants.FACE_COMPARE_URL, params);

if(result != null) {

System.out.println("===faceCompare===:" + result.getContent());

JSONObject content = JSON.parseObject(result.getContent());

JSONObject resData = JSON.parseObject(content.getString("data"));

return resData;

}

} catch (IOException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

}

5、http工具类:HttpClientUtils

package com.**.**.util;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Set;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.net.HttpURLConnection;

import java.net.URL;

import org.apache.http.HttpStatus;

import org.apache.http.NameValuePair;

import org.apache.http.client.config.RequestConfig;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpDelete;

import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.client.methods.HttpPut;

import org.apache.http.client.methods.HttpRequestBase;

import org.apache.http.client.utils.URIBuilder;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.message.BasicNameValuePair;

import org.apache.http.util.EntityUtils;

import com.**.**.result.HttpClientResult;

/**

* Description: httpClient工具类

*

* @author JourWon

* @date Created on 2018年11月30 日

*/

public class HttpClientUtils {

//编码格式。发送编码格式统一用UTF-8

private static final String ENCODING = "UTF-8";

//设置连接超时时间,单位毫秒。

private static final int CONNECT_TIMEOUT = 6000;

//请求获取数据的超时时间(即响应时间),单位毫秒。

private static final int SOCKET_TIMEOUT = 6000;

/**

* 发送get请求;不带请求头和请求参数

*

* @param url 请求地址

* @return

* @throws Exception

*/

public static HttpClientResult doGet(String url) throws Exception {

return doGet(url, null, null);

}

/**

* 发送get请求;带请求参数

*

* @param url 请求地址

* @param params 请求参数集合

* @return

* @throws Exception

*/

public static HttpClientResult doGet(String url, Map params) throws Exception {

return doGet(url, null, params);

}

/**

* 发送get请求;带请求头和请求参数

*

tpgQiEkNjo* @param url 请求地址

* @param headers 请求头集合

* @param params 请求参数集合

* @return

* @throws Exception

*/

public static HttpClientResult doGet(String url, Map headers, Map params) throws Exception {

// 创建httpClient对象

CloseableHttpClient httpClient = HttpClients.createDefault();

// 创建访问的地址

URIBuilder uriBuilder = new URIBuilder(url);

if (params != null) {

Set> entrySet = params.entrySet();

for (Entry entry : entrySet) {

uriBuilder.setParameter(entry.getKey(), entry.getValue());

}

}

// 创建http对象

HttpGet httpGet = new HttpGet(uriBuilder.build());

/**

* setConnectTimeout:设置连接超时时间,单位毫秒。

* setConnectionRequestTimeout:设置从connect Manager(连接池)获取Connection

* 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。

* setSocketTimeout:请求获取数据的超时时间(即响应时间),单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。

*/

RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();

httpGet.setConfig(requestConfig);

// 设置请求头

packageHeader(headers, httpGet);

// 创建httpResponse对象

CloseableHttpResponse httpResponse = null;

try {

// 执行请求并获得响应结果

return getHttpClientResult(httpResponse, httpClient, httpGet);

} finally {

// 释放资源

release(httpResponse, httpClient);

}

}

/**

* 发送post请求;不带请求头和请求参数

*

* @param url 请求地址

* @return

* @throws Exception

*/

public static HttpClientResult doPost(String url) throws Exception {

return doPost(url, null, null);

}

/**

* 发送post请求;带请求参数

*

* @param url 请求地址

* @param params 参数集合

* @return

* @throws Exception

*/

public static HttpClientResult doPost(String url, Map params) throws Exception {

return doPost(url, null, params);

}

/**

* 发送post请求;带请求头和请求参数

*

* @param url 请求地址

* @param headers 请求头集合

* @param params 请求参数集合

* @return

* @throws Exception

*/

public static HttpClientResult doPost(String url, Map headers, Map params) throws Exception {

// 创建httpClient对象

CloseableHttpClient httpClient = HttpClients.createDefault();

// 创建http对象

HttpPost httpPost = new HttpPost(url);

/**

* setConnectTimeout:设置连接超时时间,单位毫秒。

* setConnectionRequestTimeout:设置从connect Manager(连接池)获取Connection

* 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。

* setSocketTimeout:请求获取数据的超时时间(即响应时间),单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。

*/

RequestConfig requestConfig = 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 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");*/

packageHeader(headers, httpPost);

// 封装请求参数

packageParam(params, httpPost);

// 创建httpResponse对象

CloseableHttpResponse httpResponse = null;

try {

// 执行请求并获得响应结果

return getHttpClientResult(httpResponse, httpClient, httpPost);

} finally {

// 释放资源

release(httpResponse, httpClient);

}

}

/**

* 发送put请求;不带请求参数

*

* @param url 请求地址

* @return

* @throws Exception

*/

public static HttpClientResult doPut(String url) throws Exception {

return doPut(url);

}

/**

* 发送put请求;带请求参数

*

* @param url 请求地址

* @param params 参数集合

* @return

* @throws Exception

*/

public static HttpClientResult doPut(String url, Map params) throws Exception {

CloseableHttpClient httpClient = HttpClients.createDefault();

HttpPut httpPut = new HttpPut(url);

RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();

httpPut.setConfig(requestConfig);

packageParam(params, httpPut);

CloseableHttpResponse httpResponse = null;

try {

return getHttpClientResult(httpResponse, httpClient, httpPut);

} finally {

release(httpResponse, httpClient);

}

}

/**

* 发送delete请求;不带请求参数

*

* @param url 请求地址

* @return

* @throws Exception

*/tpgQiEkNjo

public static HttpClientResult doDelete(String url) throws Exception {

CloseableHttpClient httpClient = HttpClients.createDefault();

HttpDelete httpDelete = new HttpDelete(url);

RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();

httpDelete.setConfig(requestConfig);

CloseableHttpResponse httpResponse = null;

try {

return getHttpClientResult(httpResponse, httpClient, httpDelete);

} finally {

release(httpResponse, httpClient);

}

}

/**

* 发送delete请求;带请求参数

*

* @param url 请求地址

* @param params 参数集合

* @return

* @throws Exception

*/

public static HttpClientResult doDelete(String url, Map params) throws Exception {

if (params == null) {

params = new HashMap();

}

params.put("_method", "delete");

return doPost(url, params);

}

/**

* Description: 封装请求头

* @param params

* @param httpMethod

*/

public static void packageHeader(Map params, HttpRequestBase httpMethod) {

// 封装请求头

if (params != null) {

Set> entrySet = params.entrySet();

for (Entry entry : entrySet) {

// 设置到请求头到HttpRequestBase对象中

httpMethod.setHeader(entry.getKey(), entry.getValue());

}

}

}

/**

* Description: 封装请求参数

*

* @param params

* @param httpMethod

* @throws UnsupportedEncodingException

*/

public static void packageParam(Map params, HttpEntityEnclosingRequestBase httpMethod)

throws UnsupportedEncodingException {

// 封装请求参数

if (params != null) {

List nvps = new ArrayList();

Set> entrySet = params.entrySet();

for (Entry entry : entrySet) {

nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));

}

// 设置到请求的http对象中

httpMethod.setEntity(new UrlEncodedFormEntity(nvps, ENCODING));

}

}

/**

* Description: 获得响应结果

*

* @param httpResponse

* @param httpClient

* @param httpMethod

* @return

* @throws Exception

*/

public static HttpClientResult getHttpClientResult(CloseableHttpResponse httpResponse,

CloseableHttpClient httpClient, HttpRequestBase httpMethod) throws Exception {

// 执行请求

httpResponse = httpClient.execute(httpMethod);

// 获取返回结果

if (httpResponse != null && httpResponse.getStatusLine() != null) {

String content = "";

if (httpResponse.getEntity() != null) {

content = EntityUtils.toString(httpResponse.getEntity(), ENCODING);

}

return new HttpClientResult(httpResponse.getStatusLine().getStatusCode(), content);

}

return new HttpClientResult(HttpStatus.SC_INTERNAL_SERVER_ERROR);

}

/**

* Description: 释放资源

*

* @param httpResponse

* @param httpClient

* @throws IOException

*/

public static void release(CloseableHttpResponse httpResponse, CloseableHttpClient httpClient) throws IOException {

// 释放资源

if (httpResponse != null) {

httpResponse.close();

}

if (httpClient != null) {

httpClient.close();

}

}

}

6、http响应类

package com.**.**.result;

import java.io.Serializable;

/**

* Description: 封装httpClient响应结果

* @author: yanjianghua

* @date: 2018/9/12 13:45

*/

public class HttpClientResult implements Serializable {

private static final long serialVersionUID = 2168152194164783950L;

/**

* 响应状态码

*/

private int code;

/**

* 响应数据

*/

private String content;

public HttpClientResult() {

}

public HttpClientResult(int code) {

this.code = code;

}

public HttpClientResult(String content) {

this.content = content;

}

public HttpClientResult(int code, String content) {

this.code = code;

this.content = content;

}

public int getCode() {

return code;

}

public void setCode(int code) {

this.code = code;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

@Override

public String toString() {

return "HttpClientResult [code=" + code + ", content=" + content + "]";

}

}

7、常量类:BaseConstants

package com.**.**.constants;

/**

* 常量类

*/

public class BaseConstants {

// 默认使用的redis的数据库

public static final Integer ASSETCENTER_DEFAULT_FLAG = 0;

// redis的数据库 1库

public static final Integer ASSETCENTER_BUSNESS_FLAG = 1;

/**

* 腾讯AI对外开放平台-APP_ID

*/

public static final int APP_ID_AI_OCR = *********;

/**

* 腾讯AI对外开放平台-APP_KEY

*/

public static final String APP_KEY_AI_OCR = "*********";

public static final String OCR_ID_CARD_OCR_URL = "https://api.ai.qq.com/fcgi-bin/ocr/ocr_idcardocr";

public static final String OCR_CREDITCARD_OCR_URL = "https://api.ai.qq.com/fcgi-bin/ocr/ocr_creditcardocr";

public static final String FACE_COMPARE_URL = "https://api.ai.qq.com/fcgi-bin/face/face_facecompare";

public static final String ALIYUN_OSS_OBJECT_NAME_OCR = "idCardocr/";

public static final String ALIYUN_OSS_OBJECT_CREDITCARD_OCR = "creditCard/";

public static final String ALIYUN_OSS_OBJECT_AUTH_DIR = "authentication/";

}

以上所述是给大家介绍的java腾讯AI人脸对比对接详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:做接口测试用例(做接口测试用例有哪些)
下一篇:子类的父类实现接口(接口 父类)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~