DeepFace adalah kerangka kerja pengenalan wajah dan analisis atribut wajah yang ringan (usia, jenis kelamin, emosi, dan ras) untuk python. Ini adalah kerangka kerja pengenalan wajah hibrid yang membungkus model-model canggih : VGG-Face
, FaceNet
, OpenFace
, DeepFace
, DeepID
, ArcFace
, Dlib
, SFace
dan GhostFaceNet
.
Experiments
menunjukkan bahwa manusia memiliki akurasi 97,53% pada tugas pengenalan wajah sedangkan model tersebut telah mencapai dan melewati tingkat akurasi tersebut.
Cara termudah untuk menginstal deepface adalah dengan mendownloadnya dari PyPI
. Ini akan menginstal perpustakaan itu sendiri dan prasyaratnya juga.
$ pip install deepface
Alternatifnya, Anda juga dapat menginstal deepface dari kode sumbernya. Kode sumber mungkin memiliki fitur baru yang belum dipublikasikan dalam rilis pip.
$ git clone https://github.com/serengil/deepface.git
$ cd deepface
$ pip install -e .
Setelah Anda menginstal perpustakaan, Anda akan dapat mengimpornya dan menggunakan fungsinya.
from deepface import DeepFace
Saluran Pengenalan Wajah Modern - Demo
Saluran pengenalan wajah modern terdiri dari 5 tahapan umum: mendeteksi, menyelaraskan, menormalkan, mewakili, dan memverifikasi. Meskipun DeepFace menangani semua tahapan umum ini di latar belakang, Anda tidak perlu memperoleh pengetahuan mendalam tentang semua proses di baliknya. Anda cukup memanggil fungsi verifikasi, pencarian, atau analisisnya dengan satu baris kode.
Verifikasi Wajah - Demo
Fungsi ini memverifikasi pasangan wajah sebagai orang yang sama atau orang berbeda. Ia mengharapkan jalur gambar yang tepat sebagai masukan. Melewati gambar yang dikodekan numpy atau base64 juga diterima. Kemudian, ia akan mengembalikan kamus dan Anda harus memeriksa kunci terverifikasinya saja.
result = DeepFace . verify (
img1_path = "img1.jpg" ,
img2_path = "img2.jpg" ,
)
Pengenalan wajah - Demo
Pengenalan wajah memerlukan penerapan verifikasi wajah berkali-kali. Di sini, deepface memiliki fungsi find out-of-the-box untuk menangani tindakan ini. Ini akan mencari identitas gambar masukan di jalur database dan akan mengembalikan daftar bingkai data panda sebagai keluaran. Sementara itu, penyematan wajah pada database wajah disimpan dalam file acar agar dapat dicari lebih cepat di lain waktu. Hasilnya adalah ukuran wajah yang muncul di gambar sumber. Selain itu, gambar target di database juga bisa memiliki banyak wajah.
dfs = DeepFace . find (
img_path = "img1.jpg" ,
db_path = "C:/workspace/my_db" ,
)
Penyematan - Demo
Model pengenalan wajah pada dasarnya merepresentasikan gambar wajah sebagai vektor multidimensi. Terkadang, Anda memerlukan vektor penyematan tersebut secara langsung. DeepFace hadir dengan fungsi representasi khusus. Fungsi representasi mengembalikan daftar penyematan. Hasilnya adalah ukuran wajah yang muncul di jalur gambar.
embedding_objs = DeepFace . represent (
img_path = "img.jpg"
)
Fungsi ini mengembalikan array sebagai penyematan. Ukuran array penyematan akan berbeda berdasarkan nama model. Misalnya, VGG-Face adalah model default dan merepresentasikan gambar wajah sebagai vektor berdimensi 4096.
for embedding_obj in embedding_objs :
embedding = embedding_obj [ "embedding" ]
assert isinstance ( embedding , list )
assert (
model_name == "VGG-Face"
and len ( embedding ) == 4096
)
Di sini, penyematan juga diplot dengan 4096 slot secara horizontal. Setiap slot sesuai dengan nilai dimensi dalam vektor penyematan dan nilai dimensi dijelaskan pada bilah warna di sebelah kanan. Mirip dengan kode batang 2D, dimensi vertikal tidak menyimpan informasi dalam ilustrasi.
Model pengenalan wajah - Demo
DeepFace adalah paket pengenalan wajah hybrid . Saat ini ia mencakup banyak model pengenalan wajah yang canggih : VGG-Face
, FaceNet
, OpenFace
, DeepFace
, DeepID
, ArcFace
, Dlib
, SFace
dan GhostFaceNet
. Konfigurasi default menggunakan model VGG-Face.
models = [
"VGG-Face" ,
"Facenet" ,
"Facenet512" ,
"OpenFace" ,
"DeepFace" ,
"DeepID" ,
"ArcFace" ,
"Dlib" ,
"SFace" ,
"GhostFaceNet" ,
]
#face verification
result = DeepFace . verify (
img1_path = "img1.jpg" ,
img2_path = "img2.jpg" ,
model_name = models [ 0 ],
)
#face recognition
dfs = DeepFace . find (
img_path = "img1.jpg" ,
db_path = "C:/workspace/my_db" ,
model_name = models [ 1 ],
)
#embeddings
embedding_objs = DeepFace . represent (
img_path = "img.jpg" ,
model_name = models [ 2 ],
)
FaceNet, VGG-Face, ArcFace, dan Dlib berkinerja lebih baik berdasarkan eksperimen - lihat BENCHMARKS
untuk lebih jelasnya. Anda dapat menemukan skor terukur dari berbagai model di DeepFace dan skor yang dilaporkan dari studi aslinya di tabel berikut.
Model | Skor Terukur | Skor yang Dinyatakan |
---|---|---|
Facenet512 | 98,4% | 99,6% |
Manusia | 97,5% | 97,5% |
jaringan muka | 97,4% | 99,2% |
Dlib | 96,8% | 99,3% |
VGG-Wajah | 96,7% | 98,9% |
Wajah Busur | 96,7% | 99,5% |
GhostFaceNet | 93,3% | 99,7% |
Wajah S | 93,0% | 99,5% |
Wajah Terbuka | 78,7% | 92,9% |
Wajah Dalam | 69,0% | 97,3% |
ID Dalam | 66,5% | 97,4% |
Melakukan eksperimen dengan model-model tersebut dalam DeepFace dapat mengungkapkan perbedaan dibandingkan dengan penelitian awal, karena penerapan teknik deteksi atau normalisasi yang berbeda. Selain itu, beberapa model telah dirilis hanya dengan tulang punggungnya, tanpa beban yang telah dilatih sebelumnya. Oleh karena itu, kami menggunakan penerapan ulangnya, bukan beban awal yang telah dilatih sebelumnya.
Kesamaan - Demo
Model pengenalan wajah adalah jaringan saraf konvolusional biasa dan bertanggung jawab untuk merepresentasikan wajah sebagai vektor. Kita berharap bahwa sepasang wajah dari orang yang sama harus lebih mirip dibandingkan dengan sepasang wajah dari orang yang berbeda.
Kesamaan dapat dihitung dengan metrik yang berbeda seperti Kesamaan Kosinus, Jarak Euclidean, atau Euclidean yang dinormalisasi L2. Konfigurasi default menggunakan kesamaan kosinus. Berdasarkan eksperimen, tidak ada metrik jarak yang berkinerja lebih baik dibandingkan metrik lainnya.
metrics = [ "cosine" , "euclidean" , "euclidean_l2" ]
#face verification
result = DeepFace . verify (
img1_path = "img1.jpg" ,
img2_path = "img2.jpg" ,
distance_metric = metrics [ 1 ],
)
#face recognition
dfs = DeepFace . find (
img_path = "img1.jpg" ,
db_path = "C:/workspace/my_db" ,
distance_metric = metrics [ 2 ],
)
Analisis Atribut Wajah - Demo
DeepFace juga dilengkapi dengan modul analisis atribut wajah yang kuat termasuk age
, gender
, facial expression
(termasuk marah, takut, netral, sedih, jijik, bahagia dan terkejut) dan race
(termasuk Asia, kulit putih, Timur Tengah, India, Latin, dan Hitam) prediksi. Hasilnya adalah ukuran wajah yang muncul di gambar sumber.
objs = DeepFace . analyze (
img_path = "img4.jpg" ,
actions = [ 'age' , 'gender' , 'race' , 'emotion' ],
)
Model usia mendapat ± 4,65 MAE; model gender mendapatkan akurasi 97,44%, presisi 96,29%, dan recall 95,05% seperti yang disebutkan dalam tutorialnya.
Deteksi dan Penyelarasan Wajah - Demo
Deteksi dan penyelarasan wajah merupakan tahap awal yang penting dalam jalur pengenalan wajah modern. Eksperimen menunjukkan bahwa deteksi meningkatkan akurasi pengenalan wajah hingga 42%, sementara penyelarasan meningkatkan akurasi pengenalan wajah hingga 6%. Detektor OpenCV
, Ssd
, Dlib
, MtCnn
, Faster MtCnn
, RetinaFace
, MediaPipe
, Yolo
, YuNet
dan CenterFace
dikemas dalam deepface.
Semua fungsi deepface menerima backend detektor opsional dan menyelaraskan argumen input. Anda dapat beralih di antara detektor dan mode penyelarasan tersebut dengan argumen ini. OpenCV adalah pendeteksi default dan penyelarasan diaktifkan secara default.
backends = [
'opencv' ,
'ssd' ,
'dlib' ,
'mtcnn' ,
'fastmtcnn' ,
'retinaface' ,
'mediapipe' ,
'yolov8' ,
'yunet' ,
'centerface' ,
]
alignment_modes = [ True , False ]
#face verification
obj = DeepFace . verify (
img1_path = "img1.jpg" ,
img2_path = "img2.jpg" ,
detector_backend = backends [ 0 ],
align = alignment_modes [ 0 ],
)
#face recognition
dfs = DeepFace . find (
img_path = "img.jpg" ,
db_path = "my_db" ,
detector_backend = backends [ 1 ],
align = alignment_modes [ 0 ],
)
#embeddings
embedding_objs = DeepFace . represent (
img_path = "img.jpg" ,
detector_backend = backends [ 2 ],
align = alignment_modes [ 0 ],
)
#facial analysis
demographies = DeepFace . analyze (
img_path = "img4.jpg" ,
detector_backend = backends [ 3 ],
align = alignment_modes [ 0 ],
)
#face detection and alignment
face_objs = DeepFace . extract_faces (
img_path = "img.jpg" ,
detector_backend = backends [ 4 ],
align = alignment_modes [ 0 ],
)
Model pengenalan wajah sebenarnya adalah model CNN dan mengharapkan masukan berukuran standar. Jadi, pengubahan ukuran diperlukan sebelum representasi. Untuk menghindari deformasi, deepface menambahkan piksel padding hitam sesuai dengan argumen ukuran target setelah deteksi dan penyelarasan.
RetinaFace dan MtCnn tampaknya berkinerja lebih baik dalam tahap deteksi dan penyelarasan, tetapi keduanya jauh lebih lambat. Jika kecepatan pipeline Anda lebih penting, Anda harus menggunakan opencv atau SSD. Sebaliknya jika mempertimbangkan keakuratannya, sebaiknya gunakan retinaface atau mtcnn.
Performa RetinaFace sangat memuaskan bahkan di tengah keramaian seperti terlihat pada ilustrasi berikut. Selain itu, ia hadir dengan kinerja deteksi landmark wajah yang luar biasa. Titik merah yang disorot menunjukkan beberapa penanda wajah seperti mata, hidung, dan mulut. Itu sebabnya, skor penyelarasan RetinaFace juga tinggi.
The Yellow Angels - Tim Bola Voli Wanita Fenerbahce
Anda dapat mengetahui lebih lanjut tentang RetinaFace di repo ini.
Analisis Waktu Nyata - Demo
Anda juga dapat menjalankan deepface untuk video waktu nyata. Fungsi streaming akan mengakses webcam Anda dan menerapkan pengenalan wajah dan analisis atribut wajah. Fungsi ini mulai menganalisis sebuah bingkai jika dapat memfokuskan wajah secara berurutan 5 bingkai. Kemudian, ia menunjukkan hasil 5 detik.
DeepFace . stream ( db_path = "C:/User/Sefik/Desktop/database" )
Meskipun pengenalan wajah didasarkan pada pembelajaran satu kali, Anda juga dapat menggunakan beberapa gambar wajah seseorang. Anda harus mengatur ulang struktur direktori Anda seperti yang diilustrasikan di bawah ini.
user
├── database
│ ├── Alice
│ │ ├── Alice1.jpg
│ │ ├── Alice2.jpg
│ ├── Bob
│ │ ├── Bob.jpg
React UI - Demo part-i
, Demo part-ii
Jika Anda ingin melakukan tugas verifikasi wajah langsung dari browser Anda, deepface-react-ui adalah repositori terpisah yang dibuat menggunakan ReactJS bergantung pada api deepface.
Wajah Anti Spoofing - Demo
DeepFace juga menyertakan modul analisis anti-spoofing untuk memahami apakah gambar tertentu asli atau palsu. Untuk mengaktifkan fitur ini, setel argumen anti_spoofing
ke True di setiap tugas DeepFace.
# anti spoofing test in face detection
face_objs = DeepFace . extract_faces (
img_path = "dataset/img1.jpg" ,
anti_spoofing = True
)
assert all ( face_obj [ "is_real" ] is True for face_obj in face_objs )
# anti spoofing test in real time analysis
DeepFace . stream (
db_path = "C:/User/Sefik/Desktop/database" ,
anti_spoofing = True
)
API - Demo
DeepFace juga menyajikan API - lihat api folder
untuk lebih jelasnya. Anda dapat mengkloning kode sumber deepface dan menjalankan api dengan perintah berikut. Ini akan menggunakan server gunicorn untuk mengaktifkan layanan istirahat. Dengan cara ini, Anda dapat memanggil deepface dari sistem eksternal seperti aplikasi seluler atau web.
cd scripts
./service.sh
Pengenalan wajah, analisis atribut wajah, dan fungsi representasi vektor tercakup dalam API. Anda diharapkan memanggil fungsi-fungsi ini sebagai metode posting http. Titik akhir layanan default adalah http://localhost:5005/verify
untuk pengenalan wajah, http://localhost:5005/analyze
untuk analisis atribut wajah, dan http://localhost:5005/represent
untuk representasi vektor. API menerima gambar sebagai unggahan file (melalui data formulir), atau sebagai jalur gambar yang tepat, URL, atau string yang dikodekan base64 (melalui JSON atau data formulir), memberikan opsi serbaguna untuk berbagai kebutuhan klien. Di sini, Anda dapat menemukan proyek tukang pos untuk mengetahui cara memanggil metode ini.
Layanan Docker - Demo
Kumpulan perintah berikut akan melayani deepface di localhost:5005
melalui buruh pelabuhan. Kemudian, Anda akan dapat menggunakan layanan deepface seperti verifikasi, analisis, dan representasi. Selain itu, jika Anda ingin membuat image sendiri dan bukan image yang dibuat sebelumnya dari hub buruh pelabuhan, Dockerfile tersedia di folder root proyek.
# docker build -t serengil/deepface . # build docker image from Dockerfile
docker pull serengil/deepface # use pre-built docker image from docker hub
docker run -p 5005:5000 serengil/deepface
Antarmuka Baris Perintah - Demo
DeepFace juga hadir dengan antarmuka baris perintah. Anda dapat mengakses fungsinya di baris perintah seperti yang ditunjukkan di bawah ini. Perintah deepface mengharapkan nama fungsi sebagai argumen pertama dan argumen fungsi setelahnya.
# face verification
$ deepface verify -img1_path tests/dataset/img1.jpg -img2_path tests/dataset/img2.jpg
# facial analysis
$ deepface analyze -img_path tests/dataset/img1.jpg
Anda juga dapat menjalankan perintah ini jika Anda menjalankan deepface dengan buruh pelabuhan. Silakan ikuti instruksi dalam skrip shell.
Pengenalan Wajah Skala Besar - Playlist
Jika tugas Anda memerlukan pengenalan wajah pada kumpulan data besar, Anda harus menggabungkan DeepFace dengan indeks vektor atau database vektor. Penyiapan ini akan melakukan penelusuran perkiraan tetangga terdekat, bukan penelusuran persis, sehingga memungkinkan Anda mengidentifikasi wajah dalam database yang berisi miliaran entri dalam hitungan milidetik. Solusi indeks vektor umum mencakup Annoy, Faiss, Voyager, NMSLIB, ElasticSearch. Untuk database vektor, opsi populer adalah Postgres dengan ekstensi pgvector dan RediSearch.
Sebaliknya, jika tugas Anda melibatkan pengenalan wajah pada database berukuran kecil hingga sedang, Anda dapat menggunakan database relasional seperti Postgres atau SQLite, atau database NoSQL seperti Mongo, Redis, atau Cassandra untuk melakukan pencarian tetangga terdekat.
Permintaan tarik sangat diterima! Jika Anda berencana untuk menyumbangkan patch dalam jumlah besar, harap buat masalah terlebih dahulu untuk mendapatkan pertanyaan awal atau keputusan desain terlebih dahulu.
Sebelum membuat PR, Anda harus menjalankan pengujian unit dan linting secara lokal dengan menjalankan perintah make test && make lint
. Setelah PR dikirim, alur kerja pengujian GitHub akan dijalankan secara otomatis dan pengujian unit serta tugas linting akan tersedia di tindakan GitHub sebelum disetujui.
Ada banyak cara untuk mendukung sebuah proyek - dibintangi️ repo GitHub hanyalah salah satunya
Jika Anda menyukai pekerjaan ini, maka Anda dapat mendukungnya secara finansial di Patreon, GitHub Sponsors, atau Belikan Saya Kopi.
Selain itu, logo perusahaan Anda akan ditampilkan di README di GitHub dan PyPI jika Anda menjadi sponsor di tingkat emas, perak, atau perunggu.
Silakan mengutip deepface dalam publikasi Anda jika itu membantu penelitian Anda - lihat CITATIONS
untuk lebih jelasnya. Berikut adalah entri BibTex-nya:
Jika Anda menggunakan deepface dalam penelitian Anda untuk tujuan pengenalan wajah atau deteksi wajah, harap kutip publikasi berikut:
@article { serengil2024lightface ,
title = { A Benchmark of Facial Recognition Pipelines and Co-Usability Performances of Modules } ,
author = { Serengil, Sefik and Ozpinar, Alper } ,
journal = { Journal of Information Technologies } ,
volume = { 17 } ,
number = { 2 } ,
pages = { 95-107 } ,
year = { 2024 } ,
doi = { 10.17671/gazibtd.1399077 } ,
url = { https://dergipark.org.tr/en/pub/gazibtd/issue/84331/1399077 } ,
publisher = { Gazi University }
}
@inproceedings { serengil2020lightface ,
title = { LightFace: A Hybrid Deep Face Recognition Framework } ,
author = { Serengil, Sefik Ilkin and Ozpinar, Alper } ,
booktitle = { 2020 Innovations in Intelligent Systems and Applications Conference (ASYU) } ,
pages = { 23-27 } ,
year = { 2020 } ,
doi = { 10.1109/ASYU50717.2020.9259802 } ,
url = { https://ieeexplore.ieee.org/document/9259802 } ,
organization = { IEEE }
}
Di sisi lain, jika Anda menggunakan deepface dalam penelitian Anda untuk tujuan analisis atribut wajah seperti tugas prediksi usia, jenis kelamin, emosi, atau etnis, harap kutip publikasi ini.
@inproceedings { serengil2021lightface ,
title = { HyperExtended LightFace: A Facial Attribute Analysis Framework } ,
author = { Serengil, Sefik Ilkin and Ozpinar, Alper } ,
booktitle = { 2021 International Conference on Engineering and Emerging Technologies (ICEET) } ,
pages = { 1-4 } ,
year = { 2021 } ,
doi = { 10.1109/ICEET53442.2021.9659697 } ,
url = { https://ieeexplore.ieee.org/document/9659697 } ,
organization = { IEEE }
}
Selain itu, jika Anda menggunakan deepface di proyek GitHub Anda, harap tambahkan deepface
di requirements.txt
.
DeepFace dilisensikan di bawah Lisensi MIT - lihat LICENSE
untuk lebih jelasnya.
DeepFace menggabungkan beberapa model pengenalan wajah eksternal: VGG-Face, Facenet (128d dan 512d), OpenFace, DeepFace, DeepID, ArcFace, Dlib, SFace dan GhostFaceNet. Selain itu, model usia, jenis kelamin dan ras/etnis dilatih pada tulang punggung VGG-Face dengan pembelajaran transfer. Demikian pula, DeepFace membungkus banyak pendeteksi wajah: OpenCv, Ssd, Dlib, MtCnn, Fast MtCnn, RetinaFace, MediaPipe, YuNet, Yolo dan CenterFace. Terakhir, DeepFace secara opsional menggunakan anti spoofing wajah untuk menentukan apakah gambar yang diberikan asli atau palsu. Jenis lisensi akan diwarisi saat Anda ingin menggunakan model tersebut. Silakan periksa jenis lisensi model tersebut untuk tujuan produksi.
Logo DeepFace dibuat oleh Adrien Coquet dan dilisensikan di bawah Creative Commons: By Attribution 3.0 License.