Nodeflux Central
Enrollment

Enrollment

Pendaftaran identitas wajah ke keyspace dengan dukungan multi-variasi untuk meningkatkan akurasi recognition di kondisi nyata.

Enrollment adalah proses mendaftarkan identitas wajah ke dalam database FREMIS-N. Saat enrollment, FREMIS-N mengekstrak representasi matematis unik dari wajah dalam foto — disebut embedding — dan menyimpannya di dalam keyspace yang ditentukan agar dapat dicari di kemudian hari. Setiap face_id dapat memiliki beberapa variasi enrollment; semakin beragam variasi yang didaftarkan, semakin baik kemampuan sistem mengenali orang tersebut dalam kondisi nyata yang bervariasi.

Halaman ini menjelaskan konsep dan cara kerja enrollment di FREMIS-N. Untuk referensi endpoint lengkap, lihat Enrollment API. Untuk memahami konsep keyspace sebelum memulai, lihat Konsep FREMIS-N.


Apa itu Enrollment di FREMIS-N

Enrollment adalah pemetaan satu-ke-satu antara sebuah identitas dan satu atau lebih vektor embedding wajah. Setiap identitas direpresentasikan oleh face_id — string bebas yang Anda tentukan (misalnya nomor karyawan, UUID, atau nama) — yang dipetakan ke embedding-embedding yang disimpan di dalam keyspace.

Saat proses enrollment berlangsung:

  1. FREMIS-N menerima gambar wajah dalam format base64
  2. Wajah dideteksi dan fitur uniknya diekstrak sebagai vektor fitur (embedding)
  3. Vektor tersebut disimpan di database persisten dan diindeks di indeks pencarian in-memory untuk pencarian cepat
  4. Sebuah variasi baru ditambahkan ke face_id yang bersangkutan

Hasil enrollment dapat digunakan langsung untuk 1:N recognition (siapa orang ini?) maupun 1:1 matching (apakah dua foto adalah orang yang sama?).


Multi-Variasi: Mengapa Beberapa Foto Meningkatkan Akurasi

Satu identitas tidak terbatas pada satu foto. FREMIS-N mendukung multi-variasi enrollment — Anda dapat mendaftarkan beberapa foto untuk face_id yang sama dengan sudut, kondisi pencahayaan, atau ekspresi yang berbeda.

Cara kerjanya: saat recognition dilakukan, FREMIS-N mencari kecocokan terhadap semua variasi yang terdaftar untuk setiap face_id. Jika salah satu variasi menghasilkan similarity di atas threshold, identitas dianggap cocok dan variasi yang paling mirip dilaporkan dalam respons.

Praktik Terbaik Multi-Variasi

Daftarkan 2–3 variasi per identitas: satu foto frontal, satu sedikit miring (±15°), dan satu dalam kondisi pencahayaan berbeda. Variasi yang lebih beragam meningkatkan kemampuan recognition secara signifikan, terutama untuk kamera CCTV dengan sudut tidak ideal.

Setiap variasi memiliki ID unik sendiri (variation ID) yang dapat dilihat via endpoint get-variations dan dapat dihapus secara individual tanpa menghapus seluruh enrollment melalui delete-enrollment-variation.


Pipeline Enrollment

Saat request enrollment tiba, FREMIS-N menjalankan serangkaian langkah secara berurutan sebelum mengembalikan respons. Memahami alur ini membantu Anda merancang integrasi yang tepat — terutama dalam hal penanganan latensi dan pemantauan sistem di bawah beban tinggi.

Ya Lolos Gagal Tidak HTTP Request HTTP Server Decode Gambar IQA aktif? Quality Check Antrian Internal HTTP 400 Pemrosesan Face Detection Face Alignment Feature Extraction Database Indeks Pencarian HTTP 200variation ID

HTTP Server Menerima Request

Async HTTP server FREMIS-N menerima request POST /v1/face/enrollment dan meneruskannya ke controller.

Decode Base64

Gambar yang dikirim dalam format base64 didekode menjadi representasi piksel di memori.

Validasi Kualitas (Jika IQA Diaktifkan)

Jika parameter IQA disertakan dalam request, IQA service mengevaluasi kecerahan, ketajaman, dan kontras gambar. Jika gambar tidak memenuhi threshold, FREMIS-N langsung mengembalikan HTTP 400 — proses berhenti di sini tanpa menyentuh GPU.

Antrean ke Antrian Kerja Internal

Request dimasukkan ke dalam antrian kerja internal (FIFO) yang dikerjakan oleh worker thread sesuai konfigurasi --max-workers. Di bawah beban burst, request berikutnya mengantri di sini sampai ada worker yang tersedia. Untuk detail cara kerja antrian, batching, lifecycle, dan monitoring, lihat Internal Work Queue.

Pantau metrik Prometheus queue_face (Gauge) untuk memantau kedalaman antrean saat enrollment berlangsung. Nilai yang terus naik menunjukkan worker tidak mengimbangi laju request.

Face Detection

Worker menjalankan model deteksi wajah untuk mendeteksi wajah dalam gambar. Output adalah area wajah yang terdeteksi beserta titik referensi untuk langkah alignment berikutnya.

Face Alignment

Titik referensi hasil deteksi digunakan untuk menormalkan orientasi wajah — mengkoreksi rotasi dan skala — sebelum tahap ekstraksi fitur. Hasilnya adalah crop wajah yang siap diproses.

Feature Extraction

Crop wajah yang sudah di-align diproses oleh model ekstraksi fitur untuk menghasilkan vektor embedding yang merepresentasikan identitas unik wajah tersebut.

Penyimpanan dan Indeksasi

Embedding disimpan ke database persisten (durable store) dan sekaligus ditambahkan ke indeks pencarian in-memory untuk keyspace yang bersangkutan. Setelah kedua operasi selesai, respons dikembalikan ke client.


Penyimpanan Embedding

Setiap embedding yang berhasil di-enroll disimpan di dua tempat secara bersamaan: database persisten sebagai penyimpanan tahan lama, dan indeks pencarian untuk pencarian 1:N yang cepat. Indeks pencarian bersifat per-keyspace — setiap keyspace memiliki index sendiri yang dimuat saat service pertama kali dijalankan. Index default melakukan pencarian eksak terhadap seluruh enrollment di keyspace, sehingga akurasi penuh dijaga dengan tradeoff waktu pencarian yang tumbuh dengan jumlah enrollment.


IQA — Image Quality Assessment

FREMIS-N menyediakan validasi kualitas gambar opsional yang disebut IQA (Image Quality Assessment). IQA memeriksa tiga dimensi kualitas sebelum embedding diekstrak:

ParameterDeskripsiNilai (0.0–1.0)
min_brightnessKecerahan minimum gambarTerlalu rendah = gambar gelap
min_sharpnessKetajaman minimum gambarTerlalu rendah = gambar buram
min_contrastKontras minimum gambarTerlalu rendah = gambar pucat/flat

IQA tidak aktif secara default — gambar diterima dan diproses tanpa validasi kualitas. Untuk mengaktifkannya, sertakan parameter additional_params dalam request enrollment:

{
  "image": "<base64-encoded-image>",
  "keyspace": "employees",
  "additional_params": {
    "face_id": "emp_001",
    "min_brightness": 0.4,
    "min_sharpness": 0.3,
    "min_contrast": 0.3,
    "return_iqa_result": true
  }
}

Jika gambar tidak memenuhi ambang batas yang ditentukan, FREMIS-N mengembalikan HTTP 400 dengan detail metrik kualitas aktual versus threshold yang diharapkan — sehingga aplikasi dapat memberikan feedback spesifik kepada pengguna (misalnya "gambar terlalu gelap, mohon gunakan pencahayaan yang lebih baik").

Jika return_iqa_result: true diaktifkan dan gambar lolos IQA, respons sukses juga menyertakan nilai aktual kecerahan, ketajaman, dan kontras gambar.

Gunakan IQA saat sumber gambar tidak dikontrol (misalnya upload dari pengguna langsung). Untuk enrollment yang dilakukan oleh operator terlatih dengan kamera terkontrol, IQA opsional dan dapat diabaikan untuk menyederhanakan alur integrasi.


Bentuk Response Enrollment

Enrollment yang berhasil mengembalikan JSON dengan struktur berikut:

{
  "face_id": "emp_001",
  "variation": "1234567890123456789",
  "face_detected": [
    {"top": 0.18, "left": 0.22, "height": 0.42, "width": 0.40}
  ]
}
FieldTipeDeskripsi
face_idstringIdentitas yang Anda tentukan saat enrollment.
variationstringID unik variasi yang baru dibuat, berupa 64-bit integer yang dikembalikan sebagai string. Setiap pemanggilan ke face_id yang sama menghasilkan variation baru — tidak ada overwrite.
face_detectedarray of objectKoordinat bounding box wajah yang terdeteksi. Nilai dinormalisasi ke rentang [0, 1] relatif terhadap dimensi gambar — bukan koordinat piksel. Field ini hanya ada jika data deteksi tersedia.

Nilai embedding tidak dikembalikan dalam respons enrollment — embedding hanya tersimpan di dalam FREMIS-N. Untuk menginspeksi embedding suatu identitas, gunakan endpoint yang tercantum di tabel Operasi Turunan Enrollment di bawah.


Embedding vs Gambar Mentah

FREMIS-N menyediakan dua jalur enrollment:

POST /v1/face/enrollment — jalur standar. Anda mengirim gambar base64, FREMIS-N mendeteksi wajah, mengekstrak embedding, lalu menyimpannya.

Gunakan jalur ini untuk sebagian besar kasus:

  • Enrollment langsung dari foto yang diunggah pengguna
  • Enrollment massal dari database foto internal
  • Skenario di mana komputasi embedding diserahkan sepenuhnya ke FREMIS-N

POST /v1/face/enrollment-by-embedding — jalur lanjutan. Anda mengirim vektor embedding yang sudah dihitung sebelumnya (pre-computed embedding), bukan gambar mentah.

Gunakan jalur ini ketika:

  • Ekstraksi embedding sudah dilakukan di sisi klien atau oleh sistem lain
  • Anda melakukan migrasi data dari sistem face recognition lain yang menggunakan embedding format FREMIS-N
  • Ingin mendaftarkan embedding hasil batch processing tanpa mengirim ulang gambar original
  • Gambar original sudah tidak tersedia tetapi embedding sudah dikomputasi

Operasi Turunan Enrollment

Setelah identitas terdaftar, FREMIS-N menyediakan serangkaian operasi untuk manajemen dan inspeksi enrollment:

Membaca & Menginspeksi

OperasiEndpointDeskripsi
Daftar enrollmentGET /v1/face/keyspace/{keyspace}/enrollmentSemua face_id dalam keyspace dengan pagination
Info embeddingGET /v1/face/keyspace/{keyspace}/id/{face_id}Vektor embedding agregasi untuk satu identitas
Embedding originalGET /v1/face/keyspace/{keyspace}/id/{face_id}/original-embeddingVektor presisi tinggi (sebelum kuantisasi)
Info lengkapGET /v1/face/info/{keyspace}/{face_id}Metadata enrollment: keyspace ID, partisi, dll.
Daftar variasiGET /v1/face/get-variations/{keyspace}/{face_id}Semua variasi beserta ID, waktu buat, dan waktu update
Variasi duplikatGET /v1/face/get-duplicate-variations/{keyspace}Identitas yang memiliki variasi duplikat

Menghapus

OperasiEndpointDeskripsi
Hapus enrollmentPOST /v1/face/delete-enrollmentHapus satu atau beberapa face_id dari keyspace
Hapus satu variasiPOST /v1/face/delete-enrollment-variationHapus variasi tertentu tanpa menghapus seluruh enrollment

Endpoint penghapusan (delete-enrollment dan delete-enrollment-variation) menggunakan method POST dengan body request — bukan DELETE HTTP method. Ini merupakan desain API FREMIS-N yang intentional, memungkinkan penghapusan batch lewat body JSON.

Membersihkan Variasi Duplikat

Endpoint get-duplicate-variations membantu mengidentifikasi identitas yang memiliki variasi enrollment yang terlalu mirip satu sama lain. Variasi duplikat dapat menurunkan efisiensi pencarian (lebih banyak data untuk dibandingkan) tanpa menambah akurasi. Gunakan hasil endpoint ini sebagai input untuk delete-enrollment-variation guna membersihkan variasi yang redundan.


Alur Enrollment Tipikal

Pastikan Keyspace Sudah Ada

Enrollment harus dilakukan ke dalam keyspace yang sudah dibuat. Jika belum ada, buat keyspace baru melalui endpoint Keyspace. Setiap keyspace adalah namespace terisolasi — enrollment di keyspace A tidak bercampur dengan keyspace B.

Daftarkan Identitas dengan Variasi Pertama

Kirim foto pertama (idealnya frontal, pencahayaan merata) menggunakan POST /v1/face/enrollment. Tentukan face_id yang bermakna di additional_params — misalnya nomor karyawan atau UUID dari sistem Anda. FREMIS-N akan mengembalikan konfirmasi enrollment beserta bounding box wajah yang terdeteksi.

Tambahkan Variasi Tambahan (Opsional tapi Direkomendasikan)

Untuk meningkatkan akurasi recognition, tambahkan 1–2 variasi lagi dengan memanggil POST /v1/face/enrollment kembali menggunakan face_id yang sama tetapi foto berbeda (sudut atau kondisi cahaya berbeda). FREMIS-N akan menambahkan variasi baru ke identitas yang sudah ada.

Verifikasi Enrollment

Gunakan GET /v1/face/get-variations/{keyspace}/{face_id} untuk memverifikasi semua variasi terdaftar dengan benar. Pastikan jumlah variasi sesuai ekspektasi dan timestamp pembuatan masuk akal.

Uji Recognition

Lakukan test recognition menggunakan foto berbeda dari orang yang sama untuk memastikan enrollment berhasil dan threshold sesuai. Lihat 1:N Search dan 1:1 Match untuk detail.


Tips & Troubleshooting

Enrollment Ditolak — "No Face" / "Multi-face" / "Quality" / "Quota"

API enrollment mengembalikan HTTP 400 dengan salah satu pesan berikut. Penyebab dan tindakan:

PesanPenyebabTindakan
no face detectedTidak ada wajah yang terdeteksi di gambarGunakan foto dengan wajah jelas; hindari foto group, landscape, atau yang tidak berisi wajah
multiple faces detectedGambar mengandung > 1 wajahCrop image sehingga hanya ada 1 wajah, atau upload 1 image per request
face quality too lowWajah blur, terlalu kecil, atau sudut ekstremGunakan resolusi cukup, wajah ≥ 100px tinggi, frontal atau slight angle, pencahayaan merata
quota exceededTelah mencapai batas enrollment di lisensiHubungi tim Nodeflux untuk upgrade lisensi atau hapus enrollment lama yang tidak terpakai

Jika IQA aktif dan respons error berisi field metrik aktual (brightness/sharpness/contrast), gunakan nilai itu untuk memberikan feedback spesifik ke pengguna — misalnya "gambar terlalu gelap, gunakan pencahayaan yang lebih baik".

Enrollment Diterima tetapi Tidak Muncul di Recognition

API mengembalikan HTTP 200 dengan variation, tetapi recognition tidak menemukan identitas tersebut.

  1. Tunggu 10–30 detik lalu coba ulang. Indeks pencarian in-memory di-update di akhir pipeline enrollment; pada beban tinggi, propagasi bisa tertunda beberapa detik.
  2. Verifikasi face_id dan keyspace. Bandingkan request enrollment dan request recognition — keduanya harus menggunakan nilai keyspace dan face_id yang sama persis.
  3. List enrollment di keyspace. Panggil GET /v1/face/keyspace/{keyspace}/enrollment dan pastikan face_id ada dalam hasil.
  4. Untuk cluster, cek semua node hidup. Coordinator merutekan enrollment ke node yang memegang partisi dari face_id. Jika node target sedang down, enrollment di-antri oleh health watchdog dan baru tersedia setelah node kembali online — lihat Cluster Sharding.

Untuk threshold dan false-match recognition, lihat 1:N Search — Tips & Troubleshooting.


Selanjutnya

On this page