👥🔍 人脸验证
欢迎使用人脸验证 API 2.0 版本,这是由艾艾普科技有限公司开发的一款人工智能产品。我们的 API 旨在以高 精度和速度验证和比较两张图像中的人脸。API 提供相似度分数,以帮助确定两张人脸是否属于同一个人。
立即试用!
入门指南
-
先决条件
- 艾艾普科技提供的 API 密钥
- 两张包含待比较人脸的图片文件
- 支持的格式:JPG、JPEG、PNG、HEIC 和 HEIF
- 文件最大尺寸:每张图片 2MB
- 最小图片尺寸:单人及多人图像为 600px x 400px
-
快速入门
- 快速处理时间
- 高精度人脸验证
- 支持多种文件格式
- 灵活的评分选项
-
主要功能
- 人脸与人脸的比较
- 相似度评分
- 公司特定阈值
- 自定义最低分数设置
- 人脸检测置信度分数
-
安全与合规
- 符合 GDPR 和 PDPA
- 不保留图像数据
- 安全的 API 端点
请访问 API 密钥管理 页面查看您现有的 API 密钥或申请新密钥。
理解相似度分数
相似度分数的范围是 0 到 2822,它来源于人脸模板匹配的 166 个点。每个点的相似度范围为 0-17,是通过计算 17 个周围点之间的距离、角度和特殊特征得出的。分数越高,属于同一个人脸的可能性越大。
99.50% 精度的标准阈值为 36。因此,如果分数低于 36,则认为不是同一个人;如果分数高于 36,则应视为同一个人脸。
99.95% 精度的更高阈值为 48。
实际阈值应根据您的具体用例和安全要求来确定。
示例
人脸验证 API 请求
图片预览


curl --location --request POST 'https://api.iapp.co.th/v3/store/ekyc/face-verification' \
--header 'apikey: YOUR_API_KEY' \
--form 'file1=@"{Your Image File Path 1}"' \
--form 'file2=@"{Your Image File Path 2}"'
人脸验证 API 响应:
{
"duration": 2.1263949871063232,
"matched": true,
"message": "successfully performed",
"score": 38.0,
"threshold": 37
}
功能与能力
核心功能
- 人脸检测和比较
- 支持 JPG、JPEG、PNG、HEIC 和 HEIF 格式
- 最小图片尺寸:单人及多人图像宽度 600px x 高度 400px
- 最大文件尺寸:2MB
- 可配置的检测和比较分数
- REST API 接口
- 注重隐私:处理数值特征,不存储图像
支持的操作
- 比较两张图片中的人脸
- 公司特定分数配置
- 自定义最低分数阈值
API 端点
| 端点 | 方法 | 描述 | 费用 |
|---|---|---|---|
/v3/store/ekyc/face-verification/face-verification, /face-verification/v2, /face2, /face_compare (旧版) | POST | 比较两张人脸图片,以确定是否为同一个人 | 0.3 IC |
API 参考
人脸验证端点
1. 人脸验证 (主)
POST /v3/store/ekyc/face-verification
比较两张人脸图片,以确定它们是否属于同一个人。返回相似度分数和匹配状态。
2. 人脸验证 v2
📦 旧版路径: POST /face-verification/v2
具有增强准确性的人脸验证的替代版本。
3. 人脸比较
📦 旧版路径: POST /face_compare
用于比较两张图片中人脸的旧版端点。
4. 人脸匹配 (备选)
📦 旧版路径: POST /face2
用于人脸匹配和验证的备选端点。
请求头
| 名称 | 类型 | 必需 | 描述 |
|---|---|---|---|
| apikey | string | 是 | 您的 API 密钥 |
请求体 (multipart/form-data)
| 参数 | 类型 | 必需 | 描述 | | --------- | ------ | -------- | | | file1 | 文件 | 是 | 用于比较的第一张图片 | | file2 | 文件 | 是 | 用于比较的第二张图片 | | threshold | 数字 | 否 | 人脸匹配决策的阈值分数。默认值为 36。为实现非常低的误接受率 (FAR),您可以将其设置为 48。 |
错误代码
常见错误
| 代码 | 消息 | 描述 |
|---|---|---|
| 404 | No route matched | 无效的 API 端点 |
| 405 | Method not allowed | 无效的 HTTP 方法 |
| 413 | File too large | 图片超出 2MB 限制 |
| 415 | Invalid extension | 不支持的文件格式 |
处理错误
| 代码 | 消息 | 描述 |
|---|---|---|
| 420 | Parameter missing | 未提供必需的参数 |
| 423 | Face not found | 图片中未检测到人脸 |
| 440 | No file attached | 未包含图片文件 |
| 441 | Too many images | 提供的图片文件过多 |
| 442 | Unsupported format | 无效的图片格式 |
服务器错误
| 代码 | 消息 | 描述 |
|---|---|---|
| 560 | Server busy | 服务器队列已满 |
| 561 | Processing timeout | 操作耗时过长 |
| 562 | Request timeout | 队列等待时间过长 |
代码示例
Curl
curl -X POST https://api.iapp.co.th/v3/store/ekyc/face-verification \
-H "apikey: YOUR_API_KEY" \
-F "file=@/path/to/file.jpg"
Python
import requests
url = "https://api.iapp.co.th/v3/store/ekyc/face-verification"
# 使用默认分数
payload={}
files=[
('file1',('{Your Image File Name 1}',open('{Your Image File Path 1}','rb'),'application/octet-stream')),
('file2',('{Your Image File Name 2}',open('{Your Image File Path 2}','rb'),'application/octet-stream'))
]
headers = {
'apikey': '{Your API Key}'
}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text)
Javascript
const axios = require("axios")
const FormData = require("form-data")
const fs = require("fs")
let data = new FormData()
data.append("file1", fs.createReadStream("/Users/iapp/Downloads/facever_test1 (3).png"))
data.append("file2", fs.createReadStream("/Users/iapp/Downloads/facever_test2 (3).png"))
let config = {
method: "post",
maxBodyLength: Infinity,
url: "https://api.iapp.co.th/v3/store/ekyc/face-verification",
headers: {
apikey: "YOUR_API_KEY",
...data.getHeaders(),
},
data: data,
}
axios
.request(config)
.then((response) => {
console.log(JSON.stringify(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/face-verification',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array('file1'=> new CURLFILE('{Your Image File Name 1}'),'file2'=> new CURLFILE('{Your Image File Name 2}')),
CURLOPT_HTTPHEADER => array(
'apikey: {Your API Key}'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Swift
let parameters = [
[
"key": "file1",
"src": "{Your Image File Name 1}",
"type": "file"
],
[
"key": "file2",
"src": "{Your Image File Name 2}",
"type": "file"
]] as [[String: Any]]
let boundary = "Boundary-\(UUID().uuidString)"
var body = Data()
var error: Error? = nil
for param in parameters {
if param["disabled"] != nil { continue }
let paramName = param["key"]!
body += Data("--\(boundary)\r\n".utf8)
body += Data("Content-Disposition:form-data; name=\"\(paramName)\"".utf8)
if param["contentType"] != nil {
body += Data("\r\nContent-Type: \(param["contentType"] as! String)".utf8)
}
let paramType = param["type"] as! String
if paramType == "text" {
let paramValue = param["value"] as! String
body += Data("\r\n\r\n\(paramValue)\r\n".utf8)
} else {
let paramSrc = param["src"] as! String
let fileURL = URL(fileURLWithPath: paramSrc)
if let fileContent = try? Data(contentsOf: fileURL) {
body += Data("; filename=\"\(paramSrc)\"\r\n".utf8)
body += Data("Content-Type: \"content-type header\"\r\n".utf8)
body += Data("\r\n".utf8)
body += fileContent
body += Data("\r\n".utf8)
}
}
}
body += Data("--\(boundary)--\r\n".utf8);
let postData = body
var request = URLRequest(url: URL(string: "https://api.iapp.co.th/v3/store/ekyc/face-verification")!,timeoutInterval: Double.infinity)
request.addValue("{YOUR API KEY}", forHTTPHeaderField: "apikey")
request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
request.httpBody = postData
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
return
}
print(String(data: data, encoding: .utf8)!)
}
task.resume()
Kotlin
val client = OkHttpClient()
val mediaType = "text/plain".toMediaType()
val body = MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file1","{Your Image File Name 1}",
File("{Your Image File Path 1}").asRequestBody("application/octet-stream".toMediaType()))
.addFormDataPart("file2","{Your Image File Name 1}",
File("{Your Image File Path 1}").asRequestBody("application/octet-stream".toMediaType()))
.build()
val request = Request.Builder()
.url("https://api.iapp.co.th/v3/store/ekyc/face-verification")
.post(body)
.addHeader("apikey", "{YOUR API KEY}")
.build()
val response = client.newCall(request).execute()
Java
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file1","{Your Image File Name 1}",
RequestBody.create(MediaType.parse("application/octet-stream"),
new File("{Your Image File Path 1}")))
.addFormDataPart("file2","{Your Image File Name 2}",
RequestBody.create(MediaType.parse("application/octet-stream"),
new File("{Your Image File Path 2}")))
.build();
Request request = new Request.Builder()
.url("https://api.iapp.co.th/v3/store/ekyc/face-verification")
.method("POST", body)
.addHeader("apikey", "{YOUR API KEY}")
.build();
Response response = client.newCall(request).execute();
Dart
var headers = {
'apikey': '{YOUR API KEY}'
};
var request = http.MultipartRequest('POST', Uri.parse('https://api.iapp.co.th/v3/store/ekyc/face-verification'));
request.files.add(await http.MultipartFile.fromPath('file1', '{Your Image File Path 1}'));
request.files.add(await http.MultipartFile.fromPath('file2', '{Your Image File Path 2}'));
request.headers.addAll(headers);
http.StreamedResponse response = await request.send();
if (response.statusCode == 200) {
print(await response.stream.bytesToString());
}
else {
print(response.reasonPhrase);
}
限制与最佳实践
限制
- 最大文件尺寸:2MB
- 最小图片尺寸:600x400 像素
- 支持的格式:JPG、JPEG、PNG、HEIC 和 HEIF 文件以及 BASE64 格式
- 每次比较只支持一张人脸,支持多人
最佳实践
- 使用清晰、光线充足的人脸图像
- 确保人脸清晰可见且无遮挡
- 提交符合最小尺寸要求的图像
- 遵守文件大小限制
- 使用合适的文件格式