很久之前申请的百度接口好久没用了,如今启动这个springboot项目跑了一下,就像下面这样子~
对,它是一个基于bootstrap的fileupload组件,上传图片识别身份证的小例子,后台是java,为了简洁开发,使用springboot。
讲真,fileupload组件挺赞的,还可以限制文件,免去了很多后台处理的繁琐。它还可以预览文件呢。通过异步接口请求,请求有载入进度条显示
然后等待解析结果归来,操作dom显示
从前端开始,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,甚至可以写一些脚本,移动端调用摄像头拍照,立刻识别也阔以实现!