deteksi wajah menggunakan model dlib

Deteksi Wajah Menggunakan Model DLIB

Pada artikel ini, kita akan membahas proses pendeteksian wajah menggunakan algoritma pendeteksian Dlib HOG. Meskipun dalam artikel ini kita tidak hanya akan menguji wajah bagian depan tetapi juga berbagai sudut gambar dan melihat di mana model kami akan bekerja dengan baik dan di mana tidak. Kita juga akan menghitung total waktu yang dibutuhkan oleh model detektor HOG untuk mendeteksi wajah dalam gambar.

Penerapan Deteksi Wajah

  • Tujuan keamanan: Pengenalan wajah menjadi metode paling umum untuk menjaga keamanan individu/organisasi.
  • Perusahaan ride-sharing: Ini akan membantu mereka untuk memeriksa apakah orang yang tepat dipilih oleh pengemudi atau tidak.
  • Otomatisasi rumah: Untuk menjaga keamanan, terutama di rumah yang digerakkan oleh teknologi, deteksi dan pengenalan wajah sangat penting.

Import Library

Pertama kita akan mengimpor library yang diperlukan.

import cv2
import dlib
from time import time
import matplotlib.pyplot as plt

Deteksi Wajah HoG Dlib

Jika kita ingin mengetahui tentang deteksi wajah HOG maka pertama-tama mari kita uraikan istilah yang merupakan Histogram dari gradien berorientasi yang tidak hanya algoritma deteksi wajah tetapi juga metode deteksi objek lengkap secara umum. HOG pada dasarnya adalah deskriptor fitur yang dilakukan baik untuk pemrosesan gambar dan teknik visi komputer.

HOG terutama menggunakan 5 filter selama langkah preprocessing yaitu sebagai berikut:

  • Wajah frontal
  • Sisi kanan berbalik wajah
  • Sisi kiri berbalik wajah
  • Wajah frontal tetapi diputar ke kanan
  • Wajah frontal tetapi diputar ke kiri
filter deteksi wajah hog

Memuat Detektor Wajah HOG

Sejauh ini, kita telah memahami apa itu detektor wajah HOG tetapi untuk menggunakannya kita harus memuat detektor wajah terlebih dahulu yaitu fungsi dlib.get_frontal_face_detector() yang merupakan metode terlatih. Fungsi ini memiliki pustaka dlib sebelumnya sehingga kita bahkan tidak perlu menyertakan file model utama.

hog_face_detector = dlib.get_frontal_face_detector()
hog_face_detector

Fungsi Deteksi Wajah HoG

Jadi sekarang saatnya membuat fungsi deteksi Wajah HOG yang akan sangat andal dalam jangka panjang. Untuk tujuan pengujian, kita akan menggunakan berbagai jenis posisi kepala/wajah. Jadi untuk saat ini, kita tidak perlu melakukan tugas yang sama berulang kali.

Sintaks fungsi kita:

  • results = hog_face_detector(sample_image, up_sample)

Parameter fungsi:

  • Image: Parameter ini akan menampung gambar sampel yang akan kita gunakan untuk melakukan deteksi wajah.
  • Upsample: Parameter ini opsional dan akan bertanggung jawab untuk meng-upsample gambar masukan sebelum menjalankan deteksi wajah.

Bagaimana Fungsi ini Kembali?

Results: Hasilnya akan berupa struktur data larik yang akan menyimpan koordinat kotak pembatas dari wajah/wajah yang terdeteksi.

Kapan Kita Perlu Meng-Upsample Gambar?

Karena algoritma HOG ini dilatih dengan tujuan untuk mendeteksi ukuran wajah minimal 8×80, maka setiap kali kita berpikir untuk mendeteksi wajah yang lebih kecil dari itu, kita perlu meng-upsample gambar yang akan meningkatkan resolusi gambar.

def hogDetectFaces(image, hog_face_detector, display = True):

    height, width, _ = image.shape

    output_image = image.copy()

    imgRGB = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

    start = time()

    results = hog_face_detector(imgRGB, 0)

    end = time()

    for bbox in results:

        x1 = bbox.left()
        y1 = bbox.top()
        x2 = bbox.right()
        y2 = bbox.bottom()

        cv2.rectangle(output_image, pt1=(x1, y1), pt2=(x2, y2), color=(0, 255, 0), thickness=width//200)  

    if display:

        cv2.putText(output_image, text='Time taken: '+str(round(end - start, 2))+' Seconds.', org=(10, 65),
                    fontFace=cv2.FONT_HERSHEY_COMPLEX, fontScale=width//700, color=(0,0,255), thickness=width//500)

        plt.figure(figsize=[15,15])
        plt.subplot(121);plt.imshow(image[:,:,::-1]);plt.title("Original Image");plt.axis('off');
        plt.subplot(122);plt.imshow(output_image[:,:,::-1]);plt.title("Output");plt.axis('off');

    else:

        return output_image, results

Berikut penjelasan code diatas:

  • Pada langkah pertama, kita akan mendapatkan tinggi dan lebar gambar menggunakan fungsi bentuk.
  • Setelah itu, membuat salinan gambar sehingga kita dapat melakukan semua tugas pada gambar salinan, bukan pada gambar aslinya.
  • Kemudian kita telah mengonversi gambar sampel kami dari format BGR ke RGB.
  • Seperti dalam artikel ini, kita menghitung waktu yang dibutuhkan untuk deteksi oleh algoritme sehingga untuk itu, kita mengakses waktu saat ini.
  • Sekarang kita akan menggunakan hog_face_detector untuk melakukan deteksi wajah.
  • Seiring dengan waktu mulai, kita juga akan mengambil waktu akhir.
  • Sekarang kita akan mengulang melalui kotak pembatas dan mengambil koordinat (X1, Y1) dan (X2, Y2) dari kotak pembatas kemudian berdasarkan koordinat ini kita akan menggambar kotak pembatas.
  • Inilah bagian validasi kecil di mana kami akan memeriksa apakah kita akan menampilkan input dan gambar yang dihasilkan atau tidak.
  • Jika ya, kita akan memberikan waktu yang tepat yang dibutuhkan algoritma kita untuk melakukan deteksi wajah dan kemudian menampilkan kedua gambar tersebut.
  • Jika tidak, kita hanya akan memberikan hasil dan gambar keluaran.

Karena kita telah membuat fungsi deteksi wajah kami yaitu hogDetectFaces, jadi mari kita gunakan sekarang untuk mendeteksi wajah menggunakan algoritma HOG.

Membaca Contoh Gambar Untuk Deteksi Wajah

image = cv2.imread('media/1.jpg')
hogDetectFaces(image, hog_face_detector, display=True)

Pada output di atas, kita dapat melihat bahwa model kita telah memprediksi dan menggambar kotak pembatas pada gambar secara akurat dan efisien.

Seperti yang dijelaskan diatas dari detektor wajah HOG, ia tidak akan dapat mendeteksi wajah yang berukuran lebih kecil dari 80×80. Tetapi jika kita masih ingin mendeteksi wajah-wajah itu maka kita harus memperbesar gambar menggunakan argumen upsample dari detektor wajah HOG yang ada di hogDetectFaces() meskipun waktu komputasi juga akan bertambah setelah proses ini.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top