腾讯云人脸识别接口demo

身份认证接口:姓名+身份证号+本人照片

    @ApiOperation(value = "自拍照+身份信息模式", notes = "自拍照+身份信息模式")
    @PostMapping(path = "/easyface")
    public @ResponseBody BaseResult easyface(@RequestBodyWithValid EasyfaceVo easyfaceVo) throws Exception {
        log.info("easyface 入参 {}", easyfaceVo.toString());
        String url = "https://ida.webank.com/api/paas/easyface";
        JSONObject itemJSONObj = JSONObject.parseObject(JSON.toJSONString(easyfaceVo));
        String resp = HttpUtil.doPost(url, itemJSONObj);
        JSONObject jsonObject = JSON.parseObject(resp);

        return new  BaseResult(jsonObject);
    }

对外接口,获取签名及相关信息

    @ApiOperation(value = "获取人脸识别签名方法", notes = "获取人脸识别签名方法")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idCardNo", value = "身份证号码", required = true, dataType = "String", paramType = "query"),
            @ApiImplicitParam(name = "name", value = "姓名", required = true, dataType = "String", paramType = "query")
    })
    @GetMapping(path = "/getFaceVerificationSign")
    public @ResponseBody BaseResult getFaceVerificationSign(@RequestParam("idCardNo")String idCardNo, @RequestParam("name")String name) {
        Map map = faceVerificationImpl.getFaceVerificationSignMap(idCardNo, name);
        return new  BaseResult(map);
    }

签名生成函数
这里的注意点是nonce 随机数32位随机串(字母+数字组成的随机数)在所有的地方都应该是一样的

    /*
    * 提供前端调用身份验证接口的参数
    * */
    public Map getFaceVerificationSignMap(String idCardNo, String name) {
        Map map = getFaceVerificationSign(idCardNo);
        Map returnMap = new HashMap();
        returnMap.putAll(map);
        returnMap.put("webankAppId", appId);
        //String nonce =getZhiDingRandomNumStr(32,"NONCE");//32位随机码
        //returnMap.put("nonce", nonce);
        returnMap.put("version", version);
        returnMap.put("orderNo", idCardNo);
        returnMap.put("name", name);
        returnMap.put("idNo", idCardNo);
        returnMap.put("userId", idCardNo);
        return returnMap;
    }
    /*
    * 生成签名  SIGN 类型
    *
    * */
    public  Map getFaceVerificationSign(String userId){
        String ticket =  getFaceSignTicket();
        log.info("ticket  {}", ticket);
        List<String> stringList = new ArrayList<>();
        stringList.add(appId);
        stringList.add(userId);//orderNo订单号,本次人脸核身合作伙伴上送的订单号,唯一标识
        String nonceStr =getZhiDingRandomNumStr(32,"NONCE");//32位随机码
        stringList.add(nonceStr);//nonce	随机数32位随机串(字母+数字组成的随机数)
        stringList.add(version);//版本号version

        Map map = new HashMap();
        String sign = signAlgorithm(stringList,ticket);
        map.put("sign",sign);
        log.info("nonceStrLength={}",nonceStr.length());
        map.put("nonce",nonceStr);
        return map;
    }
        /**
     * 获取SIGN ticket
     * @return
     */
    public   String getFaceSignTicket(){
        String tickt = redisCache.getCache("face_sign_tickt", String.class);
        //String tickt = null;
        if(tickt != null && !"".equals(tickt)){
            return tickt;
        }

        String accessToken = getRequestFaceAccessToken();
        StringBuffer url = new StringBuffer("https://idasc.webank.com/api/oauth2/api_ticket");
        url.append("?app_id=").append(appId);
        url.append("&access_token=").append(accessToken);
        url.append("&type=").append("SIGN");
        url.append("&version=").append(version);
        String returnData = HttpUtil.get(url.toString());
        log.info("getFaceNonceTicket获取NonceTicket信息::{}",returnData);
        if(returnData != null && !"".equals(returnData)){
            JSONObject jsonObject = JSON.parseObject(returnData);
            Map<String, Object> map = JSONObject.toJavaObject(jsonObject, Map.class);
            log.info("getFaceSignTicket获取NonceTicket信息::{}",map);
            String tickets =  map.get("tickets") != null ? map.get("tickets").toString() : null;

            if(tickets != null){
                JSONArray jsonObjectT = JSON.parseArray(tickets);
                List<Map<String,Object>> listw = new ArrayList<Map<String,Object>>();
                for (Object object : jsonObjectT) {
                    Map <String,Object> ret = (Map<String, Object>) object;//取出list里面的值转为map
                    listw.add(ret);
                }
                tickt =listw.get(0).get("value").toString();// map1.get("value") != null ? map1.get("value").toString() : null;
                redisCache.putCacheWithExpireTime("face_sign_tickt", tickt, 60*20);
                return tickt;
            }

        }
        return null;
    }

姓名+身份号+人脸照片验证
照片不需要前置的Base64等格式字样
在这里插入图片描述

  • 调用第三方接口时的函数 StringEntity entity = new StringEntity(json.toString(),“utf-8”);要如此设置传值为utf-8, 否则传中文时会无法识别。
 public static String doPost(String url, JSONObject json){
        // 创建httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost post = new HttpPost(url);
        CloseableHttpResponse response = null;
        try {
            //StringEntity reqEntity = new StringEntity(params,"utf-8");
            StringEntity entity = new StringEntity(json.toString(),"utf-8");
            //entity.setContentEncoding("UTF-8");
            entity.setContentType("application/json"); // 发送json数据需要设置contentType
            post.setEntity(entity);
            response = httpClient.execute(post);
            if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                // 返回json格式
                return EntityUtils.toString(response.getEntity());
            }
        } catch (Exception e) {
            log.error("通讯异常,异常信息:[{}]", e);
        }
        finally {
            if (httpClient != null) {
                try {
                    httpClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (response != null){
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
 
## 使用前准备​ 1. 前往注册: [腾讯云账号注册](https://cloud.tencent.com/register) (详细指引见 [注册腾讯云](https://cloud.tencent.com/document/product/378/9603)) 2. 取得存储桶名称 **BucketName**: 请前往 [创建存储桶](https://cloud.tencent.com/document/product/460/10637) 3. 取得 **APPID**、**SecretId**、**SecretKey**:请前往 [云API密钥](https://console.cloud.tencent.com/cam/capi) ,点击“新建密钥” ## 快速体验 1. 修改文件 src/main/java/com/qcloud/image/demo/Demo.java 的 main() 方法,填入上述申请到的 **APPID**、**SecretId**、**SecretKey**、**BucketName** 2. 导入到 IDE:工程用 Maven 构建,以 Intellij IDEA 为例,导入方式为:Import Project -> 选择工程目录 -> Import project from external model -> Maven 3. 运行:Demo.java 右键,Run Demo.main() ## 使用简介 ### 初始化 ```java ImageClient imageClient = new ImageClient(APPID, SecretId, SecretKey); ``` ### 设置代理 根据实际网络环境,可能要设置代理,例如: ```java Proxy proxy = new Proxy(Type.HTTP, new InetSocketAddress("127.0.0.1", 8080)); imageClient.setProxy(proxy); ``` ### 使用 SDK 提供功能如下: **图像识别**:鉴黄,标签 **文字识别(OCR)**:身份证,名片,通用,驾驶证行驶证,营业执照,银行卡,车牌号 **人脸识别**:人脸检测,五官定位,个体信息管理,人脸验证,人脸对比及人脸检索 **人脸核身**:照片核身(通过照片和身份证信息),获取唇语验证码(用于活体核身),活体核身(通过视频和照片),活体核身(通过视频和身份证信息) ```java // 调用车牌识别API示例 String imageUrl = "http://youtu.qq.com/app/img/experience/char_general/icon_ocr_license_3.jpg"; String result = imageClient.ocrPlate(new OcrPlateRequest("bucketName", imageUrl)); System.out.println(result); ``` 更多例子详情可参见 [Demo.java](https://github.com/tencentyun/image-java-sdk-v2.0/blob/master/src/main/java/com/qcloud/image/demo/Demo.java) 的代码。 ## 集成到你的项目中 ### 获得 SDK jar 文件 1. 直接使用 release/*-with-dependencies.jar 2. 自行编译:在工程根目录下执行命令 `mvn assembly:assembly`,编译结果见 target/*-with-dependencies.jar ### 导入 jar 文件 根据项目具体情况导入 *-with-dependencies.jar
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值