学习积累——利用JAVA实现身份证图片正反面信息提取

一、准备工具

1.eclipse

2.百度云AI平台应用(网址:https://ai.baidu.com/ai-doc/OCR/Ek3h7xypm)

3.下载jar包导入

二、具体过程

实话实说,本人是个技术小白。接到这个任务时简直一片茫然,上学期才开始学习一点点Java,对maven更是无知。希望能帮助跟我一样在努力摸索进步的人吧。

1.在eclipse新建一个Web项目(此处不详解如何创建,跟平时创建几乎一样。主要讲在过程中遇到的困惑和难题)

2.在百度云AI平台,创建应用,从而获取AppID、API Key、Secret Key关键信息。具体获取方法参见大佬博客(https://blog.csdn.net/fangchao2011/article/details/90062551),给出了详细的步骤

3.此处需要注意:在获取了关键信息之后,还需要下载相应的jar包。一定要下载,后期需要导入建立的项目中,不然运行代码会报错。

在创建的应用处选择SDK下载:

学习积累——利用JAVA实现身份证图片正反面信息提取_第1张图片

点开后选择相应的下载,此处选择Java SDK下载即可:

学习积累——利用JAVA实现身份证图片正反面信息提取_第2张图片

3.将下载的相应jar包导入创建的项目中,同时新建一个Java类。代码如下:(代码同样参考大佬博客)

import java.util.HashMap;

import org.json.JSONException;
import org.json.JSONObject;

import com.baidu.aip.ocr.AipOcr;

public class ApiOrcUtil {

    //设置APPID/AK/SK
    private static String APP_ID = "APP_ID";
    private static String API_KEY ="API_KEY";
    private static String SECRET_KEY = "SECRET_KEY";

    public static String getPictureString(String photoPath){

        // 初始化一个AipOcr
        AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);

        // 可选:设置网络连接参数
        client.setConnectionTimeoutInMillis(2000);
        client.setSocketTimeoutInMillis(60000);

        // 传入可选参数调用接口
        HashMap options = new HashMap();
        // 是否检测朝向
        options.put("detect_direction", "false");
        // 是否检测风险
        options.put("detect_risk", "false");

        // 正反面front /back
        String idCardSide = "front";

        // 参数为本地图片二进制数组
        /*byte[] file = new byte[0];
        try {
            file = Util.readFileByBytes(photoPath);
        } catch (IOException e) {
            e.printStackTrace();
        }
        JSONObject res = client.idcard(file, idCardSide, options);
        System.out.println(res.toString(2));*/


        // 参数为本地图片路径
        try {
            JSONObject res = client.idcard(photoPath, idCardSide, options);
            System.out.println(res.toString(2));
            if (res != null) {
                JSONObject idCard = new JSONObject();
                JSONObject words_result = res.getJSONObject("words_result");

                idCard.put("name", words_result.getJSONObject("姓名").get("words"));
                idCard.put("nation", words_result.getJSONObject("民族").get("words"));
                idCard.put("address", words_result.getJSONObject("住址").get("words"));
                idCard.put("sex", words_result.getJSONObject("性别").get("words"));
                idCard.put("birth", words_result.getJSONObject("出生").get("words"));
                idCard.put("number", words_result.getJSONObject("公民身份号码").get("words"));
                return idCard.toString(2);
            } else {
                return "";
            }
        }catch (JSONException e){
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        System.out.println(getPictureString("C:/Users/Administrator/Desktop/1.jpg"));
    }
}

4.大佬博客中还有一步,添加sdk依赖。我在实践中,导入相应的jar包后,并没有使用。如果有问题,可以在eclipse中创建一个Maven项目直接加入必要的依赖,省去自己创建的时间。另外,创建Maven项目可能还会遇到无法创建的问题,网上诸多大佬已解决。

5.自己在此过程中,因为依赖问题浪费了很多时间。还因此去学习了Maven部分知识。感谢上述博客大佬分享知识。

6.因为半路出家,有太多不懂的地方。写博客记录自己学习的点点滴滴,欢迎大家指正~

你可能感兴趣的:(学习)