Java后台实现 识别图片文字信息、身份证的文字信息
程序员文章站
2024-03-15 23:48:24
...
百度AI识别API http://ai.baidu.com/docs#/OCR-API/top
这个官网里有丰富的识别示例文档、本文以识别身份证信息作为例子讲解
1、首先登录自己的 “百度智能云-管理中心” 创建应用获取app账号密码等信息
网址:https://console.bce.baidu.com
找到 “人工智能-文字识别”
创建应用,获取
AppID
API Key
Secret Key
等信息
2、Java项目开发
pom.xml 加入sdk配置
<!-- 百度文字识别 -->
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.10.0</version>
</dependency>
新建ApiOrcUtil.java 文字识别工具类
将下文中的APP_ID、API_KEY、SECRET_KEY 替换成你申请的应用
import com.baidu.aip.ocr.AipOcr;
import com.bdxh.framework.commons.util.ConfigMgr;
import org.json.JSONObject;
import java.util.HashMap;
public class ApiOrcUtil {
//设置APPID/AK/SK
private static String APP_ID = "APP_ID";
private static String API_KEY ="API_KEY";
private static String SECRET_KEY = "SECRET_KEY";
public static String getPictureString(String photoPath){
// 初始化一个AipOcr
AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
// 可选:设置网络连接参数
client.setConnectionTimeoutInMillis(2000);
client.setSocketTimeoutInMillis(60000);
// 传入可选参数调用接口
HashMap<String, String> options = new HashMap<String, String>();
// 是否检测朝向
options.put("detect_direction", "false");
// 是否检测风险
options.put("detect_risk", "false");
// 正反面front /back
String idCardSide = "front";
// 参数为本地图片二进制数组
/*byte[] file = new byte[0];
try {
file = Util.readFileByBytes(photoPath);
} catch (IOException e) {
e.printStackTrace();
}
JSONObject res = client.idcard(file, idCardSide, options);
System.out.println(res.toString(2));*/
// 参数为本地图片路径
try {
JSONObject res = client.idcard(photoPath, idCardSide, options);
System.out.println(res.toString(2));
if (res != null) {
JSONObject idCard = new JSONObject();
JSONObject words_result = res.getJSONObject("words_result");
idCard.put("name", words_result.getJSONObject("姓名").get("words"));
idCard.put("nation", words_result.getJSONObject("民族").get("words"));
idCard.put("address", words_result.getJSONObject("住址").get("words"));
idCard.put("sex", words_result.getJSONObject("性别").get("words"));
idCard.put("birth", words_result.getJSONObject("出生").get("words"));
idCard.put("number", words_result.getJSONObject("公民身份号码").get("words"));
return idCard.toString(2);
} else {
return "";
}
}catch (JSONException e){
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
System.out.println(getPictureString("C:/Users/Administrator/Desktop/aaa.jpg"));
}
}
自己拍摄一张身份证照片(复印件图片也能识别)放桌面试一下能否通过测试,运行查看结果:
原始的返回值:res.toString(2)
自己截取的信息:idCard.toString(2);
成功截取了身份证正面的文字信息,反面也是可以,只需要改一个参数。
更多好玩的内容这里就不一一展示了,大家可以自己探索一下。