适用场景
在出行实名核验、酒店/机构入住登记、跨境业务证件录入等场景中,需要快速从中国护照中提取结构化字段。传统的OCR全量识别方案会输出大量无关文本,且无法直接映射到业务字段。本文介绍的API专为此类场景设计,能直接返回护照号码、中英文姓名、出生日期、有效期至和签发地点共六个关键字段,便于业务系统直接消费。
接口能力与边界
该接口基于深度学习OCR模型,对中国护照(第二版及新版)进行结构化识别。输入支持图片URL或Base64编码,输出为JSON格式。接口QPS限制为2次/秒,适合中低频业务场景,如后台异步处理或人工审核辅助。需要注意:护照属于高敏感度身份证件,接口仅限已登录用户调用,匿名访问不开放;调用方必须在请求头中携带有效的API Key鉴权。
请求鉴权与参数说明
鉴权方式
接口使用Bearer Token鉴权。在HTTP请求头中传入Authorization字段,格式为:Bearer <你的API Key>。API Key需从服务商后台获取并妥善保管,不要硬编码在客户端代码中。
请求体参数
请求方法为POST,请求体为JSON对象,包含以下两个必填字段:
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
input_type | string | 是 | 图片传输方式,可选值:url(公网图片地址)或base64(图片的Base64编码) |
input_data | string | 是 | 图片内容:当input_type=url时填写HTTP/HTTPS图片链接;当input_type=base64时填写Base64编码字符串(可含data:image/xxx;base64,前缀) |
例如,使用图片URL时请求体为:
{ "input_type": "url", "input_data": "https://example.com/passport.jpg" }代码接入:curl 与 Python
curl 命令
以下示例使用curl发起请求,请将YOUR_API_KEY替换为真实的API Key,将图片链接替换为实际护照图片URL。
curl -sS \ -X POST \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"input_type": "url", "input_data": "https://example.com/passport.jpg"}' \ "https://v1.apizero.cn/api/ocr-cn-passport"若使用Base64编码图片,则请求体改为:
{ "input_type": "base64", "input_data": "data:image/jpeg;base64,/9j/4AAQ..." }Python 示例
使用requests库的示例代码,适合集成到后端服务中。
import requests import json API_URL = "https://v1.apizero.cn/api/ocr-cn-passport" API_KEY = "YOUR_API_KEY" # 请替换为真实密钥 def recognize_passport(image_source, source_type="url"): """ 识别护照 :param image_source: 图片URL或Base64字符串 :param source_type: "url" 或 "base64" :return: 字典格式的响应结果 """ headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } payload = { "input_type": source_type, "input_data": image_source } response = requests.post(API_URL, headers=headers, json=payload) response.raise_for_status() # 检查HTTP错误 return response.json() # 使用示例 if __name__ == "__main__": result = recognize_passport("https://example.com/passport.jpg", "url") print(json.dumps(result, indent=2, ensure_ascii=False))注意:生产环境中应将API Key配置为环境变量,避免泄露。
返回字段解读
成功时HTTP状态码为200,返回JSON结构如下:
{ "code": 0, "data": { "passport_number": "E12345678", "full_name_cn": "张三", "full_name_en": "ZHANG SAN", "date_of_birth": "1990-01-01", "date_of_expiry": "2034-12-31", "place_of_issue": "上海" }, "msg": "成功", "request_id": "req_abc123" }各字段含义:
| 字段 | 类型 | 说明 |
|---|---|---|
code | int | 业务状态码,0表示成功,非0表示错误 |
msg | string | 状态描述信息 |
request_id | string | 本次请求的唯一标识,可用于问题排查 |
data.passport_number | string | 护照号码 |
data.full_name_cn | string | 中文姓名 |
data.full_name_en | string | 英文姓名(大写) |
data.date_of_birth | string | 出生日期,格式 YYYY-MM-DD |
data.date_of_expiry | string | 有效期至,格式 YYYY-MM-DD |
data.place_of_issue | string | 签发地点 |
如果识别失败或图片质量不佳,data可能返回空字段或部分字段缺失,此时需结合code和msg判断。
常见错误与排查
| 错误现象 | 可能原因 | 解决措施 |
|---|---|---|
| HTTP 401 | API Key无效或未携带 | 检查请求头是否包含正确的Authorization: Bearer <key> |
| HTTP 400 | 请求体格式错误或缺少必填字段 | 确认JSON结构正确,input_type和input_data均已提供 |
code为40001 | 图片无法下载(url模式) | 检查URL是否可公开访问,图片大小是否超限(以文档为准) |
code为40002 | 图片解码失败(base64模式) | 确认Base64字符串正确,图片格式为常见格式(JPEG/PNG) |
code为40003 | 护照区域未检测到 | 图片可能非护照或角度偏差过大,建议调整拍摄角度后重试 |
| QPS超限 | 请求频率超过2次/秒 | 增加调用间隔,或使用请求队列 |
注意:所有错误详情均以文档为最终依据,此处仅列出常见情形。
工程化注意事项
图片质量要求:建议护照图片分辨率不低于800×600像素,文字区域清晰无遮挡,避免反光或阴影。证件应占据图片主体的80%以上。
Base64编码长度限制:Base64字符串对应原始图片大小建议控制在5MB以内,过大的图片会增加传输时间和内存消耗。可以在上传前对图片进行压缩。
异步处理:由于QPS限制,如果需要批量处理,应将识别请求放入任务队列(如Celery),控制并发数,避免触发限流。
字段校验:返回的护照号码、日期等字段应进行二次校验,例如护照号码正则匹配、日期格式验证等,以防范OCR误识别。
敏感数据保护:护照图片和识别结果属于个人隐私,传输时务必使用HTTPS,数据库存储时应加密,日志中不应记录原始图片或完整字段。
重试策略:针对网络抖动或临时性错误,建议采用指数退避的重试策略,最多重试3次。
缓存设计:对于同一护照号码的重复查询,可以设计本地缓存(如Redis),避免重复请求API。缓存过期时间根据业务需求设定。
参考文档
- 接口文档页:https://apizero.cn/aidocs/ocr-cn-passport
- 原始文档(Markdown格式):https://apizero.cn/aidocs/ocr-cn-passport/raw.md