跳到主要内容

🛂 护照 OCR

0.75 IC每页
✅ 活跃🪪 eKYC

欢迎使用艾艾普护照 OCR API,这是由艾艾普科技有限公司开发的一款人工智能产品。我们的 API 旨在高精度、快速地自动识别和提取护照扫描图像中的信息。该系统特别专注于读取护照页面底部的机器可读区(MRZ),提取持有人姓名、国籍、出生日期等关键信息。

尝试演示!

Example Images (Click to try)

Example 1

入门指南

  1. 先决条件

    • 艾艾普科技的 API 密钥
    • 扫描的护照图像(个人信息页)
    • 支持的文件格式:JPEG, JPG, PNG, PDF
    • 最大文件大小:10MB
  2. 快速入门

    • 快速处理(每张图像 1-2 秒)
    • 高精度文本提取(95.51%)
    • 支持多种文件格式
  3. 主要功能

    • 从 TD3 类型 MRZ 中提取信息
    • OCR 准确率评分和验证
    • 以 base64 格式提取面部图像
    • 支持多页 PDF 文档
    • 处理旋转和倾斜的图像
    • 对倾斜图像进行图像分割预处理
    • 支持泰语和英语
  4. 安全与合规

    • 符合 GDPR 和 PDPA 标准
    • 处理后不保留数据
如何获取 API 密钥?

请访问 API 密钥管理 页面查看您现有的 API 密钥或申请新密钥。

示例

个人信息页

示例护照个人信息页

请求:

curl -X POST https://api.iapp.co.th/v3/store/ekyc/passport/v2 \
-H "apikey: YOUR_API_KEY" \
-F "file=@/path/to/passport.jpg"

响应:

{
"check_composite": "4",
"check_date_of_birth": "4",
"check_expiration_date": "4",
"check_number": "6",
"check_personal_number": "3",
"country": "THA",
"date_of_birth": "930710",
"expiration_date": "250304",
"method": "direct",
"mrz_type": "TD3",
"names": "MATHANIDA",
"nationality": "THA",
"number": "AC1062346",
"personal_number": "0012345678913",
"raw_text": "P<THAPOSHNASWADIWONG<<MATHANIDA<<<<<<<<<<<<<\nAC10623466THA9307104F25030440012345678913<34",
"sex": "F",
"surname": "POSHNASWADIWONG",
"type": "P",
"valid_composite": true,
"valid_date_of_birth": true,
"valid_expiration_date": true,
"valid_number": true,
"valid_personal_number": true,
"valid_score": 100,
"face": "/9j/4AAQSkZJRgABAQAAAQABAAD/..."
}

响应字段说明

字段说明格式示例
check_composite上下两条机器可读行的整体校验位单个数字"4"
check_date_of_birth出生日期字段的校验位单个数字"4"
check_expiration_date到期日期字段的校验位单个数字"4"
check_number证件号码的校验位单个数字"6"
check_personal_number个人号码的校验位单个数字"3"
country签发护照的国家代码3个字母"THA"
date_of_birth出生日期YYMMDD"930710"
expiration_date证件到期日期YYMMDD"250304"
method使用的读取方法字符串"direct"
mrz_type机器可读区的类型字符串"TD3"
names名字/名字字符串"MATHANIDA"
nationality持有人国籍3个字母"THA"
number护照号码字符串"AC1062346"
personal_number身份证号码字符串"0012345678913"
raw_text护照上的原始 MRZ 文本字符串"P<THAPOSHNASWADIWONG..."
sex性别单个字母"F"
surname姓氏/家名字符串"POSHNASWADIWONG"
type证件类型字符串"P"
valid_composite整体 MRZ 有效性检查布尔值true
valid_date_of_birth出生日期校验位有效性布尔值true
valid_expiration_date到期日期校验位有效性布尔值true
valid_number证件号码校验位有效性布尔值true
valid_personal_number个人号码校验位有效性布尔值true
valid_score整体有效性评分整数 0-100100
face提取的面部图像Base64 字符串"/9j/4AAQSkZJRgABA..."

PDF 文件处理

处理 PDF 文件时,响应格式略有不同:

  1. 响应将是一个 JSON 数组,包含每页的结果
  2. 每个页面结果包括:
    • page:页码
    • info:包含上述所有标准字段
  3. process_time 字段显示总处理时长

示例 PDF 响应结构:

[
{
"page": 1,
"info": {
"sex": "F",
"number": "AC1062346",
"expiration_date": "04/03/25",
"raw_text": "P<THAPOSHNASWADIWONG<<MATHANIDA<<<<<<<<<<<<<\nAC10623466THA9307104F25030440012345678913<34",
"personal_number": "0012345678913",
"surname": "POSHNASWADIWONG",
"nationality": "THA",
"date_of_birth": "10/07/93",
"names": "MATHANIDA",
"country": "THA",
"face": "iVBORw0...CYII=",
"inference": "3.888",
"file_name": "1676365480.3823211_thai_passport_page_1.png",
"message": "Success",
"status_code": 200
}
},
{
"process_time": "4.918s"
}
]

功能与能力

核心功能

  • MRZ(机器可读区)文本提取
  • 面部图像提取
  • 多页 PDF 支持
  • 自动图像方向校正
  • 用于倾斜图像的图像分割
  • 高精度验证检查

支持的字段

  • 证件类型
  • 签发国家
  • 证件号码
  • 持有人姓名
  • 国籍
  • 出生日期
  • 性别
  • 到期日期
  • 个人号码
  • 面部图像(base64)
  • 原始 MRZ 文本
  • 验证分数

API 端点

端点方法描述费用
/v3/store/ekyc/passport/v2
/passport-ocr/v2 (旧版)
POST增强型护照 OCR,准确率 95.51% - 提取 MRZ 数据和面部图像每页 0.75 IC
/v3/store/ekyc/passport/v1
/passport-ocr (旧版)
POST护照 OCR - 提取 MRZ 数据和面部图像每页 0.75 IC

API 参考

护照 OCR 端点

1. 护照 OCR(版本 1)

POST /v3/store/ekyc/passport/v1

对护照个人信息页进行 OCR 并提取 MRZ 数据。


2. 护照 OCR(版本 2)

POST /v3/store/ekyc/passport/v2

增强版,准确率提高(95.51%)。对护照个人信息页进行 OCR 并提取 MRZ 数据。

请求头

名称类型必需描述
apikey字符串您的 API 密钥

请求正文 (multipart/form-data)

参数类型必需描述
file文件图像文件 (JPG, PNG, PDF)
options字符串为倾斜图像处理启用 "segmentation"

代码示例

Curl

curl -X POST https://api.iapp.co.th/v3/store/ekyc/passport/front \
-H "apikey: YOUR_API_KEY" \
-F "file=@/path/to/file.jpg"

Python

import requests

url = "https://api.iapp.co.th/v3/store/ekyc/passport/v2"
headers = {
"apikey": "YOUR_API_KEY"
}
files = {
"file": open("passport.jpg", "rb")
}

response = requests.post(url, headers=headers, files=files)
print(response.json())

JavaScript

const axios = require("axios")
const FormData = require("form-data")
const fs = require("fs")

let data = new FormData()
data.append("file", fs.createReadStream("passport.jpg"))

let config = {
method: "post",
url: "https://api.iapp.co.th/v3/store/ekyc/passport/v2",
headers: {
apikey: "YOUR_API_KEY",
...data.getHeaders(),
},
data: data,
}

axios(config)
.then((response) => console.log(response.data))
.catch((error) => console.log(error))

PHP

<?php
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.iapp.co.th/v3/store/ekyc/passport/v2',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => array(
'apikey: YOUR_API_KEY'
),
CURLOPT_POSTFIELDS => array(
'file'=> new CURLFILE('passport.jpg')
)
));

$response = curl_exec($curl);
curl_close($curl);
echo $response;

Swift

import Foundation

let url = URL(string: "https://api.iapp.co.th/v3/store/ekyc/passport/v2")!
let boundary = "Boundary-\(UUID().uuidString)"

var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("YOUR_API_KEY", forHTTPHeaderField: "apikey")
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

let imageData = try! Data(contentsOf: URL(fileURLWithPath: "passport.jpg"))

var body = Data()
body.append("--\(boundary)\r\n")
body.append("Content-Disposition: form-data; name=\"file\"; filename=\"passport.jpg\"\r\n")
body.append("Content-Type: image/jpeg\r\n\r\n")
body.append(imageData)
body.append("\r\n--\(boundary)--\r\n")

let task = URLSession.shared.uploadTask(with: request, from: body) { data, response, error in
if let data = data {
let json = try? JSONSerialization.jsonObject(with: data)
print(json ?? "")
}
}
task.resume()

Kotlin

import okhttp3.*
import java.io.File

val client = OkHttpClient()

val file = File("passport.jpg")
val requestBody = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(
"file",
file.name,
RequestBody.create(MediaType.parse("image/jpeg"), file)
)
.build()

val request = Request.Builder()
.url("https://api.iapp.co.th/v3/store/ekyc/passport/v2")
.addHeader("apikey", "YOUR_API_KEY")
.post(requestBody)
.build()

client.newCall(request).execute().use { response ->
println(response.body()?.string())
}

Java

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.*;

public class PassportOCR {
public static void main(String[] args) throws IOException {
String boundary = "Boundary-" + System.currentTimeMillis();
URL url = new URL("https://api.iapp.co.th/v3/store/ekyc/passport/v2");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("apikey", "YOUR_API_KEY");
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

try (OutputStream os = conn.getOutputStream()) {
byte[] fileBytes = Files.readAllBytes(Paths.get("passport.jpg"));

os.write(("--" + boundary + "\r\n").getBytes());
os.write(("Content-Disposition: form-data; name=\"file\"; filename=\"passport.jpg\"\r\n").getBytes());
os.write(("Content-Type: image/jpeg\r\n\r\n").getBytes());
os.write(fileBytes);
os.write(("\r\n--" + boundary + "--\r\n").getBytes());
}

try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
}

Dart

import 'package:http/http.dart' as http;
import 'dart:io';

Future<void> scanPassport() async {
var url = Uri.parse('https://api.iapp.co.th/v3/store/ekyc/passport/v2');
var request = http.MultipartRequest('POST', url);

request.headers['apikey'] = 'YOUR_API_KEY';

request.files.add(
await http.MultipartFile.fromPath(
'file',
'passport.jpg',
),
);

var response = await request.send();
var responseBody = await response.stream.bytesToString();
print(responseBody);
}

局限性与最佳实践

局限性

  • 最大文件大小:10MB
  • 支持格式:JPG, PNG, PDF
  • 每张图像一个护照
  • 需要清晰、聚焦的图像

最佳实践

  • 确保良好的照明条件
  • 避免眩光和反射
  • 将护照置于画面中央
  • 保持护照平整
  • 使用高分辨率图像
  • 对倾斜图像启用分割选项

准确性与性能

总体准确性

  • 当前版本(2.0):95.51%
  • 前一版本(1.1):88.86%

字段级准确性(版本 1.1)

  • 姓名:81.93%
  • 姓氏:90.26%
  • 证件号码:84.03%
  • 国籍:88.09%
  • 面部检测:100%

处理速度

  • 单张图像:1-2 秒
  • PDF 文档:每页 2-3 秒
  • 使用分割时需要额外时间

影响准确性的因素

  • 图像质量
  • 照明条件
  • 证件位置
  • 图像分辨率
  • 证件状况
  • 图像倾斜角度

历史

版本 2.0(2023 年 2 月)

  • 总体准确性从 88.86% 提高到 95.51%
  • 升级了整个 OCR 引擎
  • 为倾斜图像添加了图像分割预处理

版本 1.1(2023 年 1 月)

  • 添加了将面部提取为 base64
  • 增加了对轻微倾斜图像的支持
  • 添加了 PDF 文件支持
  • 添加了多页 PDF 支持

版本 1.0(2022 年 2 月)

  • 初始发布
  • 支持使用 MRZ 的所有国家护照
  • 基本图像格式支持(PNG, JPG, JPEG)

定价

操作生产路径旧版路径IC 成本单位本地部署
护照 OCR(版本 1)/v3/store/ekyc/passport/v1/passport-ocr0.75 IC每次请求联系我们
护照 OCR(版本 2)/v3/store/ekyc/passport/v2/passport-ocr/v20.75 IC每次请求联系我们