身份证识别
# 接口信息
- 接口状态 : 正常
- 请求方式 :
POST - 返回格式 :
JSON - 扣除积分数 :
10 - 接口说明:身份证识别,通过OCR(光学字符识别 Optical Character Recognition)技术,对身份证正反面图片进行识别,返回身份证图片上的姓名、民族、住址、身份证号、签发机关和有效期等信息,可以省去用户手动录入的过程,自动完成身份证信息的结构化和图像数据的采集,可以很方便对接客户的后台数据系统,给用户带来极大的便利。采用特有的图像处理技术,在识别身份证图片过程中,还可以对身份证图片进行切边矫正,去除背景图片,并可以获取身份证图片上的头像,方便用户保存。不过请注意, 不支持同时识别身份证正反面,正反面需分开在不同的图片进行识别。
# 请求地址
http://api-gateway.tempeisite.xyz/api/ai/ocr/idcard
1
# 请求参数
| 参数名 | 必选 | 类型 | 描述 |
|---|---|---|---|
| imageData | 是 | byte[] | 身份证图片字节数组 |
# 响应参数
| 参数名称 | 类型 | 描述 |
|---|---|---|
| code | int | 响应码 |
| data | json | 详见data说明 |
| message | string | 响应描述 |
data各字段说明如下:
| 参数 | 说明 | 备注 |
|---|---|---|
| name | 姓名 | 身份证上的姓名识别结果(正面) |
| id_number | 身份证号 | 身份证上的身份证号码识别结果(正面) |
| birthday | 出生日期 | 身份证上的出生日期识别结果(正面) |
| sex | 性别 | 身份证上的性别识别结果(正面) |
| people | 民族 | 身份证上的民族识别结果(正面) |
| address | 住址 | 身份证上的住址识别结果(正面) |
| issue_authority | 签发机关 | 身份证上的签发机关识别结果(反面) |
| validity | 有效期 | 身份证上的有效期识别结果(反面) |
| head_covered | 头像是否有遮挡 | head_covered =true 则表示证件头像有遮挡 |
| cropped_image | 身份证切边图片 | 身份证正面或反面的切边图片,base64编码 |
| id_number_image | 身份证号码截图 | 身份证正面身份证号截图,base64编码 |
| head_portrait | 身份证正面头像信息 | 身份证正面头像信息,json类型 |
| head_portrait.image | 身份证正面头像截图 | 身份证正面头像截图,base64编码 |
| type | 类型 | 身份证正反面类型 当是身份证正面时,type=第二代身份证 当是身份证背面时,type=第二代身份证背面 当是临时身份证时,type=临时身份证。 |
| gray_image | 黑白图像 | gray_image=true 则表示证件判断为黑白 |
| complete | 证件完整 | 该字段为保留字段,请忽略 |
| border_covered | 边缘遮挡 | border_covered=true 则表示证件边缘判断为不完整 |
| head_blurred | 头像模糊 | head_blurred =true 则表示证件头像判断模糊 |
| error_code | 错误码 | 识别错误码 |
| error_msg | 错误信息 | 错误原因描述 |
| time_cost | 耗时 | |
| time_cost.recognize | 识别耗时 | |
| time_cost.preprocess | 图片预处理耗时 |
其中的error_msg和error_code的取值范围及说明对照表如下:
| error_code | error_msg | 说明 |
|---|---|---|
| 0 | ok | 正常返回 |
| 40001 | invalid parameter | 参数不对 |
| 40002 | missing parameter | 缺少参数 |
| 40003 | invalid user or password | 账号或密码不对 |
| 40004 | missing request body | 没有HTTP body |
| 40005 | invalid image format | HTTP body不是图像或者不支持该格式 |
| 40006 | invalid image size | 图片太大或太小 |
| 40007 | fail to recognize | 识别失败 |
| 40008 | invalid content type | 通过HTTP form上传图片时,Content-Type无效 |
| 40009 | corrupted request body | 请求body损坏 |
| 40010 | fail to extract image | 提取图像裸数据失败 |
| 50001 | backend down | 后台服务器宕机 |
| 50004 | timeout | 识别超时 |
| 90099 | unknown | 未知错误 |
# 代码示例
注意 🔔️ 没有开发者调用凭证无法调用接口哦!!! [前往获取开发者凭证](http://api.tempeisite.xyz)
注入Service
@Resource
private ApiClient apiClient;
1
2
2
- 示例一 :推荐👍
通过yml配置开发者调用凭证
@org.junit.jupiter.api.Test
public void idCardRecognition1() throws IOException {
String IMAGE_PATH = "src/main/resources/card_back.jpg";
InputStream in = new FileInputStream(IMAGE_PATH);
byte[] data = inputStream2ByteArray(in);
in.close();
String res = apiClient.idCardRecognition(data);
System.out.println(res);
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
响应示例: 失败结果:
{
"code": "10106",
"desc": "invalid parameter|invalid X-Appid",
"data": "",
"sid": "wcr0000xxxxxxxxxxxxxxxxxxx"
}
1
2
3
4
5
6
2
3
4
5
6
成功结果:
{
"code": "0",
"data": {
"address": "广东省清新县浸潭镇鸡见坑村委会下围村2号",
"birthday": "1992年8月22日",
"border_covered": false,
"complete": true,
"error_code": 0,
"error_msg": "ok",
"gray_image": false,
"head_blurred": false,
"head_covered": false,
"id_number": "666667777788888999",
"name": "张三",
"people": "汉",
"sex": "男",
"time_cost": {
"preprocess":143,
"recognize":277
},
"type": "第二代身份证"
},
"desc": "success",
"sid": "wcr0000xxxxxxxxxxxxxxxxx"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- 示例二:
@org.junit.jupiter.api.Test
public void idCardRecognition2() throws IOException {
ApiClient apiClient = new ApiClient("1e4cd3ef6a8d2538044a027c07508488", "af5a11324adf26ae19d79a88b8e6cd08");
String IMAGE_PATH = "src/main/resources/card_back.jpg";
InputStream in = new FileInputStream(IMAGE_PATH);
byte[] data = inputStream2ByteArray(in);
in.close();
String res = apiClient.idCardRecognition(data);
System.out.println(res);
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
- 通用方法:
private static byte[] inputStream2ByteArray(InputStream in) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024 * 4];
int n = 0;
while ((n = in.read(buffer)) != -1) {
out.write(buffer, 0, n);
}
return out.toByteArray();
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 常见问题
身份证正反面能否放在一张图片上传
答:不支持同时识别身份证正反面,正反面需分开在不同的图片进行识别。
身份证识别支持哪些地区的身份证?
答:目前身份证识别仅支持识别大陆居民身份证。
身份证识别多图片有什么要求?
答:图片要求是 jpg/jpeg 格式;建议图片最短边最小不低于 700 像素,最大不超过 4000 像素。
# 更多示例详见:AI问答开放平台-SDK-Demo 示例项目 (opens new window)
上次更新: 2024/05/15, 04:33:36