KEJEPRET-AI
Public sourceLayanan face recognition untuk foto event olahraga: enrollment, ekstraksi embedding, dan similarity search.
Sorotan kontribusi saya
- Menyusun endpoint/schema FastAPI-Pydantic untuk enrollment, embedding foto, search, health, dan API-key check.
- Membangun enrollment dari URL selfie, pemilihan wajah terbesar, validasi wajah kosong, serta upsert referensi pelari.
- Mengerjakan ekstraksi beberapa wajah per foto, pengaitan indeks wajah, dan penggantian embedding ketika foto diproses ulang.
Daftar isi · 8 modul kontribusi
Gambaran alur utama
6 langkahDua masukan—selfie pelari dan foto event—diproses menjadi vektor wajah. Kedua jalur ini bertemu saat client meminta pencarian kecocokan foto.
01Siapkan referensi pelari
Kirim permintaan enrollment
Backend marketplace & FastAPIBentuk embedding referensi
InsightFace & OpenCV
02Indeks wajah foto event
Kirim foto kandidat
Backend marketplaceSimpan vektor tiap wajah
Model & PostgreSQL/pgvector
03Bandingkan dan urutkan
Tentukan ruang pencarian
Client & layanan pencarianHitung cosine similarity
NumPy & API hasil
Rincian proses dan percabangan
Kirim permintaan enrollmentBackend marketplace & FastAPI
Client mengirim identitas pelari dan URL selfie melalui endpoint ber-API key. Layanan memuat serta men-decode gambar.
Bentuk embedding referensiInsightFace & OpenCV
Wajah terbesar dipilih untuk enrollment, lalu embedding di-upsert pada identitas pelari.
Ada wajah pada selfie?
- Ada wajah. Simpan atau perbarui referensi pelari untuk pencarian.
- Tidak ada wajah. Kembalikan kegagalan input; referensi wajah tidak dibuat sembarang.
Kirim foto kandidatBackend marketplace
Jalur foto event memuat gambar dari URL dan mendeteksi beberapa wajah yang mungkin berada dalam satu foto.
Simpan vektor tiap wajahModel & PostgreSQL/pgvector
Embedding 512 dimensi dikaitkan dengan foto dan indeks wajahnya. Pemrosesan ulang mengganti embedding foto yang lama.
Tentukan ruang pencarianClient & layanan pencarian
Client memberi identitas pelari dan daftar foto. Layanan mengambil referensi serta embedding kandidat yang terkait.
Hitung cosine similarityNumPy & API hasil
Bandingkan vektor, ambil skor terbaik per foto, terapkan threshold, lalu urutkan hasil.
Skor melewati threshold?
- Lolos threshold. ID foto dan skor dikembalikan untuk dipetakan ke tampilan marketplace.
- Tidak lolos. Foto tidak dimasukkan sebagai hasil kecocokan.
Selfie dan foto event menjadi dua jalur masukan terpisah. Layanan memakai model pretrained dan membandingkan embedding kandidat dengan cosine similarity di NumPy.
Tentang KEJEPRET-AI
KEJEPRET-AI adalah layanan pengenalan wajah yang menghubungkan selfie pelari dengan wajah pada foto event olahraga. Backend marketplace KeJepret mengirim referensi pelari dan foto kandidat, lalu memakai hasil pencarian untuk menampilkan foto yang memiliki kecocokan.
Saya membangun layanan Python/FastAPI ini, mulai dari inisialisasi model pretrained InsightFace, pemrosesan gambar, penyimpanan embedding, hingga API pencarian. KeJepret menggunakan layanan ini sebagai integrasi AI pada produk marketplace.
Kontribusi saya
Inisialisasi model dan runtime inferensi
Saya menyiapkan model pretrained InsightFace buffalo_l dengan ONNX Runtime pada CPU. Saya menghubungkan kebutuhan model dengan pemrosesan OpenCV/NumPy serta menyesuaikan lokasi artefak model. Bagian ini menjadi dasar layanan untuk menerima gambar dan menghasilkan representasi vektor wajah yang dapat dibandingkan.
Kontrak endpoint dan pemeriksaan akses
Saya menyusun schema request/response FastAPI dan Pydantic untuk enrollment, embedding foto, pencarian, penghapusan embedding, serta health. Endpoint mutasi dan pencarian memeriksa API key. Kontrak ini menghubungkan identitas pelari, URL gambar, daftar foto, dan keluaran layanan dengan backend marketplace.
Enrollment dan referensi wajah pelari
Saya membangun proses pengambilan gambar dari URL, decode gambar, deteksi wajah, serta pemilihan wajah terbesar sebagai referensi enrollment. Embedding dikaitkan dengan identitas pelari melalui operasi upsert agar enrollment berikutnya memperbarui referensi yang sama. Input tanpa wajah dikembalikan sebagai kegagalan input.
Ekstraksi beberapa wajah dalam foto
Saya mengembangkan pemrosesan foto event yang dapat memuat lebih dari satu wajah. Setiap embedding diberi hubungan ke foto dan indeks wajahnya. Ketika foto diproses ulang, embedding lama diganti agar data pencarian mengikuti hasil pemrosesan foto terbaru yang disimpan layanan.
Penyimpanan embedding dan hubungan data
Saya menyimpan vektor wajah berdimensi 512 pada PostgreSQL dengan ekstensi pgvector, beserta relasi pelari atau foto. Data referensi dan kandidat dipakai kembali ketika client meminta pencarian. Pemisahan hubungan pelari, foto, dan indeks wajah membantu memetakan hasil perbandingan kembali ke objek yang dikenali aplikasi.
Cosine similarity dan pengurutan hasil
Saya mengerjakan pengambilan embedding dari daftar foto kandidat, normalisasi vektor, serta perhitungan cosine similarity menggunakan NumPy. Saya mengambil skor terbaik per foto, memetakan skor ke skala aplikasi, menerapkan threshold, lalu mengurutkan hasil sebelum dikembalikan kepada client. Perbandingan kandidat dijalankan pada lapisan aplikasi Python.
Penghapusan data dan integrasi marketplace
Saya menyediakan endpoint untuk menghapus embedding pelari atau foto dan menyesuaikan kontrak identitas serta input daftar foto. Pekerjaan ini menghubungkan pemeliharaan data AI dengan perubahan data pada marketplace, sekaligus memastikan respons ID foto dan skor dapat dipakai oleh alur pencarian KeJepret.
Container dan kebutuhan hosting model
Saya menyesuaikan container, permission, lokasi model, serta kebutuhan startup layanan untuk lingkungan hosting. Saya juga memperbaiki kontrak API yang digunakan backend. Fokusnya adalah menyiapkan layanan inferensi yang dapat dipanggil aplikasi utama dengan bentuk input/output yang konsisten.
Bidang & teknologi inti
Bidang proyek
Teknologi inti
14 commit dalam 12 bulan terakhir
Semua branch| Nov | Des | Jan | Feb | Mar | Apr | Mei | Jun | Jul | Agu | Sep | Okt | Nov | |||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Minggu | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| Senin | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| Selasa | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| Rabu | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| Kamis | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| Jumat | |||||||||||||||||||||||||||||||||||||||||||||||||||||
| Sabtu |
Cara perhitungan · 1 repo · 1 branch
Commit milik saya yang terjangkau dari seluruh branch remote saat sinkronisasi. Satu SHA dihitung sekali, termasuk jika ada di beberapa branch atau fork. Merge commit dikecualikan. Tanggal memakai waktu author dalam WIB, bukan waktu push. Streak saat ini tetap berjalan bila commit terakhir kemarin dan hari ini belum selesai.
Ini kalender commit dengan cakupan semua branch, sehingga angkanya dapat berbeda dari kalender contributions GitHub yang juga memiliki jenis aktivitas dan aturan branch sendiri. Kalender ini khusus untuk proyek yang sedang dibaca.
Riwayat kontribusi
14 commit non-merge milik saya · Seluruh branch · Data 3 November 2026.