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,Map headers,Map params)throwsException{ //创建httpClient对象 CloseableHttpClienthttpClient=HttpClients.createDefault(); //创建访问的地址 URIBuilderuriBuilder=newURIBuilder(url); if(params!=null){ Set >entrySet=params.entrySet(); for(Entry entry: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,Map params)throwsException{ returndoPost(url,null,params); } /** *发送post请求;带请求头和请求参数 * *@paramurl请求地址 *@paramheaders请求头集合 *@paramparams请求参数集合 *@return *@throwsException */ publicstaticHttpClientResultdoPost(Stringurl,Map headers,Map params)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,Map params)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,Map params)throwsException{ if(params==null){ params=newHashMap (); } params.put("_method","delete"); returndoPost(url,params); } /** *Description:封装请求头 *@paramparams *@paramhttpMethod */ publicstaticvoidpackageHeader(Map params,HttpRequestBasehttpMethod){ //封装请求头 if(params!=null){ Set >entrySet=params.entrySet(); for(Entry entry:entrySet){ //设置到请求头到HttpRequestBase对象中 httpMethod.setHeader(entry.getKey(),entry.getValue()); } } } /** *Description:封装请求参数 * *@paramparams *@paramhttpMethod *@throwsUnsupportedEncodingException */ publicstaticvoidpackageParam(Map params,HttpEntityEnclosingRequestBasehttpMethod) throwsUnsupportedEncodingException{ //封装请求参数 if(params!=null){ List nvps=newArrayList (); Set >entrySet=params.entrySet(); for(Entry entry: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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。