当前位置:   article > 正文

百度身份证识别_身份证ak

身份证ak

百度证件识别,因为我的项目只用到了身份证识别,所以在这里我就只给你们展示的是身份证识别,百度还有其他识别,如果有需要可以去看百度证件识别官网连接百度身份证识别不过这个是要钱的,所以API Key和 Securet Key还是要你们自己去注册获取哦

身份证识别工具类

	1、这里根据需要去筛选自己所需要的的字段,因为我这里在身份证识别的时候需要人脸对比,所以加了人脸
	2、这里取到身份证上面的信息不止这些,你可以根据需要取到自己想要的信息
  /**
     *
     * @param frontUrl 身份证正面照
     * @param versoUrl 身份证反面照
     * @param faceUrl 人脸照
     * @return
     * @throws UploaderTypeNotExistException
     * @throws UploaderIOException
     */
    public Map<String, Object> authentication(String frontUrl, String versoUrl, String faceUrl) throws UploaderTypeNotExistException, UploaderIOException {
        Map<String, Object> map = new HashMap<>();
        String uplodType = frontUrl.substring(1, 4);
        // 身份证正面图片
        byte[] front = FileUtil.readFileByBytes(frontUrl);
        // 身份证反面图片
        byte[] verso = FileUtil.readFileByBytes(versoUrl);
        // 人脸图片
        byte[] face = FileUtil.readFileByBytes(faceUrl);

        // 身份证正面
        String idcard = Idcard.idcard(front);
        // 身份正反面
        String black = Idcard.black(verso);
        // 人脸对比
        String f = FaceMatch.faceMatch(face,front);

        JSONObject js1 = JSONObject.parseObject(idcard);
        JSONObject js2 = JSONObject.parseObject(black);
        JSONObject js3 = JSONObject.parseObject(f);

        // unage-status 为normal就是识别正常 否则就是识别失败
        Assert.isTrue("normal".equals(js1.get("image_status")) ,"识别失败, 请上传正确身份证");
        Assert.isTrue("normal".equals(js2.get("image_status")),"识别失败, 请上传正确身份证");
        // 人脸对比数值大于八十说明相似
        if(js3.get("result")!= null){
            JSONObject jsonObject = JSONObject.parseObject(js3.get("result").toString());
            Assert.isTrue(Double.valueOf(jsonObject.get("score").toString())>75,"人脸照片不清晰或人脸照不匹配,请重新拍摄");
        }else{
            Assert.isTrue(false,"人脸照片不清晰或人脸照不匹配,请重新拍摄");
        }

        // 获取身份证详细信息
        JSONObject wr = JSONObject.parseObject(js1.get("words_result").toString());
        String xm = JSONObject.parseObject(wr.get("姓名").toString()).get("words").toString();
        String zz = JSONObject.parseObject(wr.get("住址").toString()).get("words").toString();
        String idnumber = JSONObject.parseObject(wr.get("公民身份号码").toString()).get("words").toString();
        String cs = JSONObject.parseObject(wr.get("出生").toString()).get("words").toString();
        String xb = JSONObject.parseObject(wr.get("性别").toString()).get("words").toString();
        String mz = JSONObject.parseObject(wr.get("民族").toString()).get("words").toString();
        map.put("姓名",xm);
        map.put("住址",zz);
        map.put("身份证号",idnumber);
        map.put("出生",cs);
        map.put("性别",xb);
        map.put("民族",mz);
        return map;
    }


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

身份证识别工具类 注意下载给的链接的工具类,不然可能影响你的使用


import com.alibaba.fastjson.JSONObject;
import tech.showye.project.property.service.AuthService;

import java.net.URLEncoder;

/**
 * 身份证识别
 */
public class Idcard {

    /**
     * 重要提示代码中所需工具类
     * FileUtil,Base64Util,HttpUtil,GsonUtils请从
     * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
     * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
     * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
     * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
     * 下载
     */
    // 身份证正面
    public static String idcard(byte[] img) {
        // 请求url
        String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard";
        try {
            // 本地文件路径
            //String filePath = img;
            //byte[] imgData = FileUtil.readFileByBytes(filePath);
            String imgStr = Base64Util.encode(img);
            String imgParam = URLEncoder.encode(imgStr, "UTF-8");

            String param = "id_card_side=" + "front" + "&image=" + imgParam+"&detect_direction="+true+"&detect_risk="+true;

            // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
            String token = new AuthService().getAuth();
            String accessToken = token;

            String result = HttpUtil.post(url, accessToken, param);
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    // 身份证反面
    public static String black(byte[] img) {
        // 请求url
        String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard";
        try {
            // 本地文件路径
           // String filePath = img;
            // byte[] imgData = FileUtil.readFileByBytes(filePath);
            String imgStr = Base64Util.encode(img);
            String imgParam = URLEncoder.encode(imgStr, "UTF-8");

            String param = "id_card_side=" + "back" + "&image=" + imgParam+"&detect_rectify="+ true;

            // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
            String token = new AuthService().getAuth();
            String accessToken = token;

            String result = HttpUtil.post(url, accessToken, param);
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

获取accessToken 工具类

   // 身份证识别ak ,sk
    // 官网获取的 API Key 更新为你注册的
//    @Value("${clientId}")
//    private String clientId ;
//    // 官网获取的 Secret Key 更新为你注册的
//    @Value("${clientSecret}")
//    private String clientSecret;

	// 官网获取的 API Key 更新为你注册的
    String clientId= "";
    //    // 官网获取的 Secret Key 更新为你注册的
    String clientSecret="XAn1mr4mqBBONUSmjjFuIiDeG3KvEHXg";

    /**
     * 获取API访问token
     * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
     * @param ak - 百度云官网获取的 API Key
     * @param sk - 百度云官网获取的 Securet Key
     * @return assess_token 示例:
     * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
     */
    public  String getAuth() {
        // 获取token地址
        String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
        String getAccessTokenUrl = authHost
                // 1. grant_type为固定参数
                + "grant_type=client_credentials"
                // 2. 官网获取的 API Key
                + "&client_id=" + clientId
                // 3. 官网获取的 Secret Key
                + "&client_secret=" + clientSecret;
        try {
            URL realUrl = new URL(getAccessTokenUrl);
            // 打开和URL之间的连接
            HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();
            // 获取所有响应头字段
            Map<String, List<String>> map = connection.getHeaderFields();
            // 遍历所有的响应头字段
            for (String key : map.keySet()) {
                System.err.println(key + "--->" + map.get(key));
            }
            // 定义 BufferedReader输入流来读取URL的响应
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String result = "";
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            /**
             * 返回结果示例
             */
            System.err.println("result:" + result);
            JSONObject jsonObject = new JSONObject(result);
            String access_token = jsonObject.getString("access_token");
            return access_token;
        } catch (Exception e) {
            System.err.printf("获取token失败!");
            e.printStackTrace(System.err);
        }
        return null;
    }

  
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/595764
推荐阅读
相关标签
  

闽ICP备14008679号