Deteksi Wajah (Face Detection) dengan OpenCV dan Python

Satu satu cabang kecerdasan buatan atau Artificial Intelligence (AI) adalah ‘Computer Vision’ (CV). Sesuai namanya, Computer Vision ini adalah salah satu bidang ilmu yang mempelajari bagaimana suatu obyek gambar nyata yang sifatnya analog, diintepretasikan komputer menjadi bentuk-bentuk digitalnya untuk diolah lebih lanjut sesuai kebutuhan. ‘Komputer’ disini maknanya luas, tidak hanya komputer yang kita kenal seperti ‘Personal Computer’ (PC), desktop, laptop tapi juga controller (CPU) lain yang masuk ranah embedded system yakni Raspberry Pi, Orange Pi, Banana Pi atau mungkin ‘Pi’ – ‘pi’ yang lain :). Cirinya adalah suatu controller/CPU tersebut memiliki operating system yang menunjang pemrosesan objek gambar. Jadi kalau melihat syarat seperti ini rasanya Arduino dan keluarganya belum mampu untuk mendukung Computer Vision secara langsung.

Sekilas tentang OpenCV dan Python

Baiklah, tutorial kita kali ini adalah mencoba memproses gambar yang ditangkap kamera untuk kita deteksi jika ada wajah manusia di dalamnya. Kedengarannya sulit ya? Sama, dulu saya juga menganggapnya suatu hal yang teramat sulit. Tapi beruntunglah kita ada sekelompok komunitas opensource yang bersedia membuka source code-nya secara gratis dalam bentuk library OpenCV. Ya, OpenCV ini merupakan library yang akan banyak membantu kita dalam menerjemahkan sebuah gambar. OpenCV ini ditulis dalam bahasa C tapi dapat juga digunakan dalam bahasa lain seperti Python. Kenapa menggunakan Python? Yang pertama, Python ini merupakan bahasa pemrograman tingkat tinggi sehingga memiliki beberapa keunggulan, misalnya sintaks yang sederhana, berorientasi pada objek (OOP), dan memiliki banyak library yang akan membantu Anda men-simplify program Anda. Dan satu lagi, Python memiliki satu variabel array multifungsi yang tidak dimiliki bahasa pemrograman lain, yakni ‘NumPy’ yang sekali lagi akan mempermudah proses pemrograman Anda. Dan alasan kedua mengapa menggunakan Python, karena banyak tutorialnya di internet, jadi kalau ada kesulitan tinggal googling aja, he he he.

Script Deteksi Wajah OpenCV – Python

Ok, mari kita mulai percobaannya. Untuk tutorial kali ini saya menggunakan:
1. OS Windows 10 (64 bit)+ built-in camera
2. Python 3.8 (64 bit)
3. Library OpenCV 3.0
Untuk persiapan silahkan download dulu Python-nya. Tinggal googling aja pasti ketemu source-nya (download versi terbaru ya). Jangan lupa mencentang ‘Add Puthon 3.x to Path’ saat instalasi ya. Untuk lebih detailnya bisa baca artikel berikut

Jika sudah berhasil instal Python, langkah selanjutnya adalah instal library opencv. Silahkan buka command prompt dan ketikkan command sbb (pastikan ada koneksi internet ya)

pip install opencv-python

Catatan:
1. Jika sewaktu proses instalasi Python anda mencentang option Add Python 3.x to Path, maka Anda bisa mengetikkan perintah di atas di sembarang path di command prompt
2. Jika perintah di atas gagal dieksekusi, ada kemungkinan package installer ‘pip’ belum terinstal di laptop Anda

Jika semua sudah terintal dengan baik, salin script berikut dan beri nama (misalnya) ‘facedetection.py’.

import cv2

face_cascade = cv2.CascadeClassifier('d:/python/haarcascade_frontalface_default.xml')

cap = cv2.VideoCapture(0)

while 1:
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]
        
       
    cv2.imshow('deteksi wajah',img)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

Keterangan program:
[Baris 1]: import library opencv ke program
[Baris 3]: mendefinisikan pengenal wajah. Kali ini ini akan menggunakan classifier dengan teknik Haar Cascade yang sudah didefinisikan dalam file haarcascade_frontalface_default.xml. Anda bisa mengunduh file tersebut di sini. Letakkan file xml tersebut satu folder dengan program python Anda (facedetection.py)
[Baris 5]: mendefinisikan instance object untuk kamera
[Baris 7]: perulangan yang selalu bernilai ‘True’. Artinya program akan terus berjalan sampai ada penekanan tombol ‘Esc’ (Baris 19-21)
[Baris 8-9]: mengambil gambar dari kamera kemudian dijadikan hitam putih (gray)
[Baris 10]: mendeteksi wajah, dan menghasilkan nilai x,y (koordinat titik pojok kiri atas wajah), nilai w (width=lebar kotak) dan h (height=tinggi kotak)
[Baris 12-15]: menggambar ROI (Region of Interest) dalam bentuk kotak warna biru sesuai koordinat dan dimensinya (nilai x, y, w, h)
[Baris 18]: menampilkan window
[Baris 19-21]: mendeteksi penekanan tombol ESP untuk keluar program
[Baris 23-24]: destroy object kamera dan menutup windows

Ada beberapa cara untuk bekerja dengan Python di Windows:
1. Menggunakan editor text biasa (Notepad, Notepad++), simpan dalam bentuk file python (*.py), kemudian running lewat command prompt dengan perintah

python file_python.py

2. Menggunakan IDE (Integrated Development Environment) bawaan Python yakni IDLE
3. Menggunakan IDE pihak ketiga, yakni PyCharm buatan JetBrain

Catatan: Untuk sementara dan untuk mudahnya kita akan gunakan cara kedua, walaupun sebenarnya IDLE ini punya kekurangan tidak terdapat tulisan baris script. Baris script ini sangat kita butuhkan saat proses debugging jika ada script/sintaks error.

Tampilan Program Deteksi Wajah OpenCV Python

Buka IDLE lewat start menu-Python 3.8-IDLE (Python 3.8 64-bit). Kemudian open file yang tadi Anda simpan (facedetection.py). Kemudian running file tersebut melalui menu Run-Run Module atau dengan menekan tombol F5

Sesaat kemudian kamera di laptop Anda akan aktif dan menampilkan gambar tangkapannya. Jika wajah Anda ada di sana maka akan ada kotak biru yang akan mengikuti kemanapun wajah Anda bergerak. Selamat, Anda sudah berhasil mendeteksi wajah menggunakan OpenCV dan Python 🙂 . Untuk keluar program, Anda bisa menekan tombol ESC. Tutorial berikutnya akan coba saya bahas bagaimana mengenali wajah sesuai nama orang tersebut (face recognition), tidak hanya mendeteksi saja (face detection)

Update: tutorial tentang face recognition bisa di baca di artikel ‘Pengenalan Wajah (Face Recognition) dengan OpenCV dan Python

1.5 2 votes
Article Rating

Leave a Reply to Saptaji, ST. M.Tr.T Cancel reply

51 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
kholis

saya kok masih gagal terus yamaster?

yudha putra

jika gagal hapus & 0xff

djakopsen

Saya meng-instal Python ver.3.8.3, Ada muncul error, setelah camera meng-capture…
seperti dibawah ini :
Traceback (most recent call last):
File “D:\Python_3_8_3\facedetection.py”, line 19, in
k = cv2.waitKey(30) &0xff
NameError: name ‘amp’ is not defined

dimas

mas maaf file xmlnya kok ngga bisa di download ya di githubnya. boleh di share nda hehehe

Agung

Mas.. saya kok ga bisa keluar kotaknya ya.. untuk deteksi gambar bisa keluar kotaknya.untuk deteksi video kok ga keluar kotaknya.. apa yang salah ya?

Anindya

Kak, kenapa di saya kameranya cuma kebuka sebentar terus nutup lagi ya kak?

Ronip

Traceback (most recent call last):
 File “C:/Python/Python39/facedetection.py”, line 10, in <module>
  faces = face_cascade.detectMultiScale(gray, 1.3, 5)
cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-95hbg2jt\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’

Bagaimana ya mas

derfan

saya running di raspberry pi 3b mas tapi masih gagal kenapa ya itu?

derfan

traceback (most recent call last):
file “home/pi/Basic-openCV-Programming/facedetect.py”, line 9, in
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
cv2.error: OpenCV(3.4.6) /home/pi/opencv-python/opencv/modules/objdetect/src/cascadedetect.cpp:1698:
error: (-215:Assertion failed) !empty() in function ‘detectMultiScale’

error pada bagian faces = face_cascade.detectMultiScale(gray, 1.3, 5) kenapa ya mas? saya menjalankannya pada raspbery pi 3b. terimakasih mas

salman

kenapa muncul error seperti ini ya mas
C:/Users/HP/PycharmProjects/facedetect/facedetection.py
Traceback (most recent call last):
 File “C:/Users/HP/PycharmProjects/facedetect/facedetection.py”, line 1, in <module>
  import cv2
ModuleNotFoundError: No module named ‘cv2’

raihan

kok punya saya indikator kamera nyala tapi gk muncul kotak birunya ya

Raihan

Dibagian mana bisa nginstalnya

rezzs

saya kok ada error di line 1 ‘no module’

Traceback (most recent call last):
 File “<frozen importlib._bootstrap>”, line 991, in _find_and_load
 File “<frozen importlib._bootstrap>”, line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named ‘cv2’

Ari Eswandi

Traceback (most recent call last):
File “C:\Users\Asus\AppData\Local\Programs\Python\pengenalan wajah\deteksi wajah.py”, line 10, in
faces = face_cascade.detectMultiScale(gray, 4.5, 1)
cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-oduouqig\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’

bagaimana ya mass kalau jadi kayak gini?
mohon pencerahan nya

Nia

”’ https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_eye.xml ”’ import cv2, os wajahDir = ‘datawajah’ cam = cv2.VideoCapture(0) cam.set(3, 640) cam.set(4, 480) faceDetector = cv2.CascadeClassifier(‘haarcascade_frontalface_default.xml’) eyeDetector = cv2.CascadeClassifier(‘haarcascade_eye.xml’) faceID = input(“Masukkan face ID yang akan direkam datanya [kemudian tekan ENTER]: “) print(“Tatap wajah Anda ke depan dalam webcam, Tunggu proses pengambilan data wajah selesai.”) ambilData = 1 while True : retV, frame = cam.read() abuAbu = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = faceDetector.detectMultiScale(abuAbu, 1.3, 5) for (x, y, w, h) in faces: frame = cv2.rectangle(frame, (x,y),(x+w,y+h),(0,255,255),2) namaFile = ‘wajah.’+str(faceID)+’.’+str(ambilData)+’.jpg’ cv2.imwrite(wajahDir+’/’+namaFile, frame) ambilData += 1 roiAbuAbu = abuAbu[y:y+h,x:x+w] roiWarna = frame[y:y+h,x:x+w] eyes = eyeDetector.detectMultiScale(roiAbuAbu) for (xe, ye, we,… Read more »

Mifftah

Masukkan face ID yang akan direkam datanya [kemudian tekan ENTER]: 4211420070
Tatap wajah Anda ke depan dalam webcam, Tunggu proses pengambilan data wajah selesai.
Traceback (most recent call last):
File “/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py”, line 31, in
start(fakepyfile,mainpyfile)
File “/data/user/0/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py”, line 30, in start
exec(open(mainpyfile).read(), __main__.__dict__)
File “”, line 19, in
cv2.error: OpenCV(4.3.0) /data/data/ru.iiec.pydroid3/app_HOME/opencv/opencv-python-master/opencv/modules/objdetect/src/cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function ‘detectMultiScale’

[Program finished]

Mifftah

Mas kalau errornya seperti ini knpa?

Anca

face detection/faceDetection.py”
Traceback (most recent call last):
File “c:\Users\KENTANG\tutorial python\00 template\src\face detection\faceDetection.py”, line 10, in
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
cv2.error: OpenCV(4.5.2) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-ttbyx0jz\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’

kak, ini errornya dibagian yang mana ya?

dania

cek nya dimana ya kak?

dania

cek nya dimana ya kak?
berarti file xml nya itu di taruh di file asli python? bukan satu folderdengan progrma di atas ?

king

kamera nyala tapi tidak muncul wajah,

desi

Traceback (most recent call last):
File “D:/Kerjaan Unhan/Rencana Penelitian/Penampungan beras-Uvi/Belajar Phyton/Webcam akses1.py”, line 9, in
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.5.2) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-xovot0t4\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’

kenapa ini ka?

imera

D:\python\venv\Scripts\python.exe D:/python/face_detector.py
Traceback (most recent call last):
File “D:\python\face_detector.py”, line 10, in
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
cv2.error: OpenCV(4.5.4-dev) D:\a\opencv-python\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’

[ WARN:0] global D:\a\opencv-python\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (438) `anonymous-namespace’::SourceReaderCB::~SourceReaderCB terminating async callback

Process finished with exit code 1

ini gimana ya mas? saya pake phyton 3.10

idah

makasih pak atas tutorialnya, untuk mengambil data array bagaimana y pak
dengan maksut jika tidak mendeteksi wajah program akan break

idah

terima kasih Pak, berhasil..
btw kapan nih pak bikin tutorial mengenali kedipan mata hehe

AMELIA BR ARITONANG

Traceback (most recent call last):
File “C:/Users/User/pelacak/facedetection.py”, line 1, in
import cv2
ImportError: No module named cv2
>>>

kalau seperti ini kenapa ya kak

Wijaya

Izin bertanya Pak, di tempat saya kok begini kenapa ya?
Traceback (most recent call last):
File “C:\Users\ASUS\Documents\OpenCV-Face-Recognition-master\FacialRecognition\facedetection.py”, line 10, in
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’

dimas

Traceback (most recent call last):
File “C:/Python/Python39/facedetection.py”, line 10, in
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-95hbg2jt\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’

running di windows error bgni , bisa dibantu ?

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