python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > 身份证OCR识别API接入

身份证OCR识别API接入实例详解(Python / Java 示例)

作者:石榴树下的七彩鱼

OCR技术是一种通过扫描、拍照等光学输入方式将各种印刷品上的文字转化为图像信息,再利用文字识别技术将图像信息转化为可使用的计算机输入技术的过程,这篇文章主要介绍了身份证OCR识别API接入的相关资料,文中以Python/Java为例,需要的朋友可以参考下

前言

在很多互联网应用中,经常需要对身份证信息进行自动识别,例如:

传统手动录入效率低且容易出错,而 身份证 OCR 识别 API 可以自动识别图片中的身份证信息,大幅提升系统自动化能力。

本文将通过 Python 和 Java 示例,详细介绍如何快速接入身份证 OCR 识别接口。

一、身份证 OCR 识别是什么

身份证 OCR(Optical Character Recognition)是一种 基于图像识别技术的文字识别能力,可以自动从身份证图片中提取关键信息,例如:

姓名
性别
民族
出生日期
身份证号
住址
签发机关
有效期限
附加:身份证的头像处理

开发者只需要上传身份证图片,OCR API 就可以返回结构化 JSON 数据。

常见应用场景:

二、身份证 OCR API 接入流程

一般 OCR API 接入流程如下:

准备身份证图片
        ↓
图片转 Base64
        ↓
调用 OCR API
        ↓
返回 JSON 识别结果
        ↓
解析字段信息

接口请求说明:

 详细接入可以参考说身份证OCR接入文档:https://market.shiliuai.com/doc/id-card-ocr

请求地址(URL):

POST http(s)://ocr-api.shiliuai.com/api/id_card_ocr/v2

请求方式:POST

请求头(Header):

参数类型说明
Authorizationstring'APPCODE ' + 您的AppCode (注意英文空格)
Content-Typestringapplication/json

请求体(Body)

参数是否必填类型说明
image_base64必填stringbase64编码的图片文件,像素范围:[15,8192],小于20M
return_rectified_card选填bool是否返回裁剪并矫正的身份证图片,默认为False
card_margin_ratio选填float裁剪时的边距比例,等于边距/长边,默认为0
card_width选填int裁剪后的证件图片的宽度
card_height选填int裁剪后的证件图片的高度(如果card_width和card_height都不传,或者都传-1,那么用原图中证件大小 如果其中一个>0, 另一个不传或传-1,那么表示该长度按比例缩放得到)
return_rectified_head选填bool是否返回裁剪并矫正的头像图片,默认为False,头像图片里,头顶和上边会有一些距离( 长宽比是441:358 )
head_width选填int裁剪后的头像图片的宽度,如果head_width和head_height都不传,或者都传-1,那么用原图中头像大小,如果其中一个>0, 另一个不传或传-1,那么表示该长度按比例缩放得到
head_height选填int裁剪后的头像图片的高度

返回信息

返回类型:

JSON

返回码:

参数名类型说明
codeint返回码,0表示成功
messagestring返回信息

返回信息:

参数参数类型说明
codeint错误码
msgstring错误信息(英文)
msg_cnstring错误信息(中文)
successbool识别是否成功
image_idstring图片ID
request_idstring唯一请求ID
datadata具体看下面

其中data信息:

参数参数类型说明举例
is_frontbool是否正面
complete_scorefloat完整度[0, 1]0.8
is_completebool是否完整,当complete_score==1时,为TrueTrue
unoccluded_scorefloat无遮挡程度[0, 1]
is_unoccludedbool是否无遮挡,当unoccluded_score>0.99时,为True
clear_scorefloat[0, 1],清晰度,用文字可识别度计算0.9
is_clearbool是否清晰,当clear_score>0.5时,为True
rectified_card_base64string裁剪并矫正的身份证图片, 当return_rectified_card=True时有该项
rectified_head_base64string裁剪并矫正的头像图片, 当return_rectified_head=True且是正面时有该项

返回示例:

{
  "code": 200,
  "msg": "success",
  "msg_cn": "成功",
  "success": true,
  "image_id": "xxxx",
  "request_id": "req_xxxx",
  "data": {
    "is_front": true,
    "complete_score": 0.98,
    "is_complete": true,
    "clear_score": 0.92,
    "is_clear": true,
    "name": "张三",
    "sex": "男",
    "ethnicity": "汉",
    "birthDate": "1990年01月01日",
    "address": "北京市朝阳区XXX",
    "idNumber": "110101199001011234"
  }
}

三、Python 调用身份证 OCR API 示例

首先安装 Python 依赖:

pip install requests

示例代码:

# API文档:https://market.shiliuai.com/doc/id-card-ocr
# -*- coding: utf-8 -*-
import requests
import base64
import json
# 请求接口
URL = "https://ocr-api.shiliuai.com/api/id_card_ocr/v2"
# 图片转base64
def get_base64(file_path):
    with open(file_path, 'rb') as f:
        data = f.read()
    b64 = base64.b64encode(data).decode('utf8')
    return b64
def demo(appcode, file_path):
    # 请求头
    headers = {
        'Authorization': 'APPCODE %s' % appcode,
        'Content-Type': 'application/json'
    }
    # 请求体
    b64 = get_base64(file_path)
    data = {"image_base64": b64}
    # 请求
    response = requests.post(url=URL, headers=headers, json=data)
    content = json.loads(response.content)
    print(content)
if __name__=="__main__":
    appcode = "你的APPCODE"
    file_path = "本地图片路径"
    demo(appcode, file_path)

四、Java 调用身份证 OCR API 示例

Java 可以使用 HttpURLConnectionOkHttp 调用接口。

示例代码:

//=====================================================
// API文档:https://market.shiliuai.com/doc/id-card-ocr
//=====================================================
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Base64;
public class Main {
    public static String get_base64(String path) {
        String b64 = "";
        try {
            // 使用Commons IO简化文件读取
            byte[] content = FileUtils.readFileToByteArray(new File(path));
            // 使用JDK自带的Base64
            b64 = Base64.getEncoder().encodeToString(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return b64;
    }
    public static void main(String[] args) {
        String url = "https://ocr-api.shiliuai.com/api/id_card_ocr/v2"; // 请求接口
        String appcode = "你的APPCODE";
        String imgFile = "本地图片路径";
        Map headers = new HashMap<>();
        headers.put("Authorization", "APPCODE " + appcode);
        headers.put("Content-Type", "application/json");
        // 请求体
        JSONObject requestObj = new JSONObject();
        requestObj.put("image_base64", get_base64(imgFile));
        String bodys = requestObj.toString();
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            // 创建POST请求
            HttpPost httpPost = new HttpPost(url);
            // 设置请求头
            for (Map.Entry entry : headers.entrySet()) {
                httpPost.addHeader(entry.getKey(), entry.getValue());
            }
            // 设置请求体
            StringEntity entity = new StringEntity(bodys, "UTF-8");
            httpPost.setEntity(entity);
            // 执行请求
            HttpResponse response = httpClient.execute(httpPost);
            int stat = response.getStatusLine().getStatusCode();
            if (stat != 200) {
                System.out.println("Http code: " + stat);
                return;
            }
            String res = EntityUtils.toString(response.getEntity());
            JSONObject res_obj = JSON.parseObject(res);
            System.out.println(res_obj.toJSONString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

五、身份证 OCR 识别示例效果

示例身份证图片:

识别结果:

开发者可以直接将返回 JSON 存入数据库或用于实名认证流程。

六、身份证 OCR 识别常见问题

1 图片模糊识别率低

建议:

2 身份证倾斜

可以在识别前做简单图像处理:

3 批量识别效率问题

对于批量识别场景,可以:

七、在线体验身份证 OCR

如果想快速测试身份证识别效果,可以先通过在线工具进行测试,然后再接入 API。

在线体验:https://market.shiliuai.com/id-card-ocr

支持:

开发者可以根据测试效果再接入 API。

八、总结

身份证 OCR 是 OCR 技术中非常常见的应用场景,通过 API 接口可以快速实现:

本文介绍了 身份证 OCR API 接入流程,并提供 Python 和 Java 示例代码,开发者可以根据自己的项目需求快速接入。

如果你正在开发 实名认证系统、金融系统或自动化信息录入系统,OCR API 可以大幅减少人工输入成本,提高系统效率。

到此这篇关于身份证OCR识别API接入的文章就介绍到这了,更多相关身份证OCR识别API接入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文