Proyek Deteksi Wajah dengan Python [Dalam 5 Langkah Mudah]
Diterbitkan: 2020-09-01Identifikasi objek dan deteksi wajah mungkin merupakan aplikasi yang paling populer dari visi komputer. Teknologi ini menemukan aplikasi di berbagai industri, seperti keamanan dan media sosial. Jadi kami sedang membangun proyek deteksi wajah melalui Python.
Perhatikan bahwa Anda harus terbiasa dengan pemrograman dengan Python, OpenCV, dan NumPy. Ini akan memastikan bahwa Anda tidak bingung saat mengerjakan proyek ini. Mari kita mulai.
Kami telah membagikan dua metode untuk melakukan pengenalan wajah. Yang pertama menggunakan perpustakaan pengenalan wajah Python, sedangkan yang lain menggunakan OpenCV dan NumPy. Lihat program ilmu data kami untuk mempelajari lebih lanjut.
Daftar isi
Pengenalan Wajah dengan 'Pengenalan Wajah' Python
Mungkin metode termudah untuk mendeteksi wajah adalah dengan menggunakan perpustakaan pengenalan wajah di Python . Itu memiliki akurasi 99,38% dalam database LFW. Menggunakannya cukup sederhana dan tidak membutuhkan banyak usaha. Selain itu, perpustakaan memiliki perintah 'face_recognition' khusus untuk mengidentifikasi wajah dalam gambar.
Cara Menggunakan Pengenalan Wajah
Anda dapat membedakan wajah dalam gambar dengan menggunakan perintah 'face_locations':
impor pengenalan_wajah

gambar = face_recognition.load_image_file(“file_anda.jpg”)
face_locations = pengenalan_wajah.face_locations(gambar)
Itu juga dapat mengenali wajah dan mengaitkannya dengan nama mereka:
impor pengenalan_wajah
known_image = face_recognition.load_image_file(“modi.jpg”)
unknown_image = face_recognition.load_image_file(“unknown.jpg”)
modi_encoding = face_recognition.face_encodings(known_image)[0]
unknown_encoding = face_recognition.face_encodings(gambar_tidak diketahui)[0]
hasil = face_recognition.compare_faces([modi_encoding], unknown_encoding)
Gambar Berisi “Narendra Modi”
Ada banyak hal lain yang dapat Anda lakukan dengan perpustakaan ini dengan menggabungkannya dengan yang lain. Sekarang kita akan membahas melakukan pengenalan wajah dengan perpustakaan terkemuka lainnya di Python, khususnya OpenCV dan NumPy.
Baca lebih lanjut: Tutorial Python NumPy: Belajar Python Numpy Dengan Contoh
Proyek Deteksi Wajah dengan Python
Dalam proyek ini, kami telah melakukan deteksi dan pengenalan wajah dengan menggunakan OpenCV dan NumPy. Kami telah menggunakan Raspberry Pi, tetapi Anda juga dapat menggunakannya dengan sistem lain. Anda hanya perlu sedikit memodifikasi kode untuk menggunakannya di beberapa perangkat lain (seperti Mac atau PC Windows).
Beberapa kredit untuk proyek ini diberikan kepada Marcelo Rovai .
Langkah #1: Instal Perpustakaan
Pertama, Anda harus menginstal pustaka yang diperlukan, OpenCV, dan NumPy. Anda dapat menginstalnya dengan mudah melalui:
pip instal opencv-python
pip instal opencv-contrib-python
Untuk menginstal NumPy di sistem Anda, gunakan perintah yang sama seperti di atas dan ganti 'opencv-python' dengan 'numpy':
pip install numpy
Langkah #2: Deteksi Wajah
Sekarang, Anda harus mengkonfigurasi kamera Anda dan menghubungkannya ke sistem Anda. Kamera harus bekerja dengan baik untuk menghindari masalah dalam deteksi wajah.
Sebelum kamera mengenali kita, kamera harus mendeteksi wajah terlebih dahulu. Kami akan menggunakan pengklasifikasi Haar Cascade untuk deteksi wajah. Ini terutama merupakan metode deteksi objek di mana Anda melatih fungsi kaskade melalui gambar negatif dan positif, setelah itu dapat mendeteksi objek di foto lain.
Dalam kasus kami, kami ingin model kami mendeteksi wajah. OpenCV hadir dengan pelatih dan detektor, jadi menggunakan pengklasifikasi Haar Cascade relatif lebih nyaman dengan perpustakaan ini. Anda dapat membuat classifier untuk mendeteksi gambar lain juga.
Berikut kodenya:
impor numpy sebagai np
impor cv2
faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
tutup = cv2.VideoCapture(0)
cap.set(3,640) # set Lebar
cap.set(4,480) # set Tinggi
sementara Benar:
ret, img = cap.read()
img = cv2.flip(img, -1)
abu-abu = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
wajah = faceCascade.detectMultiScale(
Abu-abu,
faktor skala=1.2,
minTetangga=5,
ukuran min=(20, 20)
)
untuk (x,y,w,h) di wajah:
cv2.persegi panjang(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_abu-abu = abu-abu[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
cv2.imshow('video',img)
k = cv2.waitKey(30) & 0xff
jika k == 27: # tekan 'ESC' untuk keluar
merusak
tutup.rilis()
cv2.destroySemuaWindows()
Langkah #3: Kumpulkan Data
Sekarang setelah model Anda dapat mengidentifikasi wajah, Anda dapat melatihnya sehingga model tersebut akan mulai mengenali wajah siapa yang ada dalam gambar. Untuk melakukannya, Anda harus memberikannya beberapa foto wajah yang ingin Anda ingat.
Itu sebabnya kami akan mulai dengan membuat kumpulan data kami dengan mengumpulkan foto. Setelah mengumpulkan gambar yang diperlukan, tambahkan ID untuk setiap orang, sehingga model tahu wajah apa yang harus diasosiasikan dengan ID apa. Mulailah dengan gambar satu orang dan tambahkan setidaknya 10-20. Gunakan ekspresi yang berbeda untuk mendapatkan hasil yang paling efektif.
Buat skrip untuk menambahkan ID pengguna ke gambar, jadi Anda tidak perlu melakukannya secara manual setiap saat. Skrip sangat penting jika Anda ingin menggunakan model Anda untuk banyak wajah.
Pelajari Kursus Pembelajaran Mesin dari Universitas top dunia. Dapatkan Master, PGP Eksekutif, atau Program Sertifikat Tingkat Lanjut untuk mempercepat karier Anda.
Langkah #4: Berlatih
Setelah membuat kumpulan data gambar orang tersebut, Anda harus melatih modelnya. Anda akan memasukkan gambar ke pengenal OpenCV Anda, dan itu akan membuat file bernama 'trainer.yml' pada akhirnya.
Pada tahap ini, Anda hanya perlu memberikan model dengan gambar dan ID-nya agar model dapat mengenal ID setiap gambar. Setelah kita selesai melatih model, kita bisa mengujinya.
Berikut kodenya:

impor cv2
impor numpy sebagai np
dari Gambar impor PIL
impor os
# Jalur untuk basis data gambar wajah
jalur = 'kumpulan data'
pengenal = cv2.face.LBPHFaceRecognizer_create()
detektor = cv2.CascadeClassifier(“haarcascade_frontalface_default.xml”);
# berfungsi untuk mendapatkan data gambar dan label
def getImagesAndLabels (jalur):
imagePaths = [os.path.join(path,f) untuk f di os.listdir(path)]
sampel wajah=[]
ID = []
untuk imagePath di imagePaths:
PIL_img = Image.open(imagePath).convert('L') # grayscale
img_numpy = np.array(PIL_img,'uint8′)
id = int(os.path.split(imagePath)[-1].split(“.”)[1])
wajah = detector.detectMultiScale(img_numpy)
untuk (x,y,w,h) di wajah:
faceSamples.append(img_numpy[y:y+h,x:x+w])
id.tambahkan(id)
kembalikan sampel wajah, id
print (“\n [INFO] Pelatihan wajah. Ini akan memakan waktu beberapa detik. Tunggu …”)
wajah,id = getImagesAndLabels(path)
pengenal.train(wajah, np.array(id))
# Simpan model ke trainer/trainer.yml
pengenal.tulis('pelatih/pelatih.yml')
# Cetak jumlah wajah yang dilatih dan akhiri program
print(“\n [INFO] {0} wajah terlatih. Keluar Program”.format(len(np.unique(id))))
Pelajari: Aplikasi MATLAB dalam Pengenalan Wajah: Kode, Deskripsi & Sintaks
Langkah # 5: Mulai Pengakuan
Sekarang setelah Anda melatih modelnya, kita bisa mulai menguji modelnya. Di bagian ini, kami telah menambahkan nama ke ID sehingga model dapat menampilkan nama masing-masing pengguna yang dikenalinya.
Model tidak mengenali seseorang. Ini memprediksi apakah wajah yang dideteksi cocok dengan wajah yang ada di databasenya. Model kami menampilkan persentase seberapa cocok wajah dengan wajah yang ada di databasenya. Akurasinya akan sangat bergantung pada gambar yang Anda uji dan gambar yang telah Anda tambahkan ke database Anda (gambar yang Anda gunakan untuk melatih model).
Berikut kodenya:
impor cv2
impor numpy sebagai np
impor os
pengenal = cv2.face.LBPHFaceRecognizer_create()
pengenal.read('pelatih/pelatih.yml')
cascadePath = “haarcascade_frontalface_default.xml”
faceCascade = cv2.CascadeClassifier(cascadePath);
font = cv2.FONT_HERSHEY_SIMPLEX
#mulai penghitung id
ID = 0
# nama yang terkait dengan id: contoh ==> upGrad: id=1, dll
nama = ['Tidak Ada', UpGrad', Saya', 'Teman', 'Y', 'X']
# Inisialisasi dan mulai pengambilan video waktu nyata
cam = cv2.VideoCapture(0)
cam.set(3, 640) # setel lebar video
cam.set(4, 480) # setel ketinggian video
# Tentukan ukuran jendela minimum untuk dikenali sebagai wajah
minW = 0.1*cam.get(3)
minH = 0.1*cam.get(4)
sementara Benar:
ret, img =cam.read()
img = cv2.flip(img, -1) # Balik secara vertikal
abu-abu = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
wajah = faceCascade.detectMultiScale(
Abu-abu,
faktor skala = 1.2,
minTetangga = 5,
ukuran min = (int(minW), int(minH)),
)
for(x,y,w,h) di wajah:
cv2.persegi panjang(img, (x,y), (x+w,y+h), (0,255,0), 2)
id, keyakinan = pengenal.prediksi(abu-abu[y:y+h,x:x+w])
# Jika kepercayaan diri kurang dari 100 ==> “0” : perfect match
jika (keyakinan < 100):
id = nama[id]
keyakinan = ” {0}%”.format(round(100 – keyakinan))
lain:
id = “tidak diketahui”
keyakinan = ” {0}%”.format(round(100 – keyakinan))
cv2.putTeks(
gambar,
str(id),
(x+5,y-5),
jenis huruf,
1,
(255.255.255),
2
)
cv2.putTeks(
gambar,
str (kepercayaan diri),
(x+5,y+h-5),
jenis huruf,
1,
(255.255,0),
1
)
cv2.imshow('kamera',img)
k = cv2.waitKey(10) & 0xff # Tekan 'ESC' untuk keluar dari video
jika k == 27:
merusak
#Lakukan pembersihan
print(“\n [INFO] Keluar dari Program dan melakukan pembersihan”)
kamera.rilis()

cv2.destroySemuaWindows()
Kami telah mencapai akhir dari proyek deteksi wajah kami dengan Python. Anda sekarang tahu cara membuat model pembelajaran mesin yang mendeteksi dan mengenali wajah. Pastikan untuk membagikan hasil Anda kepada kami!
Pelajari: Tutorial Deteksi Objek TensorFlow Untuk Pemula
Pelajari Lebih Lanjut Tentang Pembelajaran Mesin
Kami harap Anda menyukai proyek deteksi wajah ini. Jika Anda ingin membuatnya lebih menantang, Anda dapat menambahkan beberapa wajah dalam kumpulan data Anda dan melatih model Anda sesuai dengan itu. Anda juga dapat menggabungkannya dengan perpustakaan lain dan memperluas proyek menjadi sesuatu yang lain, seperti sistem keamanan deteksi wajah untuk suatu program!
Jika Anda tertarik untuk mempelajari lebih lanjut tentang pembelajaran mesin, lihat Program PG Eksekutif IIIT-B & upGrad dalam Pembelajaran Mesin & AI yang dirancang untuk para profesional yang bekerja dan menawarkan 450+ jam pelatihan ketat, 30+ studi kasus & tugas, IIIT -B Status Alumni, 5+ proyek batu penjuru praktis & bantuan pekerjaan dengan perusahaan-perusahaan top.
Pendekatan matematis apa yang digunakan untuk pengenalan wajah?
Pengenalan wajah mahal secara komputasi dan sering digunakan sebagai uji akurasi algoritma pembelajaran mesin dan metode deteksi objek. Umumnya, dalam sebagian besar kasus, pendekatan matematika klasik diikuti - jarak Euclidean. Transformasi geometris diterapkan untuk menemukan jarak Euclidean terdekat antara dua set. Jarak Euclidean memerlukan penjumlahan kuadrat selisih antara dua vektor titik yang mewakili kedua bayangan tersebut. Rincian lebih lanjut tentang algoritma jarak Euclidean dapat ditemukan dari makalah penelitian ini.
Bagaimana cara kerja deteksi wajah?
Deteksi wajah adalah proses mendeteksi wajah manusia atau beberapa wajah manusia dalam gambar atau video digital. Deteksi wajah adalah sub-proses pengenalan wajah, tetapi istilah ini biasanya mengacu pada pengenalan wajah berbasis gambar di mana hanya lokasi wajah dalam gambar yang digunakan untuk mengidentifikasi atau memverifikasi seseorang, sedangkan pengenalan wajah juga membuat model keunikan mereka. wajah, yang kemudian dicocokkan dengan wajah target. Deteksi wajah berbeda dari pengenalan wajah karena pengenalan wajah adalah proses otomatis untuk mengidentifikasi atau memverifikasi seseorang dari gambar digital atau sumber video.
Apa saja tantangan pengenalan wajah?
Beberapa tantangan pengenalan wajah dibahas di sini. Algoritme yang terlibat dalam sistem pengenalan wajah cukup kompleks, yang membuatnya sangat tidak konsisten. Sistem pengenalan wajah mudah tertipu oleh perubahan lingkungan dan pencahayaan, pose yang berbeda, dan bahkan orang yang tampak serupa. Sistem pengenalan wajah memerlukan daya komputasi yang sangat tinggi, itulah sebabnya sistem pengenalan wajah sebagian besar digunakan dengan smartphone dan laptop kelas atas. Sistem pengenalan wajah mungkin mendeteksi beberapa kecocokan palsu dalam satu bingkai. Perangkat lunak harus menentukan apa yang ingin dilakukan pengguna, yang bukan merupakan tugas yang mudah bagi perangkat lunak.