🪪✏️ 带签名检测的泰国民众身份证照片识别
1.25 IC每页
欢迎使用带签名检测的泰国民众身份证照片识别 API,这是由艾艾普科技有限公司开发的一款人工智能产品。我们的 API 旨在从拍摄的泰国民众身份证副本(彩色和黑白均支持)中提取文本信息,并检测签名。该系统可以自动在图像中定位身份证,并以 JSON 格式返回准确的文本信息,例如身份证号码、姓名、姓氏、出生日期和有效期。
立即试用!
入门指南
-
先决条件
- 艾艾普科技有限公司的 API 密钥
- 泰国民众身份证复印件照片
- 支持的文件格式:JPEG、JPG、PNG、HEIC、HEIF
- 最大文件大小:2MB
-
快速入门
- 处理时间:每张图片 1-3 秒
- 自动检测和裁剪身份证
- 支持彩色和黑白复印件
-
主要功能
- 详细的字段提取,包括:
- 身份证号码
- 全名(泰语和英语)
- 出生日期
- 地址
- 有效期
- 签名检测
- 灵活的 JSON 响应格式
- 详细的字段提取,包括:
-
安全与合规
- 符合 GDPR 和 PDPA 标准
- 处理后不保留数据
如何获取 API 密钥?
请访问 API 密钥管理 页面查看您现有的 API 密钥或申请新密钥。
示例
备注
此 API 针对打印的身份证复印件进行 OCR 优化。如果需要直接从实体身份证进行 OCR,请改用 泰国民众身份证 OCR。
请求
curl -X POST https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card-with-signature \
-H "apikey: YOUR_API_KEY" \
-F "file=@/path/to/idcard.jpg"
响应
{
"address_district": "บางละมุง",
"address_full": "XXXXXX XXXXXX ต.หนองปรือ อ.บางละมุง จ.ชลบุรี",
"address_number": "XXXXXX XXXXXX",
"address_postal_code": "20150",
"address_province": "ชลบุรี",
"address_subdistrict": "ต.หนองปรือ",
"date_of_birth": "XX มี.ค. 2500",
"date_of_expire": "XX มี.ค. 2568",
"file_name_id_card": "front.jpg",
"fullname_en": "Mrs. XXXXXX Lopez",
"fullname_th": "นาง XXXXXX โลเปช",
"init_en": "Mrs.",
"init_th": "นาง",
"name_en": "XXXXXX",
"name_th": "XXXXXX",
"national_id": "34117XXXXXX334",
"process_time": 2.1,
"reason_code_api": 200,
"reason_code_id_card": 1,
"reason_code_id_card_national_id": 1,
"reason_code_id_card_signature": 0,
"reason_codename_id_card_signature": 1,
"request_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx",
"surname_en": "Lopez",
"surname_th": "โลเปช"
}
功能与能力
核心功能
- 自动在图像中检测身份证
- 支持彩色和黑白复印件
- 签名检测
- 快速处理时间(1-3 秒)
- 支持多种文件格式
图片要求
- 最小卡片尺寸:宽度 600px,高度 400px
- 最大文件大小:2MB
- 支持格式:JPEG、JPG、PNG、HEIC、HEIF
API 端点
| 端点 | 方法 | 描述 | 费用 |
|---|---|---|---|
POST /v3/store/ekyc/thai-national-id-card-with-signature旧版: /thai-national-id-card-with-signature/front旧版: /thai-national-id-card/copy | POST | 从拍摄的泰国民众身份证复印件中提取详细信息并检测签名 | 每页 1.25 IC |
响应字段
| 字段 | 类型 | 描述 |
|---|---|---|
| address_district | String | 区名称 |
| address_full | String | 完整地址 |
| address_number | String | 家庭住址 |
| address_postal_code | String | 邮政编码 |
| address_province | String | 省名称 |
| address_subdistrict | String | 街道/镇名称 |
| date_of_birth | String | 泰语出生日期 |
| date_of_expire | String | 泰语到期日期 |
| file_name_id_card | String | 图片文件名 |
| fullname_en | String | 英文全名(姓名+姓氏) |
| fullname_th | String | 泰语全名(姓名+姓氏) |
| init_en | String | 英文称谓 |
| init_th | String | 泰语称谓 |
| name_en | String | 英文名 |
| name_th | String | 泰语名 |
| national_id | String | 国民身份证号码 |
| process_time | Float | 处理时间(秒) |
| reason_code_api | Integer | 响应状态码 |
| reason_code_id_card | Integer | 0 - 图像中未找到身份证,1 - 图像中找到身份证 |
| reason_code_id_card_national_id | Integer | 0 - 未找到身份证号码,1 - 找到身份证号码 |
| reason_codename_id_card | Integer | 解释 reason_code_id_card_national_id 的代码。(待定) |
| reason_code_id_card_signature | Integer | 0 - 纸张上未找到签名,1 - 纸张上找到签名 |
| reason_codename_id_card_signature | Integer | 解释 reason_code_id_card_signature 的代码。(待定) |
| request_id | String | API 网关的请求 ID |
| surname_en | String | 英文姓氏 |
| surname_th | String | 泰语姓氏 |
API 参考
带签名检测的泰国民众身份证照片识别端点
1. 带签名检测的泰国民众身份证照片识别
POST /v3/store/ekyc/thai-national-id-card-with-signature
从拍摄的泰国民众身份证复印件中提取详细信息并检测签名。
请求头
| 名称 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| apikey | string | 是 | 您的 API 密钥 |
请求体 (multipart/form-data)
| 参数 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
| file | File | 是 | 拍摄的泰国民众身份证复印件图片文件 |
代码示例
Curl
curl -X POST https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card-with-signature \
-H "apikey: YOUR_API_KEY" \
-F "file=@/path/to/file.jpg"
Python
import requests
url = "https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card-with-signature"
api_key = "YOUR_API_KEY"
# 准备图片文件
files = {
'file': ('idcard.jpg', open('path/to/idcard.jpg', 'rb'), 'image/jpeg')
}
# 将 API 密钥添加到请求头
headers = {
'apikey': api_key
}
# 发送请求
response = requests.post(url, headers=headers, files=files)
# 打印结果
print(response.json())
JavaScript
// 使用 Fetch API
const formData = new FormData()
formData.append("file", fileInput.files[0])
fetch("https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card-with-signature", {
method: "POST",
headers: {
apikey: "YOUR_API_KEY",
},
body: formData,
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error))
PHP
<?php
$curl = curl_init();
$file = new CURLFile('path/to/idcard.jpg', 'image/jpeg', 'idcard.jpg');
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card-with-signature',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'apikey: YOUR_API_KEY'
],
CURLOPT_POSTFIELDS => [
'file' => $file
]
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
Swift
import Foundation
let url = URL(string: "https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card-with-signature")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
let boundary = "Boundary-\(UUID().uuidString)"
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
request.setValue("YOUR_API_KEY", forHTTPHeaderField: "apikey")
let imageData = try! Data(contentsOf: URL(fileURLWithPath: "path/to/idcard.jpg"))
var body = Data()
body.append("--\(boundary)\r\n")
body.append("Content-Disposition: form-data; name=\"file\"; filename=\"idcard.jpg\"\r\n")
body.append("Content-Type: image/jpeg\r\n\r\n")
body.append(imageData)
body.append("\r\n--\(boundary)--\r\n")
request.httpBody = body
URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data {
let json = try? JSONSerialization.jsonObject(with: data)
print(json ?? "")
}
}.resume()
Kotlin
import okhttp3.*
val client = OkHttpClient()
val requestBody = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(
"file",
"idcard.jpg",
File("path/to/idcard.jpg")
.asRequestBody("image/jpeg".toMediaTypeOrNull())
)
.build()
val request = Request.Builder()
.url("https://api.iapp.co.th/v3/store/ekyc/thai-national-id-card-with-signature")
.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;
public class IDCardAPI {
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/thai-national-id-card-with-signature");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
conn.setRequestProperty("apikey", "YOUR_API_KEY");
try (OutputStream os = conn.getOutputStream()) {
File file = new File("path/to/idcard.jpg");
writeMultipartFile(os, "file", file, boundary);
os.write(("--" + boundary + "--\r\n").getBytes());
}
try (BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
private static void writeMultipartFile(OutputStream os, String name, File file, String boundary)
throws IOException {
os.write(("--" + boundary + "\r\n").getBytes());
os.write(("Content-Disposition: form-data; name=\"" + name + "\"; filename=\"" +
file.getName() + "\"\r\n").getBytes());
os.write("Content-Type: image/jpeg\r\n\r\n".getBytes());
try (FileInputStream fis = new FileInputStream(file)) {
byte[] buffer = new byte[4096];
int length;
while ((length = fis.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
os.write("\r\n".getBytes());
}
}
}
Dart
import 'package:http/http.dart' as http;
Future<void> uploadIDCard() async {
var url = Uri.parse('https://api.iapp.co.th/thai-national-id-card-with-signature');
var request = http.MultipartRequest('POST', url);
request.headers['apikey'] = 'YOUR_API_KEY';
request.files.add(
await http.MultipartFile.fromPath(
'file',
'path/to/idcard.jpg',
),
);
var response = await request.send();
var responseBody = await response.stream.bytesToString();
print(responseBody);
}
错误代码
身份证检测代码
| 状态码 | 状态消息 | 描述 |
|---|---|---|
| 1 | pass | 对读取的内容有信心 |
| 0 | manual check | 对内容不确定,需要人工检查 |
签名检测代码
| 状态码 | 状态消息 | 描述 |
|---|---|---|
| 1 | pass | 纸上找到签名 |
| 0 | manual check | 未找到签名或需要验证 |
API 响应代码
| 状态码 | 状态消息 | 描述 |
|---|---|---|
| 200 | SUCCESS | 请求成功 |
| 404 | REQUESTED_URL_NOT_FOUND | API 路由未找到 |
| 405 | METHOD_NOT_ALLOWED | HTTP 方法不正确 |
| 413 | IMAGE_FILE_IS_TOO_LARGE | 文件超出 2MB 限制 |
| 414 | NO_FILE_ATTACHED | 请求中没有文件 |
| 415 | INVALID_IMAGE_SIZE | 图片尺寸无效 |
| 420 | NO_ID_CARD_FOUND | 图像中未检测到身份证 |
| 421 | IMAGE_ERROR_UNSUPPORTED_FORMAT | 不支持或损坏的图片格式 |
| 422 | INVALID_IMAGE_SIZE | 图片尺寸不满足要求 |
| 427 | LONG_TIME_TO_PROCESS | 服务器处理超时 |
| 428 | LONG_TIME_TO_REQUEST | 队列超时 |
| 560 | SERVER_IS_BUSY | 服务器过载,需要重试 |
| 563 | ID_CARD_API_NOT_SUPPORT_THIS_IMAGE | 处理错误 |
最佳实践
-
图片质量
- 确保良好的光照
- 避免模糊的图像
- 保持身份证清晰可见
-
处理
- 检查响应中的原因代码
- 验证提取的信息
- 妥善处理错误
-
安全
- 妥善保管 API 密钥
- 验证输入文件
- 遵守数据保护指南