Proyek Deteksi Wajah dengan Python [Dalam 5 Langkah Mudah]

Diterbitkan: 2020-09-01

Identifikasi 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.