Face Recognition API
REST API untuk mendaftarkan wajah, mengenali wajah, dan mengelola database wajah. Dapat diintegrasikan dari server manapun menggunakan HTTP request standar.
Pengantar
API ini memungkinkan server eksternal untuk:
- Mendaftarkan wajah — simpan foto beserta nama ke database
- Mengenali wajah — cocokkan foto dengan database, dapatkan nama + confidence score
- Mengelola database — lihat daftar orang terdaftar, statistik, dan hapus data
API menggunakan format multipart/form-data (upload file) atau application/json (gambar Base64). Semua response dalam format JSON.
Autentikasi
Semua request dari server eksternal wajib menyertakan token di header Authorization.
Header yang wajib dikirim
Authorization: Bearer 29b2a81ff6f3c5bb8e717affe27154cf4a9a0f07d7c47807
Contoh penggunaan:
curl -X POST https://face.drwapp.com/api/faces/list \ -H "Authorization: Bearer 29b2a81ff6f3c5bb8e717affe27154cf4a9a0f07d7c47807"
Format Gambar
Cara 1: Upload File
Kirim sebagai multipart/form-data dengan field image.
Format: JPG, PNG, WEBP
Ukuran maks: 15 MB
Cara 2: Base64 JSON
Kirim sebagai Base64 di field image_base64 dengan Content-Type: application/json.
Prefix opsional: data:image/jpg;base64,...
Tips Foto Terbaik
- • Wajah menghadap ke depan, terlihat jelas
- • Pencahayaan cukup, hindari backlight
- • Satu wajah per foto saat registrasi
- • Resolusi minimal 200×200 piksel
Error Handling
Semua error dikembalikan dalam format JSON dengan success: false dan error berisi pesan.
| HTTP Status | Penyebab Umum |
|---|---|
| 200 | Request berhasil |
| 400 | Nama kosong, tidak ada wajah terdeteksi, lebih dari 1 wajah saat registrasi |
| 404 | Database kosong, atau person_id tidak ditemukan |
| 500 | Error internal pada server |
Contoh response error:
{"success": false, "error": "Tidak ada wajah terdeteksi dalam foto"}
Endpoint
Periksa apakah layanan Face Recognition API sedang berjalan.
curl https://face.drwapp.com/health
import requests
resp = requests.get("https://face.drwapp.com/health")
print(resp.json())const resp = await fetch("https://face.drwapp.com/health");
const data = await resp.json();
console.log(data);Mendaftarkan wajah baru ke database. Untuk menambah foto ke orang yang sama, kirim ulang dengan person_id yang sama.
Parameter Request
name
string
Wajib
Nama lengkap orang yang didaftarkan.
image
file
Wajib*
File gambar (JPG/PNG/WEBP). Gunakan ini atau image_base64.
image_base64
string
Wajib*
Gambar dalam format Base64 (dengan atau tanpa prefix data:image/...;base64,).
person_id
string
Opsional
ID person yang sudah ada. Jika dikirim, foto ditambahkan ke orang tersebut (maks 5 foto untuk akurasi terbaik).
curl -X POST https://face.drwapp.com/api/faces/register \ -F "name=Budi Santoso" \ -F "image=@/path/to/foto.jpg" # Tambah foto ke orang yang sama curl -X POST https://face.drwapp.com/api/faces/register \ -F "name=Budi Santoso" \ -F "person_id=abc123def456" \ -F "image=@/path/to/foto2.jpg"
import requests
# Cara 1: Upload file
with open("foto.jpg", "rb") as f:
resp = requests.post(
"https://face.drwapp.com/api/faces/register",
data={"name": "Budi Santoso"},
files={"image": ("foto.jpg", f, "image/jpeg")}
)
print(resp.json())
# Cara 2: Base64 JSON
import base64
with open("foto.jpg", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
resp = requests.post(
"https://face.drwapp.com/api/faces/register",
json={"name": "Budi Santoso", "image_base64": b64}
)
print(resp.json())const formData = new FormData();
formData.append("name", "Budi Santoso");
formData.append("image", fileBlob, "foto.jpg");
const resp = await fetch("https://face.drwapp.com/api/faces/register", {
method: "POST",
body: formData
});
const data = await resp.json();
console.log(data);<?php
$ch = curl_init("https://face.drwapp.com/api/faces/register");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => [
"name" => "Budi Santoso",
"image" => new CURLFile("/path/to/foto.jpg", "image/jpeg"),
],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
?>Response
Mendeteksi dan mencocokkan semua wajah dalam foto dengan database. Mendukung foto dengan banyak wajah sekaligus.
Parameter Request
image
file
Wajib*
File gambar (JPG/PNG/WEBP).
image_base64
string
Wajib*
Gambar dalam format Base64.
tolerance
float 0.3–0.7
Opsional
Toleransi kecocokan. Default: 0.5. Nilai kecil = lebih ketat, nilai besar = lebih longgar.
curl -X POST https://face.drwapp.com/api/faces/recognize \ -F "image=@/path/to/foto.jpg" \ -F "tolerance=0.5"
import requests
with open("foto.jpg", "rb") as f:
resp = requests.post(
"https://face.drwapp.com/api/faces/recognize",
data={"tolerance": "0.5"},
files={"image": ("foto.jpg", f, "image/jpeg")}
)
result = resp.json()
for face in result["results"]:
if face["matched"]:
print(f"Dikenal: {face['name']} ({face['confidence']}%)")
else:
print("Tidak dikenal")const formData = new FormData();
formData.append("image", fileBlob, "foto.jpg");
formData.append("tolerance", "0.5");
const resp = await fetch("https://face.drwapp.com/api/faces/recognize", {
method: "POST",
body: formData
});
const result = await resp.json();
result.results.forEach(face => {
if (face.matched)
console.log(`Dikenal: ${face.name} (${face.confidence}%)`);
else
console.log("Tidak dikenal");
});<?php
$ch = curl_init("https://face.drwapp.com/api/faces/recognize");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => [
"tolerance" => "0.5",
"image" => new CURLFile("/path/to/foto.jpg", "image/jpeg"),
],
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
foreach ($result["results"] as $face) {
echo $face["matched"] ? "Dikenal: {$face['name']}\n" : "Tidak dikenal\n";
}
?>Response
Mengambil semua data orang yang terdaftar di database wajah.
curl https://face.drwapp.com/api/faces/list
import requests
data = requests.get("https://face.drwapp.com/api/faces/list").json()
for p in data["persons"]:
print(f"{p['name']} — {p['photo_count']} foto ({p['id']})")const data = await fetch("https://face.drwapp.com/api/faces/list").then(r => r.json());
data.persons.forEach(p => console.log(`${p.name} — ${p.photo_count} foto`));Mengambil ringkasan statistik database (jumlah orang dan total encoding).
curl https://face.drwapp.com/api/faces/stats
import requests
print(requests.get("https://face.drwapp.com/api/faces/stats").json())Menghapus semua data (foto dan encoding) milik seorang person secara permanen.
Path Parameter
person_id
string
Wajib
ID unik person yang ingin dihapus (dari endpoint register atau list).
curl -X DELETE https://face.drwapp.com/api/faces/delete/abc123def456
import requests
resp = requests.delete("https://face.drwapp.com/api/faces/delete/abc123def456")
print(resp.json())const resp = await fetch("https://face.drwapp.com/api/faces/delete/abc123def456", {
method: "DELETE"
});
const data = await resp.json();
console.log(data.message);<?php
$ch = curl_init("https://face.drwapp.com/api/faces/delete/abc123def456");
curl_setopt_array($ch, [CURLOPT_CUSTOMREQUEST => "DELETE", CURLOPT_RETURNTRANSFER => true]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $result["message"];
?>Ringkasan Endpoint
| Method | Endpoint | Fungsi |
|---|---|---|
| GET | /health | Cek status layanan |
| POST | /api/faces/register | Daftarkan wajah baru |
| POST | /api/faces/recognize | Kenali wajah dari foto |
| GET | /api/faces/list | Daftar semua orang di database |
| GET | /api/faces/stats | Statistik database |
| DELETE | /api/faces/delete/{person_id} | Hapus person dari database |
Contoh Integrasi Lengkap
Alur lengkap: daftarkan wajah → kenali → cek database → hapus.
Python
import requests, base64
BASE = "https://face.drwapp.com"
# 1. Daftarkan wajah
with open("foto.jpg", "rb") as f:
reg = requests.post(f"{BASE}/api/faces/register",
data={"name": "Budi Santoso"},
files={"image": ("foto.jpg", f, "image/jpeg")})
pid = reg.json()["person_id"]
print(f"Terdaftar: {pid}")
# 2. Kenali wajah
with open("foto_test.jpg", "rb") as f:
rec = requests.post(f"{BASE}/api/faces/recognize",
data={"tolerance": "0.5"},
files={"image": ("foto_test.jpg", f, "image/jpeg")})
for face in rec.json()["results"]:
print(f"{'Dikenal: ' + face['name'] if face['matched'] else 'Tidak dikenal'}")
# 3. Cek database
persons = requests.get(f"{BASE}/api/faces/list").json()
print(f"Total: {persons['total']} orang")
# 4. Hapus
print(requests.delete(f"{BASE}/api/faces/delete/{pid}").json()["message"])
JavaScript (Node.js)
import fs from "fs";
import FormData from "form-data";
import fetch from "node-fetch";
const BASE = "https://face.drwapp.com";
// 1. Daftarkan wajah
const form = new FormData();
form.append("name", "Budi Santoso");
form.append("image", fs.createReadStream("foto.jpg"), "foto.jpg");
const { person_id } = await fetch(`${BASE}/api/faces/register`, { method:"POST", body:form }).then(r=>r.json());
// 2. Kenali wajah
const form2 = new FormData();
form2.append("image", fs.createReadStream("foto_test.jpg"), "foto_test.jpg");
form2.append("tolerance", "0.5");
const result = await fetch(`${BASE}/api/faces/recognize`, { method:"POST", body:form2 }).then(r=>r.json());
result.results.forEach(f => console.log(f.matched ? `Dikenal: ${f.name}` : "Tidak dikenal"));
// 3. Hapus
await fetch(`${BASE}/api/faces/delete/${person_id}`, { method:"DELETE" });
PHP
<?php
define('BASE', 'https://face.drwapp.com');
// 1. Daftarkan wajah
$ch = curl_init(BASE . '/api/faces/register');
curl_setopt_array($ch, [CURLOPT_POST=>true, CURLOPT_RETURNTRANSFER=>true,
CURLOPT_POSTFIELDS=>['name'=>'Budi Santoso','image'=>new CURLFile('/path/foto.jpg','image/jpeg')]]);
$reg = json_decode(curl_exec($ch), true); curl_close($ch);
$pid = $reg['person_id'];
// 2. Kenali wajah
$ch = curl_init(BASE . '/api/faces/recognize');
curl_setopt_array($ch, [CURLOPT_POST=>true, CURLOPT_RETURNTRANSFER=>true,
CURLOPT_POSTFIELDS=>['tolerance'=>'0.5','image'=>new CURLFile('/path/foto_test.jpg','image/jpeg')]]);
$rec = json_decode(curl_exec($ch), true); curl_close($ch);
foreach ($rec['results'] as $face) echo $face['matched'] ? "Dikenal: {$face['name']}\n" : "Tidak dikenal\n";
// 3. Hapus
$ch = curl_init(BASE . "/api/faces/delete/{$pid}");
curl_setopt_array($ch, [CURLOPT_CUSTOMREQUEST=>'DELETE', CURLOPT_RETURNTRANSFER=>true]);
$del = json_decode(curl_exec($ch), true); curl_close($ch);
echo $del['message'];
?>