单一功能学习——百度AI之身份证识别
以下内容基本是从官方接口文档复制过来的,附带自己封装的代码
时间:2018年4月4日
一、导入工具包
使用maven依赖:
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>${version}</version>
</dependency>
自己下载:
下载Java SDK压缩工具包:https://ai.baidu.com/sdk#ocr
在Eclipse右键“工程 -> Properties -> Java Build Path -> Add JARs”
添加SDK工具包 aip-java-sdk-版本.jar 和第三方依赖工具包json-20160810.jar log4j-1.2.17.jar。
二、新建AipOcr
官方示例:
public class Sample {
//设置APPID/AK/SK
public static final String APP_ID = "你的 App ID";
public static final String API_KEY = "你的 Api Key";
public static final String SECRET_KEY = "你的 Secret Key";
public static void main(String[] args) {
// 初始化一个AipOcr
AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
// 可选:设置网络连接参数
client.setConnectionTimeoutInMillis(2000);
client.setSocketTimeoutInMillis(60000);
// 可选:设置代理服务器地址, http和socket二选一,或者均不设置
client.setHttpProxy("proxy_host", proxy_port); // 设置http代理
client.setSocketProxy("proxy_host", proxy_port); // 设置socket代理
// 可选:设置log4j日志输出格式,若不设置,则使用默认配置
// 也可以直接通过jvm启动参数设置此环境变量
System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");
// 调用接口
String path = "test.jpg";
JSONObject res = client.basicGeneral(path, new HashMap<String, String>());
System.out.println(res.toString(2));
}
}
其中示例的log4j.properties文件内容如下:
#可以设置级别:debug>info>error
#debug:显示debug、info、error
#info:显示info、error
#error:只error
log4j.rootLogger=debug,appender1
#log4j.rootLogger=info,appender1
#log4j.rootLogger=error,appender1 #输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#样式为TTCCLayout
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout #自定义样式
# %r 时间 0
# %t 方法名 main
# %p 优先级 DEBUG/INFO/ERROR
# %c 所属类的全名(包括包名)
# %l 发生的位置,在某个类的某行
# %m 输出代码中指定的讯息,如log(message)中的message
# %n 输出一个换行 log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%t][%p] -%l %m%n
三、配置AipOcr
如果用户需要配置AipOcr的一些细节参数,可以在构造AipOcr之后调用接口设置参数,目前只支持以下参数:
| 接口 | 说明 |
|---|---|
| setConnectionTimeoutInMillis | 建立连接的超时时间(单位:毫秒) |
| setSocketTimeoutInMillis | 通过打开的连接传输数据的超时时间(单位:毫秒) |
| setHttpProxy | 设置http代理服务器 |
| setSocketProxy | 设置socket代理服务器 (http和socket类型代理服务器只能二选一) |
四、接口调用
用户向服务请求识别身份证,身份证识别包括正面和背面。
public void sample(AipOcr client) {
// 传入可选参数调用接口
HashMap<String, String> options = new HashMap<String, String>();
options.put("detect_direction", "true");
options.put("detect_risk", "false");
String idCardSide = "back";
// 参数为本地图片路径
String image = "test.jpg";
JSONObject res = client.idcard(image, idCardSide, options);
System.out.println(res.toString(2));
// 参数为本地图片二进制数组
byte[] file = readImageFile(image);
res = client.idcard(file, idCardSide, options);
System.out.println(res.toString(2));
}
请求参数详情
| 参数名称 | 是否必选 | 类型 | 可选值范围 | 默认值 | 说明 |
|---|---|---|---|---|---|
| image | 是 | mixed | 本地图片路径或者图片二进制数据 | ||
| id_card_side | 是 | String | front - 身份证含照片的一面 back - 身份证带国徽的一面 |
front:身份证含照片的一面;back:身份证带国徽的一面 | |
| detect_direction | 否 | String | true false |
false | 是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括: - true:检测朝向; - false:不检测朝向。 |
| detect_risk | 否 | String | true - 开启 false - 不开启 |
是否开启身份证风险类型(身份证复印件、临时身份证、身份证翻拍、修改过的身份证)功能,默认不开启,即:false。可选值:true-开启;false-不开启 |
返回数据参数详情
| 字段 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| direction | 否 | number | 图像方向,当detect_direction=true时存在。 - -1:未定义, - 0:正向, - 1: 逆时针90度, - 2:逆时针180度, - 3:逆时针270度 |
| image_status | 是 | string | normal-识别正常 reversed_side-未摆正身份证 non_idcard-上传的图片中不包含身份证 blurred-身份证模糊 over_exposure-身份证关键字段反光或过曝 unknown-未知状态 |
| risk_type | 否 | string | 输入参数 detect_risk = true 时,则返回该字段识别身份证类型: normal-正常身份证;copy-复印件;temporary-临时身份证;screen-翻拍;unknow-其他未知情况 |
| edit_tool | 否 | string | 如果参数 detect_risk = true 时,则返回此字段。如果检测身份证被编辑过,该字段指定编辑软件名称,如:Adobe Photoshop CC 2014 (Macintosh),如果没有被编辑过则返回值无此参数 |
| log_id | 是 | number | 唯一的log id,用于问题定位 |
| words_result | 是 | array(object) | 定位和识别结果数组 |
| words_result_num | 是 | number | 识别结果数,表示words_result的元素个数 |
| +location | 是 | array(object) | 位置数组(坐标0点为左上角) |
| ++left | 是 | number | 表示定位位置的长方形左上顶点的水平坐标 |
| ++top | 是 | number | 表示定位位置的长方形左上顶点的垂直坐标 |
| ++width | 是 | number | 表示定位位置的长方形的宽度 |
| ++height | 是 | number | 表示定位位置的长方形的高度 |
| +words | 否 | string | 识别结果字符串 |
返回示例
{
"log_id": 2648325511,
"direction": 0,
"image_status": "normal",
"idcard_type": "normal",
"edit_tool": "Adobe Photoshop CS3 Windows",
"words_result": {
"住址": {
"location": {
"left": 267,
"top": 453,
"width": 459,
"height": 99
},
"words": "南京市江宁区弘景大道3889号"
},
"公民身份号码": {
"location": {
"left": 443,
"top": 681,
"width": 589,
"height": 45
},
"words": "330881199904173914"
},
"出生": {
"location": {
"left": 270,
"top": 355,
"width": 357,
"height": 45
},
"words": "19990417"
},
"姓名": {
"location": {
"left": 267,
"top": 176,
"width": 152,
"height": 50
},
"words": "伍云龙"
},
"性别": {
"location": {
"left": 269,
"top": 262,
"width": 33,
"height": 52
},
"words": "男"
},
"民族": {
"location": {
"left": 492,
"top": 279,
"width": 30,
"height": 37
},
"words": "汉"
}
},
"words_result_num": 6
}
五、我封装的类
package com.xxxxx.util; import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import com.baidu.aip.ocr.AipOcr; public class AipOcrJDKFactory { // 设置APPID/AK/SK
public static final String APP_ID = "xxxxx";
public static final String API_KEY = "xxxxxxxxxxxxxxxxxx";
public static final String SECRET_KEY = "xxxxxxxxxxxxxxxxxxx"; public static final AipOcrJDKFactory INST = new AipOcrJDKFactory();
public static AipOcr client; private AipOcrJDKFactory() {
// 初始化一个AipOcr
client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
// 可选:设置网络连接参数
client.setConnectionTimeoutInMillis(2000);
client.setSocketTimeoutInMillis(60000);
} /**
* 身份证识别
*
* @param isFront
* :true识别身份证正面;false识别身份证背面;
* @param isDirection
* :是否开启检测旋转角度并矫正识别,建议为true
* @param isRisk
* :是否开启身份证风险类型(身份证复印件、临时身份证、身份证翻拍、修改过的身份证)功能,默认不开启
* @param imagePath
* :图片本地路径
* @return
*/
public JSONObject idcardRecognition(boolean isFront, boolean isDirection, boolean isRisk, String imagePath) {
if (StringUtils.isEmpty(imagePath)) {
return null;
}
File file = new File(imagePath);
if (!file.exists() || !file.isFile()) {
return null;
}
// 传入可选参数调用接口,默认为false
HashMap<String, String> options = new HashMap<String, String>();
options.put("detect_direction", isDirection ? "true" : "false");
options.put("detect_risk", isRisk ? "true" : "false");
// 识别身份证正面idCardSide=front;识别身份证背面idCardSide=back;
String idCardSide = isFront ? "front" : "back";
// 参数为本地图片路径
JSONObject res = client.idcard(imagePath, idCardSide, options);
System.out.println("(boolean isFront, String imagePath) res:" + res.toString(2));
return res; } /**
* 身份证识别
*
* @param isFront
* :true识别身份证正面;false识别身份证背面;
* @param fileBytes
* :图片byte[]
* @return
*/
public JSONObject idcardRecognition(boolean isFront, byte[] fileBytes) {
if (fileBytes == null) {
return null;
}
// 传入可选参数调用接口
HashMap<String, String> options = new HashMap<String, String>();
options.put("detect_direction", "true");
options.put("detect_risk", "false");
// 识别身份证正面idCardSide=front;识别身份证背面idCardSide=back;
String idCardSide = isFront ? "front" : "back";
// 参数为本地图片二进制数组
JSONObject res = client.idcard(fileBytes, idCardSide, options);
System.out.println("client.idcard(fileBytes, idCardSide, options) res:" + res.toString(2));
return res;
}
}
单一功能学习——百度AI之身份证识别的更多相关文章
- 百度AI接口---身份证识别Demo
题记:自己是做java web的,但是本人以前接触并学习很多图像的知识,所以对图像很敏感.下面以百度的一个接口,实现身份证识别案例 1.需要百度开发者AppID.SecretKey .API Key. ...
- 微信小程序接入百度OCR(身份证识别)
微信小程序接入百度OCR(身份证识别) 1.接口描述 支持对二代居民身份证正反面所有8个字段进行结构化识别,包括姓名.性别.民族.出生日期.住址.身份证号.签发机关.有效期限,识别准确率超过99%:同 ...
- selenium自动化 | 借助百度AI开放平台识别验证码登录职教云
#通过借助百度AI开放平台识别验证码登录职教云 from PIL import Image from aip import AipOcr import unittest # driver.get(zj ...
- python基于百度AI开发文字识别
很多场景都会用到文字识别,比如app或者网站里都会上传身份证等证件以及财务系统识别报销证件等等 第一步,你需要去百度AI里去注册一个账号,然后新建一个文字识别的应用 然后你将得到一个API Key 和 ...
- 利用百度AI OCR图片识别,Java实现PDF中的图片转换成文字
序言:我们在读一些PDF版书籍的时候,如果PDF中不是图片,做起读书笔记的还好:如果PDF中的是图片的话,根本无法编辑,做起笔记来,还是很痛苦的.我是遇到过了.我们搞技术的,当然得自己学着解决现在的痛 ...
- Python实现AI图像识别-身份证识别
图像识别说白了就是把一张照片上面的文字进行提取,提供工作效率 需求分析 身份证识别主要是把一张身份证照片上面的文字信息进行提取,不用再使用人工去手动抄写了,下面给大家说的这个身份识别主要是使用pyth ...
- 基于百度AI实现 车牌识别
前言 目前百度的AI接口相对完善,对于文字识别类的操作还需要开发者一一去尝试,去评估这效果到底是怎么的. 文字识别的接口相对简单,官方提供的SDK也集成很好,笔者只是在这上面做了一些前期性的功能数据校 ...
- 20-调用百度AI的文字识别
本来准备自己写识别的,貌似现在能力不足,直接偷懒用百度的api吧 from aip import AipOcr """ 你的 APPID AK SK "&quo ...
- baidu-aip-SDK node.js 身份证识别
最近项目中客户需要实现身份证识别功能,合理计划了之后决定使用百度ai的身份证识别. 身份证识别是文字识别的一种,类似的功能有很多比如驾驶证识别等等,原理都是相同的. 对于前端初学者来说,如果要实现这种 ...
随机推荐
- ECU
ECU(Electronic Control Unit)电子控制单元,又称“行车电脑”.“车载电脑”等.从用途上讲则是汽车专用微机控制器,也叫汽车专用单片机.它和普通的单片机一样,由微处理器(CPU) ...
- left4dead2 常用配置
难度控制 z_difficulty [Easy, Normal, Hard, Impossible]
- Python学习札记(二) python3.5安装 + (假装是)第一个Python程序
参考: Mac OS 安装 Python3.5 廖雪峰Python教程:安装Python 笔记: 安装: 1.官方网站下载安装包:安装程序 2.执行安装程序完成Python3.5包的安装. 3.安装P ...
- python学习笔记glob模块
python有许多的类库,现将学习记录下来,以供以后回顾复习: 1.glob模块 用于文件名操作,匹配指定目录下的文件,返回的是目录加文件名,常用的有两个函数: glob(pattern),返回匹配的 ...
- SonarQube介绍及部署
SonarQube介绍及部署 编写人:罗旭成 编写时间:2014-5-28 SonarQube简介 SonarQube是一个用于代码质量管理的开源平台(Java开发),用于管理源代码的质量,可以从七个 ...
- R语言系列:自定义function
在用R语言做各种事物时,用户自定义函数是不可或缺的.这期来讲讲如何自定义R的function.首先要介绍的是function的基本框架: myfunction <- function(arg1, ...
- codeforces741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- java代码实现递归
think in java 书中使用递归分析 代码如下: public class Snake implements Cloneable { private Snake next; private c ...
- import sys sys.path.append(...)
模块搜索路径: 当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错 默认情况下,Python解释器会搜索当前目录.所有已安装的内置模块和第三方模块,搜索路 ...
- Kotlin Android Studio 环境搭建
Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源. Kotlin 可以编译成Java字节码,也可以编 ...