Face Recognition 3
Pengenalan wajah dengan python dan OpenCV haarcascades lanjutan
Assalamualaikum wr. wb.
Saya akan membuat face recognition lanjutan dari yang sebelumnya, dapat dilihat pada tautan ini. Untuk kali ini, tujuan yang diinginkan adalah sistem mengenali id user dari DataSet, memunculkan nama pada layar, dan mengenali 2 wajah.
Langkah awal yang dilakukan adalah membuat folder training didalam folder capture.
Lalu buat coding seperti berikut.
import cv2, os
import numpy as np
from PIL import Image
recognizer = cv2.face.LBPHFaceRecognizer_create()
detector =cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml");
def getImagesWithLabels(path):
imagePaths=[os.path.join(path,f) for f in os.listdir(path)]
faceSamples=[]
Ids=[]
for imagePath in imagePaths:
pilImage=Image.open(imagePath).convert('L')
imageNp=np.array(pilImage,'uint8')
Id=int(os.path.split(imagePath)[-1].split(".")[1])
faces=detector.detectMultiScale(imageNp)
for (x,y,w,h) in faces:
faceSamples.append(imageNp[y:y+h,x:x+w])
Ids.append(Id)
return faceSamples, Ids
faces, Ids = getImagesWithLabels('E:\\capture\\DataSet\\')
recognizer.train(faces, np.array(Ids))
recognizer.save('training/training.xml')
Tampilan pada SublimeText seperti berikut.
Line(4) adalah algoritma recognizer yang telah disediakan OpenCV agar sistem dapat mengenali wajah dalam DataSet. Line(6) untuk mendefinisikan fungsi perulangan mengenali gambar dan setiap labelnya. Line(7) untuk mengambil seluruh data pada folder DataSet. Line(8)-(9) untuk menampung gambar wajah dan labelnya. Line(10)-(11) untuk looping dan mengkonversi menjadi skala gray, lalu dikonversi lagi ke array. Line(12) untuk mengubah ke numpy array. Line(13) untuk mengambil “id” dari DataSet. Line(18) untuk mengakhiri looping. Line(21) adalah lokasi untuk menyimpan file training.xml.
Simpan pada folder capture dengan nama training.py. Lalu jalankan pada command prompt dengan perintah berikut.
E:\capture\training.py
Jika coding training.py berhasil dijalankan, maka hasilnya adalah terbentuk file training.xml pada folder training seperti berikut.
Jika ada modul yang belum ter-install, dapat dilakukan penginstalan dengan perintah berikut pada command prompt. Ganti (modul) dengan nama modul yang akan di-install.
py -m pip install (modul)
Langkah selanjutnya buat coding berikut.
import cv2, time
from PIL import Image
camera = 0
video = cv2.VideoCapture(camera,cv2.CAP_DSHOW)
a = 0
recognizer = cv2.face.LBPHFaceRecognizer_create()
faceDetect = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
recognizer.read('e://capture/training/training.xml')
id = 0
fontFace = cv2.FONT_HERSHEY_SIMPLEX
fontScale = 1
fontColor = (255,0,0)
while True:
check, frame = video.read()
print(check)
print(frame)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces=faceDetect.detectMultiScale(gray,1.3,5);
for (x,y,w,h) in faces:
a = a+1
cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
id, conf=recognizer.predict(gray[y:y+h,x:x+w])
cv2.putText(frame,str(id),(x+w,y+h),fontFace,fontScale,fontColor)
cv2.imshow("wajah",frame)
if (cv2.waitKey(1)==ord('q')):
break
print(a)
video.release()
cv2.destroyAllWindows()
Tampilan dalam SublimeText seperti berikut.
Pada line(8) adalah perintah untuk membaca file training.xml pada folder E:/capture/training.
Simpan dengan nama file kenalwajah.py pada folder capture, lalu jalankan dengan mengetik perintah berikut pada command prompt.
E:\capture\kenalwajah.py
Hasilnya seperti berikut.
Maka sistem sudah dapat mengenali wajah sebagai id user 1. Selanjutnya, akan diberi label nama dengan cara menambahkan perintah berikut pada line(23).
if (id == 1):
id = "nama"
Secara keseluruhan seperti berikut.
import cv2, time
from PIL import Image
camera = 0
video = cv2.VideoCapture(camera,cv2.CAP_DSHOW)
a = 0
recognizer = cv2.face.LBPHFaceRecognizer_create()
faceDetect = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
recognizer.read('e://capture/training/training.xml')
id = 0
fontFace = cv2.FONT_HERSHEY_SIMPLEX
fontScale = 1
fontColor = (255,0,0)
while True:
check, frame = video.read()
print(check)
print(frame)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces=faceDetect.detectMultiScale(gray,1.3,5);
for (x,y,w,h) in faces:
a = a+1
cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
id, conf=recognizer.predict(gray[y:y+h,x:x+w])
if (id == 1):
id = "Latifa"
cv2.putText(frame,str(id),(x+w,y+h),fontFace,fontScale,fontColor)
cv2.imshow("wajah",frame)
if (cv2.waitKey(1)==ord('q')):
break
print(a)
video.release()
cv2.destroyAllWindows()
Tampilan dalam SublimeText seperti berikut.
Simpan perubahan file kenalwajah.py tersebut, lalu jalankan dengan command prompt menggunakan perintah berikut.
E:\capture\kenalwajah.py
Hasil yang muncul adalah sebagai berikut.
Bagaimana jika ingin menambahkan pengenalan wajah baru?
Langkah pertama jalankan coding tangkapwajah.py (dapat dilihat pada tautan ini), kemudian masukan id user baru yaitu 2 (melanjutkan id user sebelumnya). Maka tangkapan wajah id user 2 akan masuk folder DataSet.
Pastikan folder DataSet hanya berisi gambar dengan format User.(id).(nomor), jika ada file dengan nama lain maka akan terjadi error pada proses training.
Kedua, jalankan perintah berikut untuk melakukan training data lagi dari folder DataSet.
E:\capture\training.py
Ketiga, menambahkan coding berikut pada file kenalwajah.py untuk memberi label pada id user kedua.
if (id == 1):
id = "nama1"
elif (id == 2):
id = "nama2"
Coding keseluruhan adalah sebagai berikut
import cv2, time
from PIL import Image
camera = 0
video = cv2.VideoCapture(camera,cv2.CAP_DSHOW)
a = 0
recognizer = cv2.face.LBPHFaceRecognizer_create()
faceDetect = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
recognizer.read('e://capture/training/training.xml')
id = 0
fontFace = cv2.FONT_HERSHEY_SIMPLEX
fontScale = 1
fontColor = (255,0,0)
while True:
check, frame = video.read()
print(check)
print(frame)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces=faceDetect.detectMultiScale(gray,1.3,5);
for (x,y,w,h) in faces:
a = a+1
cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
id, conf=recognizer.predict(gray[y:y+h,x:x+w])
if (id == 1):
id = "Latifa"
elif (id == 2):
id = "Iqbaal"
cv2.putText(frame,str(id),(x+w,y+h),fontFace,fontScale,fontColor)
cv2.imshow("wajah",frame)
if (cv2.waitKey(1)==ord('q')):
break
print(a)
video.release()
cv2.destroyAllWindows()
Tampilan pada SublimeText seperti berikut.
Simpan kembali file kenalwajah.py tersebut, lalu jalankan perintah berikut pada command prompt.
E:\capture\kenalwajah.py
Hasilnya seperti berikut.
Sekian yang dapat saya sampaikan mengenai Face Recognition bagian 3 ini, terima kasih telah mengikuti sampai akhir.
Wassalamualaikum wr.wb.
Referensi:
https://medium.com/@986110101/pengenalan-wajah-3-c05a6422113e
https://medium.com/@986110101/pengenalan-wajah-4-a00b3213e49d