/
/
Filter Wajah Dengan Opencv Haar Cascade
Posted 5 years ago • 939 Dibaca

Filter Wajah Dengan Opencv Haar Cascade

Tags:  PYTHONOPENCV

Saat ini banyak sekali fitur filter wajah yang terdapat di berbagai aplikasi terkenal, seperti Instagram, Snapchat dan lain sebagainya. Pada tutorial kali ini, kita akan mencoba membuat filter wajah dengan menggunakan salah satu library terkenal bahasa pemrogramman python yaitu opencv dengan classifier haar cascade.

Opencv adalah library yang biasa digunakan untuk manipulasi gambar atau video. Di Opencv terdapat classifier haar cascade yang biasanya digunakan untuk mendeteksi wajah dalam gambar atau video.  Classifier ini juga bisa digunakan sebagai salah satu tool penting yang membantu filter wajah seperti pada aplikasi Snapchat dan Instagram. Hasilnya sebagai contoh gambar dibawah ini;

 

Yang perlu disiapkan:

- Python

- Opencv

 

Let’s Code:

import cv2 

classifier = 'cascade/haarcascade_frontalface_alt.xml'

Setelah python dan opencv ada di personal computer, langsung saja buka code editor kesayanganmu lalu import library opencv. Selanjutnya load classifier yang akan digunakan. Untuk tutorial kali ini, classifier yang akan kita gunakan adalah `haarcascade_frontalface_alt.xml.`

face_cascade = cv2.CascadeClassifier(classifier)

frame = cv2.imread('images/baby.png')

Setelah classifier berhasil kita load, selanjutnya load gambar utama. Disini menggunakan gambar `baby.png` dan filter wajah menggunakan `dog.png`. Kedua gambar tersebut akan dibagikan bersama source code lengkap diakhir artikel.

 

face_mask = cv2.imread('images/dog.png')

 faces = face_cascade.detectMultiScale(frame, scaleFactor=1.3, minNeighbors=3) 

Classifier akan mulai mendeteksi wajah pada bagian function tersebut. Parameter frame merupakan variabel yang akan dideteksi. Obyek kita adalah gambar. Pada parameter scaleFactor, proses kinerja pendeteksi gambar terjadi.  Jika ukuran gambar diperkecil akan mempercepat kinerja deteksi, tetapi akurasi akan semakin berkurang. Sedangkan parameter minNeighbors akan mendeteksi nilai positif dalam scaleFactor yang akan mendeteksi wajah dalam gambar tersebut.

 

for (x,y,w,h) in faces:

    h, w = int(1.5*h), int(2.0*w) 

    y -= int(0.1*h+22)

    x = int(x-33)

Saat variabel faces di lakukan looping, koordinat wajah akan disesuaikan berdasarkan sumbu x,y (x,y) & hight, weight (h,w).

frame_roi = frame[y:y+h, x:x+w]

Variabel frame_roi digunakan untuk menentukan region of image atau daerah gambar wajah.

face_mask_small = cv2.resize(face_mask, (w, h), interpolation=cv2.INTER_AREA)

Selanjutnya menyesuaikan ukuran filter wajah sesuai dengan tinggi & lebar wajah, seperti gambar dibawah ini;

 

gray_mask = cv2.cvtColor(face_mask_small, cv2.COLOR_BGR2GRAY)

Variabel gray_mask digunakan untuk mengubah filter wajah yang telah disesuaikan ukurannya ke dalam gray scale / derajat keabu-abuan.

 

 _, mask = cv2.threshold(gray_mask, 180, 255, cv2.THRESH_BINARY_INV)

Pada bagian ini filter wajah akan berubah dengan threshold/ ambang batas warna. Kali ini kita akan menggunakan ukuran (180, 255).

 

mask_inv = cv2.bitwise_not(mask)

Selanjutnya inversi atau balikkan warna pada filter wajah.

 

masked_face = cv2.bitwise_and(face_mask_small, face_mask_small, mask=mask)

Variabel masked_face akan mengubah filter wajah bitwise face_mask_small seperti pada gambar berikut ini.

 

masked_frame = cv2.bitwise_and(frame_roi, frame_roi, mask=mask_inv)

Pasang filter wajah yang telah dilakukan inversi pada wajah yang sudah terdeteksi.

 

frame[y:y+h, x:x+w] = cv2.add(masked_face, masked_frame)

cv2.imwrite('images/output.png', frame)

Pada function ini, wajah yang telah ditentukan berdasarkan koordinatnya akan ditimpa dengan filter wajah yang telah dipersiapkan. Kemudian ditampilkan dengan function selanjutnya. Maka hasilnya akan seperti gambar berikut ini;

 

Sekian tutorial Filter Wajah Dengan Opencv Haar Cascade kali ini. Semoga bermanfaat dan sampai jumpa lagi pada tutorial selanjutnya. 

 

full code:

import cv2 

face_cascade = cv2.CascadeClassifier('cascade/haarcascade_frontalface_alt.xml')

#source = https://www.pexels.com/photo/people-girl-design-happy-35188/
frame = cv2.imread('images/baby.png')

#source = https://www.digitalocean.com/community/tutorials/how-to-apply-computer-vision-to-build-an-emotion-based-dog-filter-in-python-3 
face_mask = cv2.imread('images/dog.png') 

face_rects = face_cascade.detectMultiScale(frame, scaleFactor=1.3, minNeighbors=3) 
for (x,y,w,h) in face_rects:
    h, w = int(1.5*h), int(2.0*w) 
    y -= int(0.1*h+22)
    x = int(x-33)

    frame_roi = frame[y:y+h, x:x+w]
    face_mask_small = cv2.resize(face_mask, (w, h), interpolation=cv2.INTER_AREA) 
    gray_mask = cv2.cvtColor(face_mask_small, cv2.COLOR_BGR2GRAY) 
    _, mask = cv2.threshold(gray_mask, 180, 255, cv2.THRESH_BINARY_INV) 
    mask_inv = cv2.bitwise_not(mask) 
    masked_face = cv2.bitwise_and(face_mask_small, face_mask_small, mask=mask) 
    masked_frame = cv2.bitwise_and(frame_roi, frame_roi, mask=mask_inv) 
    
    frame[y:y+h, x:x+w] = cv2.add(masked_face, masked_frame)
 
cv2.imwrite('images/output.png', frame)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

source : https://github.com/idmore/Filter-Wajah-Dengan-Opencv-Haar-Cascade

reference : https://www.digitalocean.com/community/tutorials/how-to-apply-computer-vision-to-build-an-emotion-based-dog-filter-in-python-3

 

MauCoding © 2025 powered by YMG Team