Pengenalan Wajah (Face Recognition) dengan OpenCV dan Python

Pada tutorial sebelumnya sudah kita pelajari bagaimana mendeteksi wajah (face detection) pada sebuah gambar yang ditangkap kamera. Nah, pada tutorial kali ini, kita coba melakukan percobaan yang lebih advanced lagi, yakni dengan mengenali wajah yang terdeteksi tadi sesuai identitasnya (face recognition). Dengan demikian, setiap ada wajah yang terdeteksi kamera, maka komputer akan langsung menerjemahkannya menjadi sebuah nama dari wajah orang tersebut. Sama seperti sebelumnya, kita masih menggunakan openCV – Python untuk script-nya dan menggunakan metode algoritma LBPH (Local Binary Patterns Histograms) untuk project pengenalan wajah kali ini.

Pengenalan LBPH (Local Binary Patterns Histograms)

Apa itu LBPH? LBPH adalah salah satu algoritma pengenalan objek dengan membagi gambar menjadi beberapa bagian kemudian menerjemahkannya menjadi bilangan biner representatifnya dalam bentuk histogram (saya terjemahkan bebas dari sumber aslinya di sini). Dalam LBPH setidaknya ada 4 parameter yang harus kita pahami, yakni ‘Radius’ (radius pusat pixel acuan), ‘Neighbors’ (tetangga pixel acuan), ‘Grid X’, dan ‘Grid Y’ (pembagian gambar). Untuk grid X dan Y, semakin banyak hasilnya akan semakin baik/presisi. Pusing? sama, he he he. Beruntunglah kita ada sekelompok komunitas opensource Computer Vision yang mau membagi source-nya ke publik, yakni OpenCV. Dalam openCV sudah ada subrutin (class) yang sudah mengenkapsulasi semua yang kita butuhkan dalam algoritma LBPH ini, yakni class cv::face::LBPHFaceRecognizer. Dengan class ini kita dapat dengan mudah mengklasifikasikan objek yang terdeteksi sesuai dengan dataset yang kita buat sebelumnya, sehingga tujuan akhir pengenalan objek dapat tercapai

Persiapan Face Recognition OpenCV – Python

Dalam percobaan kali ini, saya menggunakan environment sebagai berikut:
1. Windows 10 – 64 bit
2. OpenCV 4.1.2 (Cara instal bisa dibaca di sini)
3. Python 3.8 (Cara instal bisa dibaca di sini)
Demi kelancaran project sebaiknya Anda tambahkan perintah berikut lewat command prompt:

pip install pillow

kemudian

pip install opencv-contrib-python --user

[AdSense-A]

Tahapan Pengenalan Wajah (Face Recognition) OpenCV – Python

Untuk dapat mengenali wajah sesuai identitasnya menggunakan OpenCV dan Python, setidaknya Anda harus melakukan 3 tahap sebagai berikut:
1. Membuat dataset referensi wajah
2. Mentraining data
3. Melakukan pengenalan wajah (Face Recognition)
Tiga tahap di atas akan kita lakukan menggunakan script yang berbeda. Untuk mudahnya, silahkan download dulu source code-nya di sini. Kemudian ekstrak dalam folder kerja Anda. Kemudian buat subfolder baru di folder tersebut dengan nama ‘dataset’ dan ‘trainer’

Catatan: script di atas di share dari tutorial ini. Dalam tutorial tersebut menggunakan Raspberry Pi, saya coba mem-porting-nya ke Windows 10 dan membuat tutorial step by step-nya dalam artikel ini supaya lebih mudah dipahami dan dipraktekkan

Langkah 1: Jalankan script 01_face_dataset.py melalui command prompt, tunggu sampai muncul window dan meng-capture wajah Anda dalam 30 detik. Program ini akan menghasilkan 30 gambar jpg (grayscale) dalam folder ‘dataset’. Ketika ada prompt ‘enter user id end press ==>’ ketik angka ‘1’ untuk user 1 (misal Anda), ‘2’ untuk wajah orang kedua, ‘3’ untuk orang ketiga dst

Catatan: di tutorial aslinya, menggunakan kamera Raspberry Pi yang diinstal secara terbalik, jadi Anda hilangkan dulu baris ‘img = cv2.flip(img, -1) # flip video image vertically’ pada file 01_face_dataset.py

Langkah kedua jalankan program kedua (02_face_training.py). Program ini akan menghasilkan file ‘trainer.yml’ di folder trainer (pastikan file ini ada ya)

py 02_face_training.py

atau mungkin di tempat Anda seperti ini

python 02_face_training.py

Catatan: pastikan path file yang akan dijalankan ya. Contoh: ‘python d:/ai/lat/py 02_face_training.py’

[AdSense-A]

Langkah ketiga tinggal Anda jalankan file yang ketiga, yakni 03_face_recognition.py. Jangan lupa hapus baris script ‘img = cv2.flip(img, -1)’ terlebih dahulu. Ohya, edit dulu nama user id sesuai dengan yang Anda masukkan pada langkah 1 pada script 03_face_recognition.py pada baris names = [‘None’, ‘Papah Ajie’, ‘Raihan’, ‘Mamah Wiwied’, ‘Z’, ‘W’] (baris 16 pada script di bawah). Berikut script pengenalan wajah – face recognition – dengan OpenCV dan Python, dengan sedikit modifikasi dari versi aslinya

import cv2
import numpy as np
import os 

recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainer/trainer.yml')
cascadePath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascadePath);

font = cv2.FONT_HERSHEY_SIMPLEX

#iniciate id counter
id = 0

# names related to ids: example ==> Marcelo: id=1,  etc
names = ['None', 'Papah Ajie', 'Raihan', 'Mamah Wiwied', 'Z', 'W'] 

# Initialize and start realtime video capture
cam = cv2.VideoCapture(0)
cam.set(3, 640) # set video widht
cam.set(4, 480) # set video height

# Define min window size to be recognized as a face
minW = 0.1*cam.get(3)
minH = 0.1*cam.get(4)

while True:

    ret, img =cam.read()
    #img = cv2.flip(img, -1) # Flip vertically

    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

    faces = faceCascade.detectMultiScale( 
        gray,
        scaleFactor = 1.2,
        minNeighbors = 5,
        minSize = (int(minW), int(minH)),
       )

    for(x,y,w,h) in faces:
        
        cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)

        id, confidence = recognizer.predict(gray[y:y+h,x:x+w])

        # Check if confidence is less them 100 ==> "0" is perfect match 
        if (confidence < 100):
            id = names[id];
            
            confidence = "  {0}%".format(round(confidence));
	    #confidence = "  {0}%".format(round(100-confidence))
        else:
            id = "unknown"
            confidence = "  {0}%".format(round(100 - confidence));
        
        cv2.putText(img, str(id), (x+5,y-5), font, 1, (255,255,255), 2)
        cv2.putText(img, str(confidence), (x+5,y+h-5), font, 1, (255,255,0), 1)  
    
    cv2.imshow('camera',img)
    
    k = cv2.waitKey(10) & 0xff # Press 'ESC' for exiting video
    if k == 27:
        break

# Do a bit of cleanup
print("\n [INFO] Exiting Program and cleanup stuff")
cam.release()
cv2.destroyAllWindows()

Jika segala sesuatunya berjalan lancar maka Anda tampilan di laptop Anda adalah seperti ini

Gimana, ganteng mana papah sama anaknya? he he he. Silahkan dicoba program-program di atas. Cukup mudah, kok. Jika ada kesulitan bisa disampaikan di kolom komentar di bawah. Secepat mungkin akan saya reply. Dari contoh script di atas, nantinya akan saya kembangkan untuk membuat mesin absensi berbasis pengenalan wajah, dipadukan dengan door-lock yang hanya bisa membuka pintu jika wajahnya dikenali (authorized). Nantikan tutorial berikutnya ya….

5 1 vote
Article Rating

Leave a Reply

64 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Andi

ka, saya minta source codenya dong ka, saya tidak bisa mengcopy file codenya

Dzaky Habib

Mantap Pak, Salam buat Mas Raihan dari Dzaky Habib yang lagi belajar Online dengan Ustadz/Ustadzah IBAS Klaten akibat dampak Corona Virus

Haris

Assalamualaikum…..Pa untuk cara install openCV dan python nya ada dimana..?

bob

pa kok saya jalani program face recognition nya cuma bisa baca id 1 (marcelo) padahal sudah ada 5 id yang sudah tersimpan tapi pas wajah id yg lain ttep marcelo yang ke detect?

Zaki

Makasih banyak pak akhirnya dah nyari nyari artikel tentang facerecognition dan ini yang paling jelas dan work berhasil untuk mengenali wajah

jabinil azhar

kelanjutan dari artikel ini udah dibuat blum om, yg bisa dipadukan dengan doorlock

Winda

if (confidence<100)
Tidak berfungsi pak,error syntax bagaimana ya solusinya?

nur Miftachul arifah

kak kok syntax error y

Putut

Kok ada error ya mas waktu pas jalankan di step ke 2 ini:
py 02_face_training.py

lusi

kak, pada code ini “recognizer = cv2.face.LBPHFaceRecognizer_create()”
katanya gini kak
” module ‘cv2.cv2’ has no attribute ‘face’ “

lusi

kak, pada code ini “recognizer = cv2.face.LBPHFaceRecognizer_create()”
katanya gini kak
” AttributeError: module ‘cv2.cv2’ has no attribute ‘face’ “

Putut

Sudah dicoba di python 2.7 masih sama error mas:
recognizer = cv2.face.LBPHFaceRecognizer_create()
AttributeError: ‘module’ object has no attribute ‘face’

Wahyu Arbianda

Bang file 02_face_training error
Traceback (most recent call last):
File “02_face_training.py”, line 46, in
faces,ids = getImagesAndLabels(path)
File “02_face_training.py”, line 36, in getImagesAndLabels
id = int(os.path.split(imagePath)[-1].split(“.”)[1])
ValueError: invalid literal for int() with base 10: ‘jpg’

isa AR

pak mau tanya, jika pengenalan wajah digunakan untuk absensi, bagaimana cara membuat database nya jika wajah kita ke record kemudian masuk database sebagai daftar kehadiran (proses dari python ke sql)?

ansari

yang di kirim ke mysql data yang mana yah bagusnya. maaf oot

Aldi

isi trainer.yml nya itu apa ya ?

ipul

mas…bisa gak ya openCV dikombinasikan dengan embarcadero(delphi) mas??
syukur bisa dibantu mas.. rencana buat absensi dg facerecognition dg delphi/embarcadero

Gugun Gunawan

Di tunggu updaten absensi berbasis pengenalan wajah dan dipadukan dengan door-lock’y mas

firdaus

mas untuk cara install OpenCV 4.1.2 ga ada linknya yah? maaf baru nyobe

denny

om, mau nanya nih,, kalo training data image nya sampe jutaan bisa ga ya? apa ngehang?

dini

mantap, langsung berhasil. terima kasih tutorialnya

moi

pak ijin bertanya pada file 03 face recognition kenapa muncul pesan eror ini ya
line 60, in <module>
   cv2.imshow(‘camera’,img)
cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-q22f2gn5\opencv\modules\highgui\src\window.cpp:651: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function ‘cvShowImage’

zada

kak mau tanya, untuk di step Langkah 1 muncul seperti ini padahal sudah di hapus baris ‘img = cv2.flip(img, -1) # flip video image vertically’

tapi malah keluar gini
File “D:\AI\opencv\OpenCV-Face-Recognition-master\FacialRecognition\01_face_dataset.py”, line 12, in <module>
   import cv2
ModuleNotFoundError: No module named ‘cv2’

gimana ya kak? semoga kakak baca

Luthfi ardyansyah

Keren mas artikelnya buat referensi print to hologram

ijul

halo pak terima kasih artikelnya
saya menemui kesulitan saat hendak mau train datanya, jadi saat mau menjalankan facetraining tidak mau run, asumsi kesalahan seperti ada kaitannya dengan path, folder saya simpan di C:\Users\Nuzhul\OpenCV-Face-Recognition-master>

jadi sampai sekarang saya masih belum bisa mendapatkan hasil pengenalan wajah di lbphnya

ijul

saya juga sudah pastikan folder trainernya ada

Ricky Budimann

D:\OpenCV-Face-Recognition-master\FacialRecognition>python 02_face_training.py

[INFO] Training faces. It will take a few seconds. Wait …
Traceback (most recent call last):
File “02_face_training.py”, line 46, in
faces,ids = getImagesAndLabels(path)
File “02_face_training.py”, line 27, in getImagesAndLabels
imagePaths = [os.path.join(path,f) for f in os.listdir(path)]
FileNotFoundError: [WinError 3] The system cannot find the path specified: ‘dataset

keluar error begini bang

Ricky Budiman

folder data set sama trainer nya gak ada bang dari link yan dikasih tadi apa itu penyebabnya ?

Ricky Budiman

bang kan udh hidup nih kamera ny dari step 1 tpi udh ditunggguin gak capture2 juga dan hasil ny gak ada padahal sudah dibuat folder nya

Ricky Budiman

keluar error begini bang
[ WARN:0] global C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-i1s8y2i1\opencv\modules\videoio\src\cap_msmf.cpp (434) `anonymous-namespace’::SourceReaderCB::~SourceReaderCB terminating async callback

Yazi Adityas

Pak, klo error d step 2 seperti ini bagaimna solusinya?
source code masih sama seperti d github. yg file 02_face_training. alhasil tidak keluar file trainer.yml

F:pythonOPENCVdeteksinama>python 02_face_training.py

[INFO] Training faces. It will take a few seconds. Wait …
Traceback (most recent call last):
File “F:pythonOPENCVdeteksinama2_face_training.py”, line 46, in
faces, ids = getImagesAndLabels(path)
File “F:pythonOPENCVdeteksinama2_face_training.py”, line 34, in getImagesAndLabels
img_numpy = np.asfarray(PIL_img, ‘uint8’)
File “”, line 5, in asfarray
File “C:UsersYAZI ADITYASAppDataLocalProgramsPythonPython39libsite-packagesnumpylibtype_check.py”, line 114, in asfarray
return asarray(a, dtype=dtype)
TypeError: __array__() takes 1 positional argument but 2 were given

Ari

pak aji mau tanya saya sudah menjalankan coding tersebut di perangkat raspberry pi model 3 tapi kenapa sering salah mengenali ya?jadi orang pertama di kenal jadi orang kedua

lalu kenapa prosentase kemiripannya rendah ya di bawah 60% padahal orang yang sama lalu ngelag pula?

rayandra

maaf mas saya mau tanya knp saat menjalankan langkah 1 lama sekali untuk mengcapture 1 gambar dan terus menunggu
[INFO] Initializing face capture. Look the camera and wait …
stuck disitu. mohon pencerahannya mas

rayandra

gak ada yang eror. pas di cmdnya terus begini
[INFO] Initializing face capture. Look the camera and wait …

agus

link source code-nya tidak ada hanya haarcascade_frontalface_default.xml.

Bisa share source nya gan?

maruri

bapak
apakah aplikasi ini hanya bisa deteksi untuk 2 orang saja ya?

64
0
Would love your thoughts, please comment.x
()
x