识别证件图片信息服务开发(另外提供完整版完整的demo,已经上传)

本文详细介绍了使用中安未来公司接口进行证件信息OCR识别的方法,包括代码实现与远程调用流程,适合希望快速掌握证件信息识别技术的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近期做微信,有个需求,关于识别证件中的信息的问题,所以对如何识别证件做了一定的研究,我使用的是中安未来公司提供的接口进行开发的,等下会根据其提供的相应文件进行说明。

demo地址

话不多说,直接上干货(对我来说,下面的代码物价,因为我竟然没有找到类似的文章参考,就算找到了,也无法运行,本人另外传了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

上面是满满地干货,如果帮助到你,请你点赞,关注,你们的鼓励和知识会不断激励我分享更多,更好的知识,谢谢!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值