身份证识别系统搭建

Day 2 - 身份证识别系统搭建

身份证识别功能描述

RecognizeIdentityCard可以识别二代身份证关键字段内容,关键字段包括:姓名、性别、民族、身份证号、出生日期、地址信息、有效起始时间、签发机关,同时可输出身份证区域位置和人脸位置信息。

输入限制

  • 图片格式:JPEG、JPG、PNG、BMP、GIF。
  • 图像大小:图像大小不超过3M。
  • 图像分辨率:不限制图片分辨率,但图片分辨率太高可能会导致API识别超时,超时时间为5秒。

请求参数

名称 类型 是否必选 示例值 描述
Action String RecognizeIdentityCard 系统规定参数。取值:RecognizeIdentityCard。
ImageURL String https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/DetectImageElements/detect-elements-src.png 图片URL地址。
Side String face 身份证正反面类型。
- face:正面。
- back:反面。

返回数据

名称 类型 示例值 描述
Data Struct 返回的结果数据内容。
BackResult Struct 反面照结果。
EndDate String 19800101 有效期结束时间,格式:YYYYMMDD,例如19800101,即1980年01月01日。
Issue String 杭州市公安局 签发机关。
StartDate String 19700101 有效期起始时间,格式:YYYYMMDD,例如19800101,即1980年01月01日。
FrontResult Struct 正面照结果。
Address String 浙江省杭州市余杭区文一西路969号 地址信息。
BirthDate String 20000101 出生日期,格式:YYYYMMDD,例如19800101,即1980年01月01日。
CardAreas Array 身份证区域位置,四个顶点表示,顺序是逆时针(左上、左下、右下、右上)。
X Float 165 身份证区域横坐标。
Y Float 657 身份证区域纵坐标。
FaceRectVertices Array 人脸位置,四个顶点表示。
X Float 1024.6600341796875 人脸位置横坐标。
Y Float 336.629638671875 人脸位置纵坐标。
FaceRectangle Struct 人脸位置。
Angle Float -90 表示矩形顺时针旋转的度数,范围-180~180。
Center Struct 人脸矩形中心坐标。
X Float 952 人脸矩形中心横坐标。
Y Float 325.5 人脸矩形中心纵坐标。
Size Struct 人脸矩形尺寸。
Height Float 181.99 高度。
Width Float 164.99 宽度。
Gender String 性别。
IDNumber String 1234567890 身份证号。
Name String 张三 姓名。
Nationality String 民族。
RequestId String D6C24839-91A7-41DA-B31F-98F08EF80CC0 请求ID。

返回数据示例


请求示例

1
2
3
4
http(s)://ocr.cn-shanghai.aliyuncs.com/?Action=RecognizeIdentityCard
&ImageURL=https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/DetectImageElements/detect-elements-src.png
&Side=face
&<公共请求参数>

正常返回示例
XML 格式

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<RequestId>D6C24839-91A7-41DA-B31F-98F08EF80CC0</RequestId>
<Data>
<FrontResult>
<Address>浙江省杭州市余杭区文一西路969号</Address>
<Name>张三</Name>
<Nationality></Nationality>
<IDNumber>1234567890</IDNumber>
<Gender></Gender>
<BirthDate>20000101</BirthDate>
<FaceRectangle>
<Angle>-90</Angle>
<Center>
<X>952</X>
<Y>325.5</Y>
</Center>
<Size>
<Height>181.99</Height>
<Width>164.99</Width>
</Size>
</FaceRectangle>
<CardAreas>
<X>165</X>
<Y>657</Y>
</CardAreas>
<CardAreas>
<X>534</X>
<Y>658</Y>
</CardAreas>
<CardAreas>
<X>535</X>
<Y>31</Y>
</CardAreas>
<CardAreas>
<X>165</X>
<Y>30</Y>
</CardAreas>
<FaceRectVertices>
<X>1024.6600341796875</X>
<Y>336.629638671875</Y>
</FaceRectVertices>
<FaceRectVertices>
<X>906.6610717773438</X>
<Y>336.14801025390625</Y>
</FaceRectVertices>
<FaceRectVertices>
<x>907.1590576171875</x>
<Y>214.1490478515625</Y>
</FaceRectVertices>
<FaceRectVertices>
<x>1025.157958984375</x>
<Y>214.63067626953125</Y>
</FaceRectVertices>
</FrontResult>
</Data>

JSON 格式

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
{
"RequestId": "D6C24839-91A7-41DA-B31F-98F08EF80CC0",
"Data": {
"FrontResult": {
"Address": "浙江省杭州市余杭区文一西路969号",
"Name": "张三",
"Nationality": "汉",
"IDNumber": "1234567890",
"Gender": "男",
"BirthDate": "20000101",
"FaceRectangle": {
"Angle": -90,
"Center": {
"X": 952,
"Y": 325.5
},
"Size": {
"Height": 181.99,
"Width": 164.99
}
},
"CardAreas": [
{
"X": 165,
"Y": 657
},
{
"X": 534,
"Y": 658
},
{
"X": 535,
"Y": 31
},
{
"X": 165,
"Y": 30
}
],
"FaceRectVertices": [
{
"X": 1024.6600341796875,
"Y": 336.629638671875
},
{
"X": 906.66107177734375,
"Y": 336.14801025390625
},
{
"x": 907.1590576171875,
"Y": 214.1490478515625
},
{
"x": 1025.157958984375,
"Y": 214.63067626953125
}
]
}
}
}

JAVA SDK

引入POM包<artifactId>ocr20191230</artifactId>

1
2
3
4
5
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>ocr20191230</artifactId>
<version>${aliyun.ocr.version}</version>
</dependency>
  • 说明 您可以通过[https://mvnrepository.com/artifact/com.aliyun/](https://mvnrepository.com/artifact/com.aliyun/)**SDK包名称**查看不同服务SDK的版本。例如[https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-ocr](https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-ocr)查看aliyun-java-sdk-ocr的版本。

接入SDK

下面介绍新版本的参数构建和调用方法。

  1. 引入资源。在pom.xml文件中添加Maven依赖安装java SDK。

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.4.8</version>
    </dependency>
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.52</version>
    </dependency>
    <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>ocr20191230</artifactId>
    <version>${aliyun.ocr.version}</version>
    </dependency>
    <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>facebody20191230</artifactId>
    <version>${aliyun.facebody.version}</version>
    </dependency>
    <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>imagerecog20190930</artifactId>
    <version>${aliyun.imagerecog.version}</version>
    </dependency>
    <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>imageseg20191230</artifactId>
    <version>${aliyun.imageseg.version}</version>
    </dependency>
    <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>imageenhan20190930</artifactId>
    <version>${aliyun.imageenhan.version}</version>
    </dependency>
    <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>goodstech20191230</artifactId>
    <version>${aliyun.goodstech.version}</version>
    </dependency>
    <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>objectdet20191230</artifactId>
    <version>${aliyun.objectdet.version}</version>
    </dependency>
    <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>imgsearch20200320</artifactId>
    <version>${aliyun.imgsearch.version}</version>
    </dependency>
    <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>videorecog20200320</artifactId>
    <version>${aliyun.videorecog.version}</version>
    </dependency>
    <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>videoseg20200320</artifactId>
    <version>${aliyun.videoseg.version}</version>
    </dependency>
    <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>videoenhan20200320</artifactId>
    <version>${aliyun.videoenhan.version}</version>
    </dependency>
  2. 构建Client。示例如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 你的accessKeyId
    config.accessKeyId="######";
    //你的accessKeySecret
    config.accessKeySecret="#######";
    config.type="access_key";
    config.regionId="cn-shanghai";
    config.endpointType="internal";
    Client client = new Client(config);
    config.endpoint="ocr.cn-shanghai.aliyuncs.com";
    //此处endpoint以文字识别为例。不同服务的Endpoint参见访问域名。
  3. 调用服务。Client已经封装好需要调用的能力,且大多数API支持本地文件。

  • 使用URL

    • request:RecognizeIdentityCard
    • 方法:recognizeIdentityCard
    • 示例
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      private static void RecognizeIdentityCard(Client client, RuntimeOptions runtimeOptions) throws Exception {
      try {
      RecognizeIdentityCardRequest req = new RecognizeIdentityCardRequest();
      req.imageURL="https://viapi-demo.oss-cn-shanghai.aliyuncs.com/viapi-demo/images/RecognizeIdentityCard/IdentityCard.jpg";
      RecognizeIdentityCardResponse rep = client.recognizeBankCard(req, runtimeOptions);
      System.out.println("身份证识别="+JSON.toJSONString(rep));
      }
      catch (TeaException e){
      System.out.println("身份证识别异常了");
      System.out.println(JSON.toJSONString(e.getData()));
      }
      }
  • 使用本地文件

    • request:RecognizIdentityCardAdvanceRequest
    • 方法:recognizeIdentityCardAdvance
    • 示例
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      private static void RecognizeIdentityCardAdvance(Client client, RuntimeOptions runtimeOptions) throws Exception {
      try {
      RecognizeIdentityCardAdvanceRequest req = new RecognizeBankCardAdvanceRequest();
      InputStream inputStream = new FileInputStream(new File("/Users/robinqu/Library/IdentityCard.png"));
      req.imageURLObject=inputStream;
      RecognizeIdentityCardResponse rep = client.recognizeBankCardAdvance(req, runtimeOptions);
      System.out.println("银行卡识别="+JSON.toJSONString(rep));
      }
      catch (TeaException e){
      System.out.println("银行卡识别异常了");
      System.out.println(JSON.toJSONString(e.getData()));
      }
      }
  1. 出现advance表示使用本地文件,没有则表示使用公网可以访问的URL。

结果示例

对于同一个接口,如果SDK中包含类似xxxAdvanceRequest的结构,那么这个接口支持本地文件上传,否则不支持。
例如下图中ChangeImageSize是支持本地文件的,而RecolorImage则不支持本地文件,只支持OSS链接。

异常相关

如果调用发生异常,则异常信息会在TeaException.getData()中显示出来。

1
2
3
4
5
6
{
"RequestId": "6B8A283F-DFFA-4F30-9DF1-A85D8609AD88",
"HostId": "ocr.cn-shanghai.aliyuncs.com",
"Code": "InvalidImage.Content",
"Message": "Invalid Input - wrong category"
}
评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...