近期做微信,有个需求,关于识别证件中的信息的问题,所以对如何识别证件做了一定的研究,我使用的是中安未来公司提供的接口进行开发的,等下会根据其提供的相应文件进行说明。
话不多说,直接上干货(对我来说,下面的代码物价,因为我竟然没有找到类似的文章参考,就算找到了,也无法运行,本人另外传了demo,欢迎购买下载)!
1、测试类和逻辑代码
package myProject;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import myProject.com.model.DataModel;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import sun.misc.BASE64Encoder;
import com.alibaba.fastjson.serializer.SerializerFeature;
/**
*
* @Describtion:测试如何使用OCR识别证件信息
* @author: future
* 2018年7月26日下午11:36:01
*/
public class testOCR {
/**
* @Description : 测试
* @author: future
* @date:2018年7月27日下午10:40:54
* void
*/
@Test
public void testOCR(){
//要进行识别测试的证件照片
String imgFilePath = "图片的路径,包括后缀名";
File file = new File(imgFilePath);
byte[] buffer = null;
FileInputStream inputFile = null;
try {
inputFile = new FileInputStream(file);
buffer = new byte[(int)file.length()];
inputFile.read(buffer);
inputFile.close();
} catch (IOException e) {
e.printStackTrace();
}
String encode = new BASE64Encoder().encode(buffer);
//idCarType 可选参数等下会在截图中有
String idCardType = "2" //说明是进行身份证验证
String result = sendAllCardRecon(encode, "png", idCardType);
//打印结果
System.out.println("识别结果==>\n"+result);
}
/**
* @Description :
* @author: future
* @date:2018年7月27日下午10:38:59
* @param imgBase64Str
* @param imgType
* @param sbType
* @return
* String
*/
public static String sendAllCardRecon(String imgBase64Str,String imgType,String sbType){
//返回的结果
String result = "";
String str = setRecgnPlainParam(imgBase64Str,sbType,"","null");
//图片类型是否赋值
if("".equals(imgType) || imgType==null || "".equals(imgType.trim())){
imgType="jpg";
}
DataModel dataModel = new DataModel();
dataModel.setUsername("test");
dataModel.setParamdata(str);
dataModel.setImgtype(imgType);
//远程访问地址
//注意,这里的“ip:端口号”具体地址请询问中安未来公司开发人员
String url = "http://ip:端口/cxfServerX/doAllCardRecon";
String params = EntityToStringNullValue(dataModel);
//注意:post(url,params)本人未提供,如果想要的,请去购买本人给的完整OCR_demo(购买的,
//未经本人同意,不能随便在网上转载分享)
result = post(url,params);
return result;
}
/**
* @Description : 发送数据请求(源码在demo中,自行下载)
* @author: future
* @date:2018年7月27日下午2:52:54
* @param url
* @param params
* @return
* String
*/
private static String post(String imgUrl, String params) {
.............
.............
}
/**
* @Description : 注意:想获取该方法源码,请自行去购买本人分享的OCR_demo.rar文件
* @author: future
* @date:2018年7月27日下午10:40:23
* @param imgBase64Str
* @param type
* @param option
* @param password
* @return
* String
*/
public static String setRecgnPlainParam(String imgBase64Str,String type,String option,String password){
..............
}
/**
* @Description : 实体类转换为字符串
* @author: future
* @date:2018年7月27日下午2:51:32
* @param data
* @return
* String
*/
public static <T> String EntityToStringNullValue(T data){
//注意了该方法 与JSON.toJSONString(data)差不多,但是不能用该方法,
//其中的区别可以自己去测试,或者去看看我下一篇关于JSON.toJSONString(data)与
//JSON.toJSONString(data,SerializerFeature.WriteMapNullValue)的区别测试
String str = JSON.toJSONString(data,SerializerFeature.WriteMapNullValue);
return str;
}
}
2、model类
package myProject.com.model;
/**
*
* @Describtion:封装数据对象
* @author: future
* 2018年7月27日下午2:35:36
*/
public class DataModel {
private String username;
private String imgtype;
private String paramdata;
private String signdata;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getImgtype() {
return imgtype;
}
public void setImgtype(String imgtype) {
this.imgtype = imgtype;
}
public String getParamdata() {
return paramdata;
}
public void setParamdata(String paramdata) {
this.paramdata = paramdata;
}
public String getSigndata() {
return signdata;
}
public void setSigndata(String signdata) {
this.signdata = signdata;
}
}
注意了:model类中的属性名称都必须跟我以上的一致,我试过改成其他属性名的,就发送不了数据,谨记谨记!!!!!!!
英文远程接口获取的参数是这样的:
根据你要需要识别的证件类型不同,可以参考一下截图
运行结果测试,当看到一下结果,说明你通过测试了
再声明,你要能正式运行上面的代码,需要下载本人的demo
上面是满满地干货,如果帮助到你,请你点赞,关注,你们的鼓励和知识会不断激励我分享更多,更好的知识,谢谢!!