Belajar Python Bagian 2: Live Video di OpenCV dan Face Detection

Baiklah, sesuai janji saya, kali ini kita akan mempelajari bagaimana menggunakan live video di OpenCV. Kalau sebelumnya kita menggunakan gambar diam, maka kali ini kita akan menggunakan OpenCV untuk menganalisa video live dari webcam di komputer/laptop. Bisa dibilang, inilah kekuatan OpenCV, di mana ia bisa menganalisa objek bergerak, sebagaimana manusia mampu mengenali objek yang dilihat langsung.

1. Menampilkan Live Video

Langkah pertama, mari kita menampilkan video dari webcam di komputer kita

import cv2
import sys

# mengambil video berukuran 640x480
video_capture = cv2.VideoCapture(0)
video_capture.set (3, 640)
video_capture.set (4, 480)

# selama program berjalan, mengulang proses pengambilan gambar, frame demi frame
while True:
    # mengangkap frame-demi-frame
    ret, frame = video_capture.read()

    # menampilkan frame
    cv2.imshow('Video', frame)

    # menutup window dengan tombol k
    if cv2.waitKey(1) & 0xFF == ord('k'):
        break

# berhenti berhubungan dengan webcam saat program ditutup
video_capture.release()
cv2.destroyAllWindows()

Kodenya cukup pendek dan mudah dimengerti. Di sini saya mempelajari penggunaan loop dengan format while. Selain itu ada contoh pernyataan kondisional dengan if ketika menentukan bagaimana menutup window. Saya sengaja menggunakan video berukuran 640×480 agar video tidak terlalu berat ketika dianalisa. Defaultnya, webcam di MacBook saya akan menampilkan video berukuran 1280×720, lumayan berat ketika dianalisa.

2. Melacak Wajah dengan Haar Cascade Classifier

Selanjutnya kita akan menganalisa wajah dengan menggunakan Haar Cascade Classifier. (edit: ada kesalahan dalam mendefinisikan Haar Cascade Classifier. Terima kasih untuk teman saya, Muhammad Abduh atas koreksinya via FB 😀)Haar adalah salah satu jenis feature untuk objek dalam gambar. Feature ini bisa dibayangkan sebagai metode untuk mengenali objek. Pada dasarnya, Haar bekerja mengenali sebuah objek dengan menyusun sekumpulan kotak hitam putih, yang menandakan tingkat kecerahan pada sebuah objek. Dengan melatihnya untuk meengenali wajah sebagai kumpulan kotak tertentu, maka otomatis wajah dalam video bisa dikenali dan dilacak.

Disebut Cascade Classifier, karena metode untuk mengklasifikasikan dan mengenali objek, dilakukan secara bertahap melalui beberapa classifier yang diimplementasikan berurutan dalam sebuah area di gambar, hingga sebuah objek di classifier dikenali.

Contoh Haar Cascade Classifier untuk Wajah Tampak Depan

Tentu saja, ia bisa digunakan untuk melatih mengenali objek apapun, di luar wajah. Khusus untuk wajah, OpenCV sudah membawa beberapa contoh Haar Cascade Classifier yang bisa langsung kita gunakan. Kali ini saya akan menggunakan Haar untuk mengenali tampak depan dari wajah

import cv2
import sys

# menggunakan classifier yang ada di folder OpenCV
cascPath = '/opencv/data/haarcascades/haarcascade_frontalface_alt2.xml'
faceCascade = cv2.CascadeClassifier(cascPath)

video_capture = cv2.VideoCapture(0)
video_capture.set (3, 640)
video_capture.set (4, 480)

while True:
    ret, frame = video_capture.read()

    # Konversi gambar ke grayscale, mengecilkan ukuran video
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # menghasilkan objek faces, berisi sekumpulan kotak di dalam list
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.1,
        minNeighbors=10,
        minSize=(50, 50),
        flags=cv2.cv.CV_HAAR_SCALE_IMAGE
    )

    # Menggambar kotak di sekitar wajah, posisinya bergantung dari kotak dalam list
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 200, 100), 10)

    # Display the resulting frame
    cv2.imshow('Video', frame)

    if cv2.waitKey(1) & 0xFF == ord('k'):
        break

video_capture.release()
cv2.destroyAllWindows()

Di sini saya berkenalan dengan bagaimana Python mengembalikan sebuah objek di dalam list sebagai nilai kembali dari sebuah fungsi. Saya juga menyadari bahwa tipe variabel tidak dideklarasikan di Python, sehingga bagus bila sebuah variabel yang berisi banyak data seperti list, dinamai sebagai sebuah objek majemuk (faces, bukan face).

Hasilnya adalah gambar berikut

Haar OpenCV

Sekian dulu untuk postingan kali ini. Selanjutnya, saya akan mengajarkan bagaimana menggunakan OpenCV untuk melacak warna di dalam live video.

Selamat berakhir pekan.

Leave a Reply