自己是做Java开发,但是本人以前接触并学习很多图像的知识,所以对图像很敏感。下面以百度的一个接口,实现身份证识别案例(一颗算法开发的心在不断的跳动,哈哈!!!)
身份证识别在很多场景都有应用,如:门禁卡,使用身份证扫描识别;App注册扫描认证等。现在我将我的方法分享给大家,希望对大家有所帮助,谢谢!
1、需要百度开发者AppID、SecretKey 、API Key。
先注册,然后进入
https://console.bce.baidu.com/ai/?fromai=1#/ai/ocr/overview/index,这个网址,选择文字识别,创建应用,获取AppID、SecretKey 、API Key。
2、创建一个maven项目,在pom中添加相应的依赖jar
<!-- 百度文字识别SDK -->
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.6.1</version>
</dependency>
3、创建两个配置工具类
public class BaiduConfig {
public static final String APP_ID = "***";//自己的
public static final String API_KEY = "****";//自己的
public static final String SECRET_KEY = "***";//自己的
}
public class Utils {
/**
将图像转为二进制数组
* @param path
* @return
*/
public static byte[] readImageFile(String path){
byte[] data = null;
FileImageInputStream input = null;
try {
input = new FileImageInputStream(new File(path));
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int numBytesRead = 0;
while ((numBytesRead = input.read(buf)) != -1) {
output.write(buf, 0, numBytesRead);
}
data = output.toByteArray();
output.close();
input.close();
}
catch (FileNotFoundException ex1) {
ex1.printStackTrace();
}
catch (IOException ex1) {
ex1.printStackTrace();
}
return data;
}
4、执行类IDCardRecogizeController
package com.toutiao.yangwj.controller;
import com.baidu.aip.ocr.AipOcr;
import com.toutiao.yangwj.config.BaiduConfig;
import com.toutiao.yangwj.utils.ImageUtil;
import org.json.JSONObject;
import java.util.HashMap;
/**
* @author yangwj
* @date 2020/5/23 14:49
*/
public class IDCardRecogizeController {
public static void main(String[] args) {
IDCardRecogize();
}
public static void IDCardRecogize() {
AipOcr client = new AipOcr(BaiduConfig.APP_ID, BaiduConfig.API_KEY, BaiduConfig.SECRET_KEY);
// 传入可选参数调用接口
HashMap<String, String> options = new HashMap<String, String>();
options.put("detect_direction", "true");
options.put("detect_risk", "false");
//背面照
//String idCardSide = "back";
//前面照
String idCardSide = "front";
// 参数为本地图片路径
//String image = "D:\\back.jpg";
String image = "D:\\front.png";
JSONObject res = client.idcard(image, idCardSide, options);
System.out.println(res.toString(2));
// 参数为本地图片二进制数组
byte[] file = ImageUtil.readImageFile(image);
res = client.idcard(file, idCardSide, options);
System.out.println(res.toString(2));
}
}
5、测试效果