Skip to main content

👥🔍 การยืนยันตัวตนด้วยใบหน้า

0.3 ICต่อการเรียกใช้งาน🏆 ได้รับการรับรอง iBeta Level 1
v2.0 เปิดใช้งาน POST /v3/store/ekyc/face-verification
มี SDK สำหรับ Mobile & Web

ข้ามขั้นตอนการทำงานกับกล้อง — SDK eKYC แบบโอเพนซอร์สของเรา eKYC SDK (Web, Flutter, iOS, Android & React Native) สามารถจับภาพใบหน้าและเอกสาร และเรียก API นี้ให้คุณได้ในการเรียกเพียงครั้งเดียว ดูบน GitHub

ยินดีต้อนรับสู่ Face Verification API Version 2 ผลิตภัณฑ์ AI ที่พัฒนาโดย บริษัท ไอแอพพ์เทคโนโลยี จำกัด API ของเราออกแบบมาเพื่อยืนยันและเปรียบเทียบใบหน้าระหว่างสองภาพด้วยความแม่นยำและความเร็วสูง API ให้คะแนนความคล้ายคลึงกันเพื่อช่วยตัดสินว่าใบหน้าสองใบเป็นของบุคคลเดียวกันหรือไม่

ลองใช้ Demo!

ทดลองใช้ AI Demo

เข้าสู่ระบบหรือสร้างบัญชีฟรีเพื่อใช้งาน AI Demo และสำรวจ API ที่ทรงพลังของเรา

รับ 50 เครดิตฟรี (IC) เมื่อสมัครสมาชิก!

โปรโมชันหมดเขต 31 ธันวาคม 2568

ตัวอย่างรูปหลัก (คลิกเพื่อลอง)

Example 1

ตัวอย่างรูปเปรียบเทียบ (คลิกเพื่อลอง)

Example 1

ลองใช้ SDK (Live Camera)

iApp eKYC Web SDK แบบโอเพนซอร์สฟรีจะรวม API นี้ไว้ในการเรียกเพียงครั้งเดียว — เลือกภาพใบหน้าสองภาพด้านล่าง แล้ว SDK จะจัดการการอัปโหลด การแมปข้อผิดพลาด และการแยกวิเคราะห์การตอบสนอง ดูโฟลว์เพิ่มเติมได้ที่ หน้าสาธิตสด SDK เต็มรูปแบบ

Loading live demo…

เริ่มต้นใช้งาน

  1. สิ่งที่ต้องมี

    • API key จาก ไอแอพพ์เทคโนโลยี
    • ไฟล์รูปภาพสองไฟล์ที่มีใบหน้าเพื่อเปรียบเทียบ
    • รูปแบบที่รองรับ: JPG, JPEG, PNG, HEIC และ HEIF
    • ขนาดไฟล์สูงสุด: 2MB ต่อรูป
    • ขนาดภาพขั้นต่ำ: 600px x 400px สำหรับบุคคลหนึ่งคนและหลายคน
  2. เริ่มต้นอย่างรวดเร็ว

    • ระยะเวลาประมวลผลรวดเร็ว
    • การยืนยันใบหน้าที่มีความแม่นยำสูง
    • รองรับหลายรูปแบบไฟล์
    • ตัวเลือกการให้คะแนนที่ยืดหยุ่น
  3. คุณสมบัติหลัก

    • การเปรียบเทียบใบหน้าต่อใบหน้า
    • การให้คะแนนความคล้ายคลึง
    • เกณฑ์เฉพาะสำหรับบริษัท
    • การตั้งค่าคะแนนขั้นต่ำที่กำหนดเอง
    • คะแนนความเชื่อมั่นในการตรวจจับใบหน้า
  4. ความปลอดภัยและการปฏิบัติตามกฎ

    • ปฏิบัติตาม GDPR และ PDPA
    • ไม่มีการเก็บรักษาข้อมูลภาพ
    • จุดเชื่อมต่อ API ที่ปลอดภัย
วิธีรับ API Key?

กรุณาไปที่หน้า การจัดการ API Key เพื่อดู API key ที่มีอยู่ของคุณ หรือขอ API key ใหม่

ทำความเข้าใจคะแนนความคล้ายคลึง

คะแนนความคล้ายคลึงมีตั้งแต่ 0 ถึง 2822 ซึ่งได้มาจากการจับคู่เทมเพลตใบหน้าจาก 166 จุดบนใบหน้า สำหรับแต่ละจุดมีช่วงความคล้ายคลึง 0-17 ซึ่งคำนวณจากระยะทาง มุม และลักษณะพิเศษระหว่างจุดรอบข้าง 17 จุด คะแนนที่สูงขึ้นมีโอกาสมากขึ้นที่จะเป็นใบหน้าของบุคคลเดียวกัน

เกณฑ์มาตรฐานสำหรับความแม่นยำ 99.50% คือ 36 ดังนั้น หากคะแนนต่ำกว่า 36 จะถือว่าเป็นบุคคลที่แตกต่างกัน หากคะแนนสูงกว่า 36 ควรพิจารณาว่าเป็นใบหน้าของบุคคลเดียวกัน

เกณฑ์ที่สูงขึ้นสำหรับความแม่นยำ 99.95% คือ 48

note

ควรพิจารณาเกณฑ์จริงตามกรณีการใช้งานและความต้องการด้านความปลอดภัยเฉพาะของคุณ

ตัวอย่าง

คำขอ 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
  • เน้นความเป็นส่วนตัว: ประมวลผลคุณลักษณะเชิงตัวเลขโดยไม่จัดเก็บรูปภาพ

การดำเนินการที่รองรับ

  • การเปรียบเทียบใบหน้าระหว่างสองภาพ
  • การกำหนดค่าคะแนนเฉพาะสำหรับบริษัท
  • เกณฑ์คะแนนขั้นต่ำที่กำหนดเอง

Endpoint ของ API

EndpointMethodคำอธิบายค่าใช้จ่าย
/v3/store/ekyc/face-verification
/face-verification, /face-verification/v2, /face2, /face_compare (รุ่นเก่า)
POSTเปรียบเทียบภาพใบหน้าสองภาพเพื่อระบุว่าเป็นบุคคลเดียวกันหรือไม่0.3 IC

เอกสารอ้างอิง API

Endpoint การยืนยันใบหน้า

1. การยืนยันใบหน้า (หลัก)

POST /v3/store/ekyc/face-verification

เปรียบเทียบภาพใบหน้าสองภาพเพื่อระบุว่าเป็นบุคคลเดียวกันหรือไม่ ส่งคืนคะแนนความคล้ายคลึงและสถานะการจับคู่


2. การยืนยันใบหน้า v2

📦 เส้นทางรุ่นเก่า: POST /face-verification/v2

การยืนยันใบหน้าเวอร์ชันทางเลือกที่มีความแม่นยำสูงขึ้น


3. การเปรียบเทียบใบหน้า

📦 เส้นทางรุ่นเก่า: POST /face_compare

Endpoint รุ่นเก่าสำหรับการเปรียบเทียบใบหน้าระหว่างสองภาพ


4. การจับคู่ใบหน้า (ทางเลือก)

📦 เส้นทางรุ่นเก่า: POST /face2

Endpoint ทางเลือกสำหรับการจับคู่และยืนยันใบหน้า


ส่วนหัวของคำขอ

ชื่อประเภทจำเป็นคำอธิบาย
apikeystringใช่API key ของคุณ

เนื้อหาคำขอ (multipart/form-data)

พารามิเตอร์ประเภทจำเป็นคำอธิบาย
file1Fileใช่รูปภาพแรกสำหรับการเปรียบเทียบ
file2Fileใช่รูปภาพที่สองสำหรับการเปรียบเทียบ
thresholdNumberไม่ใช่คะแนนเกณฑ์สำหรับการตัดสินใจจับคู่ใบหน้า ค่าเริ่มต้นคือ 36 หากต้องการอัตราการยอมรับที่ผิดพลาด (FAR) ที่ต่ำมาก คุณสามารถตั้งค่าเป็น 48 ได้

รหัสข้อผิดพลาด

ข้อผิดพลาดทั่วไป

รหัสข้อความคำอธิบาย
404No route matchedEndpoint 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
  • ใบหน้าเดียวต่อภาพสำหรับการเปรียบเทียบและหลายคน

แนวปฏิบัติที่ดีที่สุด

  • ใช้ภาพใบหน้าที่ชัดเจนและมีแสงสว่างเพียงพอ
  • ตรวจสอบให้แน่ใจว่าใบหน้ามองเห็นได้ชัดเจนและไม่มีสิ่งกีดขวาง
  • ส่งภาพที่ตรงตามข้อกำหนดขนาดขั้นต่ำ
  • อยู่ในขีดจำกัดขนาดไฟล์
  • ใช้รูปแบบไฟล์ที่เหมาะสม

ความแม่นยำและประสิทธิภาพ

  • การตรวจจับใบหน้าที่มีความแม่นยำสูง
  • ระยะเวลาประมวลผลรวดเร็ว
  • เกณฑ์ความเชื่อมั่นที่ปรับแต่งได้
  • ปัจจัยที่มีผลต่อความแม่นยำ:
    • คุณภาพของภาพ
    • การมองเห็นใบหน้า
    • สภาพแสง
    • มุม/ท่าทางของใบหน้า

ราคา

การดำเนินการเส้นทาง Productionเส้นทางรุ่นเก่าค่าใช้จ่าย ICหน่วยOn-Premise
การยืนยันใบหน้า/v3/store/ekyc/face-verification/face-verification0.3 ICต่อ 1 การเรียกใช้งานติดต่อเรา
การยืนยันใบหน้า v2/v3/store/ekyc/face-verification/face-verification/v20.3 ICต่อ 1 การเรียกใช้งาน
การเปรียบเทียบใบหน้า/v3/store/ekyc/face-verification/face_compare0.3 ICต่อ 1 การเรียกใช้งาน
การจับคู่ใบหน้า (ทางเลือก)/v3/store/ekyc/face-verification/face20.3 ICต่อ 1 การเรียกใช้งาน