springboot集成百度文字识别接口实现身份证识别

很久之前申请的百度接口好久没用了,如今启动这个springboot项目跑了一下,就像下面这样子~

springboot集成百度文字识别接口实现身份证识别_第1张图片对,它是一个基于bootstrap的fileupload组件,上传图片识别身份证的小例子,后台是java,为了简洁开发,使用springboot。

springboot集成百度文字识别接口实现身份证识别_第2张图片

讲真,fileupload组件挺赞的,还可以限制文件,免去了很多后台处理的繁琐。它还可以预览文件呢。通过异步接口请求,请求有载入进度条显示

springboot集成百度文字识别接口实现身份证识别_第3张图片

然后等待解析结果归来,操作dom显示

springboot集成百度文字识别接口实现身份证识别_第4张图片 不多说,上码!

从前端开始,HTML

首先,得引入这些文件,这里的路径是thymeleaf标签指定的,因此搭建springboot的时候注意要引入配置呦~还有就是fileupload的中文语言包,就是那个zh.js,其余的,大家都应该见过的一些插件咯。








	
	
	
	
	
	
	
	
	
	

这里是识别主体,使用的bootstrap规范一下样式。注意input标签,上面一些属性是fileupload的配置。 


002.身份证识别举例

身份证识别结果:

正面:
姓名:
性别:  
民族:
出生:
住址:
公民身份证号码:
背面:
签发日期:  
失效日期:
签发机关:

然后是下面的js,一些jq语法,还有初始化fileupload的参数,注释很全了~

//002.身份证识别
    $("#file2").fileinput({
        uploadUrl: '/idCard',
        uploadAsync: false,
        allowedFileExtensions: ['jpg', 'png', 'gif'],
        //browseClass: "btn btn-primary", //按钮样式
        //maxFileSize:0,//单位为kb,如果为0表示不限制文件大小
        maxFileCount: 2,
        minFileCount: 2,
		layoutTemplates: {
            actionUpload: ''	//去掉略缩图中的上传按钮,去掉哪个就设置哪个
		},
        dropZoneTitle: '选择两张图片,第一张正面,第二张国徽面'
    }).on('filebatchuploadsuccess', function(event, data, previewId, index) {
        var res_b_arr = data.response.back;		//背面
        var res_f_arr = data.response.front;	//正面
		$('#res_name').text(res_f_arr.words_result.姓名.words);	//正面信息
        $('#res_sex').text(res_f_arr.words_result.性别.words);
        $('#res_bera').text(res_f_arr.words_result.出生.words);
        $('#res_nation').text(res_f_arr.words_result.民族.words);
        $('#res_address').text(res_f_arr.words_result.住址.words);
        $('#res_cardNumber').text(res_f_arr.words_result.公民身份号码.words);
        $('#res_start').text(res_b_arr.words_result.签发日期.words);		//背面信息
        $('#res_end').text(res_b_arr.words_result.失效日期.words);
        $('#res_office').text(res_b_arr.words_result.签发机关.words);
    });

请求对应的controller是这样滴(注意:里面有一些方法是我的加密方法des.deCode(),这是不需要的),new AipOcr对象只需传入你在百度开放平台申请的appid和key就欧拉,直接return map,会自动转成json

//002.身份证识别
    @RequestMapping(value = "/idCard",method = RequestMethod.POST)
    public Map idCard(@RequestParam("file_idcard") MultipartFile[] fileArr) throws Exception{
        String key = "pk";
        EncryptUtil des = new EncryptUtil(key, "utf-8");
                MultipartFile mf1 = fileArr[0];
                MultipartFile mf2 = fileArr[1];
                byte[] by1 = mf1.getBytes();
                byte[] by2 = mf2.getBytes();
                AipOcr client1 = new AipOcr(des.deCode(AIP.APP_ID_TEXT),des.deCode(AIP.API_KEY_TEXT),des.deCode(AIP.SECRET_KEY_TEXT));
                    JSONObject jo_fr = client1.idcard(by1,"front",new HashMap());    //正面
                    System.out.println("正面:" + jo_fr);
                AipOcr client2 = new AipOcr(des.deCode(AIP.APP_ID_TEXT),des.deCode(AIP.API_KEY_TEXT),des.deCode(AIP.SECRET_KEY_TEXT));
                    JSONObject jo_ba = client2.idcard(by2,"back",new HashMap());     //背面
                    System.out.println("背面:" + jo_ba);
        Map map = new HashMap();
        map.put("front",JSONChange.json2map(jo_fr.toString()));
        map.put("back",JSONChange.json2map(jo_ba.toString()));
        System.out.println(map.toString());
        return map;
    }

还有,注意如果是maven依赖,去官网查一下百度的依赖,我的主要依赖是下面这个样子


		
    		com.baidu.aip
    		java-sdk
    		4.4.1
		
		
		
    		commons-codec
    		commons-codec
    		1.9
		

		
    		org.springframework.boot
    		spring-boot-starter-thymeleaf
		

综上所述,借助这个原理,可以实现诸如其他OCR功能,总之很方便的集成在springboot,甚至可以写一些脚本,移动端调用摄像头拍照,立刻识别也阔以实现!

你可能感兴趣的:(OCR,人工智能)