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

时间:2021-05-19

技术栈:

  • Spring boot 2.x
  • 腾讯
  • java版本1.8
  • 注意事项:

  • 本文内的“**.**”需要自己替换为自己的路径。
  • 常量内的“**”需要自己定义自己内容。
  • 业务中认证图片,上传至阿里云OSS上
  • 话不多说,直接上代码

    1、pom文件:

    <!-- apache httpclient组件 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.6</version> </dependency> <!-- https://mvnrepository.com/artifact/com.aliyun.oss/aliyun-sdk-oss --> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>2.2.1</version> </dependency>

    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}) @RestControllerpublic 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 */@Servicepublic class IFaceServiceImpl implements IFaceService { @Override public Object getFaceCompare(String imageBaseAuthentication, String imageBase){ HttpClientResult result = null; Map<String, String> params = new HashMap<String, String>(); 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<String, String> params) throws Exception { return doGet(url, null, params); } /** * 发送get请求;带请求头和请求参数 * * @param url 请求地址 * @param headers 请求头集合 * @param params 请求参数集合 * @return * @throws Exception */ public static HttpClientResult doGet(String url, Map<String, String> headers, Map<String, String> params) throws Exception { // 创建httpClient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建访问的地址 URIBuilder uriBuilder = new URIBuilder(url); if (params != null) { Set<Entry<String, String>> entrySet = params.entrySet(); for (Entry<String, String> 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<String, String> 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<String, String> headers, Map<String, String> 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-pare"; 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人脸对比对接详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

    声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

    相关文章