跳到主要内容

👥🔍 人脸验证

0.3 IC每次请求🏆 iBeta Level 1 Certified
v2.0 活跃 POST /v3/store/ekyc/face-verification

欢迎使用人脸验证 API 2.0 版本,这是由艾艾普科技有限公司开发的一款人工智能产品。我们的 API 旨在以高精度和速度验证和比较两张图像中的人脸。API 提供相似度分数,以帮助确定两张人脸是否属于同一个人。

立即试用!

主图示例图片 (点击尝试)

Example 1

对比图示例图片 (点击尝试)

Example 1

入门指南

  1. 先决条件

    • 艾艾普科技提供的 API 密钥
    • 两张包含待比较人脸的图片文件
    • 支持的格式:JPG、JPEG、PNG、HEIC 和 HEIF
    • 文件最大尺寸:每张图片 2MB
    • 最小图片尺寸:单人及多人图像为 600px x 400px
  2. 快速入门

    • 快速处理时间
    • 高精度人脸验证
    • 支持多种文件格式
    • 灵活的评分选项
  3. 主要功能

    • 人脸与人脸的比较
    • 相似度评分
    • 公司特定阈值
    • 自定义最低分数设置
    • 人脸检测置信度分数
  4. 安全与合规

    • 符合 GDPR 和 PDPA
    • 不保留图像数据
    • 安全的 API 端点
如何获取 API 密钥?

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

理解相似度分数

相似度分数的范围是 0 到 2822,它来源于人脸模板匹配的 166 个点。每个点的相似度范围为 0-17,是通过计算 17 个周围点之间的距离、角度和特殊特征得出的。分数越高,属于同一个人脸的可能性越大。

99.50% 精度的标准阈值为 36。因此,如果分数低于 36,则认为不是同一个人;如果分数高于 36,则应视为同一个人脸。

99.95% 精度的更高阈值为 48。

备注

实际阈值应根据您的具体用例和安全要求来确定。

示例

人脸验证 API 请求

图片预览

图片 1图片 2
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

用于人脸匹配和验证的备选端点。


请求头

名称类型必需描述
apikeystring您的 API 密钥

请求体 (multipart/form-data)

| 参数 | 类型 | 必需 | 描述 | | --------- | ------ | -------- | | | file1 | 文件 | 是 | 用于比较的第一张图片 | | file2 | 文件 | 是 | 用于比较的第二张图片 | | threshold | 数字 | 否 | 人脸匹配决策的阈值分数。默认值为 36。为实现非常低的误接受率 (FAR),您可以将其设置为 48。 |

错误代码

常见错误

代码消息描述
404No route matched无效的 API 端点
405Method not allowed无效的 HTTP 方法
413File too large图片超出 2MB 限制
415Invalid extension不支持的文件格式

处理错误

代码消息描述
420Parameter missing未提供必需的参数
423Face not found图片中未检测到人脸
440No file attached未包含图片文件
441Too many images提供的图片文件过多
442Unsupported format无效的图片格式

服务器错误

代码消息描述
560Server busy服务器队列已满
561Processing timeout操作耗时过长
562Request 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 格式
  • 每次比较只支持一张人脸,支持多人

最佳实践

  • 使用清晰、光线充足的人脸图像
  • 确保人脸清晰可见且无遮挡
  • 提交符合最小尺寸要求的图像
  • 遵守文件大小限制
  • 使用合适的文件格式

准确性与性能

  • 高精度人脸检测
  • 快速处理时间
  • 可配置的置信度阈值
  • 影响准确性的因素:
    • 图像质量
    • 人脸可见性
    • 光照条件
    • 人脸角度/姿态

定价

操作生产环境路径旧版路径IC 费用单位本地部署
人脸验证/v3/store/ekyc/face-verification/face-verification0.3 IC每次请求联系我们
人脸验证 v2/v3/store/ekyc/face-verification/face-verification/v20.3 IC每次请求
人脸比较/v3/store/ekyc/face-verification/face_compare0.3 IC每次请求
人脸匹配 (备选)/v3/store/ekyc/face-verification/face20.3 IC每次请求