Face Recognition Using OpenCV Python (Part 1)

SRI ARISTA PANGGOLA
3 min readJan 3, 2020

--

Pada pembahsan kali ini, akan dibuat face recognetion dengan mendeteksi wajah menurut id user.

Untuk membuat face recognition, dapat digunakan script pada pembahasan object detection sebelumnya disini. tampak scriptnya seperti berikut.

import cv2
import numpy as numpy
faceDetect = cv2.CascadeClassifier('haarcascade_frontalface_default.xml');
camera = cv2.VideoCapture(0);
while(True):
ret,img =camera.read();
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = faceDetect.detectMultiScale(gray);
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y), (x+w,y+h),(0,255,0),2)
cv2.imshow("Face",img);
if(cv2.waitKey(1) ==ord('q')):
break;
camera.release()
cv2.destroyAllWindows()

sebelumnya, perlu dibuat folder baru dengan nama dataSet sebagai tempat penyimpanan hasil capture gambar. folder tersebut dibuat dalam folder facerecog (D:\facerecog\datSet)

untuk mendeteksi wajah menggunakan id user, perlu menambahkan perintah input() yang didefiniskan dengan variabel id. ketika perintah input(“Masukkan id User:”) muncul, maka user harus memasukkan id berupa angka untuk mendeteksi wajah user. kemudian juga perlu mendefinisikan variabel sampleNum = 0 sebagai jumlah banyak gambar atau wajah yang dicapture dan disimpan dalam folder dataSet.

id = input('Masukkan id User:')
sampleNum = 0;

kemudian pada kondisi for dibawah ini, juga didefinsikan sampleNum = sampleNum+1 yang artinya setiap perulangan kondisi for maka, gambar yang dicapture akan bertambah 1. dan pada perintah cv2.imwrite(‘dataSet/User.’ +str(id)+”.”+str(sampleNum)+”.jpg”, gray[y:y+h,x:x+w])artinya hasil capture gambar yang masuk pada folder dataSet mempunyai format yaitu nama gambar adalah “User.id dari user.capture keberapa” contoh: hasil capture gambar yang masuk adalah gambar pertama dengan id user = 1, dan capture gambar ketiga, maka nama dari gambar tersebut adalah User.1.3. dan “.jpg”, gray[y:y+h,x:x+w]artinya adalah feed gambar atau warna gambar adalah grey (abu-abu).

Kondisi if yang berada dibawah kondisi for yaitu, if(sampleNum>20):break; artinya adalah sample gambar yang dicapture masuk ke dalam folder dataset harus lebih dari 20 , jika belum melebihi 20 maka camera akan terus meng-capture gambar sampai melebihi 20 dan ketika sample yang dicapture telah melebihi batas, maka akan di break atau berhenti mengcapture.

while(True): 
ret,img =camera.read();
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = faceDetect.detectMultiScale(gray);
for (x,y,w,h) in faces:
sampleNum = sampleNum+1;
cv2.imwrite('dataSet/User.' +str(id)+"."+str(sampleNum)+".jpg", gray[y:y+h,x:x+w])
cv2.rectangle(img,(x,y), (x+w,y+h),(0,255,0),2)
cv2.waitKey(100);
cv2.imshow("Face",img);
cv2.waitKey(1);
if(sampleNum>20):
break;

setelah itu, tambahkan perintah realese() dan destroyAllWindows()

camera.release()
cv2.destroyAllWindows()

seluruh script kemudian ditulis kembali dalam text editor dan disimpan dengan nama face_reco1.py pada D:\facerecg.

import cv2
import numpy as numpy
faceDetect = cv2.CascadeClassifier('haarcascade_frontalface_default.xml');
camera = cv2.VideoCapture(0);
id = input('Masukkan id User:')
sampleNum = 0;
while(True):
ret,img =camera.read();
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = faceDetect.detectMultiScale(gray);
for (x,y,w,h) in faces:
sampleNum = sampleNum+1;
cv2.imwrite('dataSet/User.' +str(id)+"."+str(sampleNum)+".jpg", gray[y:y+h,x:x+w])
cv2.rectangle(img,(x,y), (x+w,y+h),(0,255,0),2)
cv2.waitKey(100);
cv2.imshow("Face",img);
cv2.waitKey(1);
if(sampleNum>20):
break;
camera.release()
cv2.destroyAllWindows()

untuk menjalankan program dapat dilakukan dengan cara berikut.

jika berhasil maka hasil capture gambar akan tersimpan dalam folder dataSet seperti berikut.

Sekian untuk pembahasan kali ini, Terima Kasih.

Sumber:

[1] https://youtu.be/1Jz24sVsLE4

--

--