Belajar Membuat Sistem Pengenalan Wajah Real-time untuk Pemula dengan TensorFlow Keras

Sistem Pengenalan Wajah dengan OpenCV dan TensorFlow

Membangun Sistem Pengenalan Wajah dengan OpenCV dan TensorFlow

👁️ Meta Description:
Pelajari cara membangun sistem pengenalan wajah dari nol menggunakan OpenCV untuk deteksi wajah dan TensorFlow untuk pengenalan model. Tutorial praktis dengan kode Python siap pakai!
Demo Pengenalan Wajah

Contoh sistem pengenalan wajah real-time (Sumber: Medium)

📌 Pendahuluan

Sistem pengenalan wajah (face recognition) telah menjadi teknologi yang banyak digunakan dalam berbagai aplikasi seperti:

  • 🔒 Sistem keamanan dan autentikasi
  • 📱 Fitur unlock smartphone
  • 🛒 Analisis demografi pelanggan
  • 📸 Organisasi foto digital

Dalam panduan ini, kita akan membangun sistem pengenalan wajah dengan:

  1. OpenCV untuk deteksi wajah
  2. TensorFlow/Keras untuk model pengenalan
  3. Python sebagai bahasa pemrograman

🛠️ Teknologi yang Digunakan

OpenCV

Library computer vision untuk deteksi wajah

TensorFlow

Framework deep learning untuk model pengenalan

Python 3

Bahasa pemrograman utama

NumPy

Komputasi numerik dengan array

📋 Langkah 1: Persiapan Lingkungan

Instalasi Package

Pastikan semua package terinstal dengan menjalankan:

pip install opencv-python tensorflow numpy matplotlib

Untuk versi GPU (jika tersedia):

pip install opencv-python tensorflow-gpu numpy matplotlib

Struktur Proyek

Buat struktur folder seperti berikut:

face_recognition_project/
├── dataset/               # Folder untuk menyimpan dataset wajah
│   ├── person1/           # Folder untuk setiap orang
│   ├── person2/
│   └── ...
├── models/                # Model yang sudah dilatih
├── face_detection.py      # Script deteksi wajah
├── train_model.py         # Script pelatihan model
└── recognition.py         # Script pengenalan wajah

👤 Langkah 2: Membuat Dataset Wajah

Kumpulkan Gambar Wajah

Buat script face_detection.py untuk menangkap gambar wajah:

# face_detection.py
import cv2
import os

# Load Haar Cascade untuk deteksi wajah
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# Inisialisasi webcam
cap = cv2.VideoCapture(0)

# Input nama orang
person_name = input("Masukkan nama orang: ")
os.makedirs(f'dataset/{person_name}', exist_ok=True)

count = 0
while count < 100:  # Ambil 100 gambar
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # Deteksi wajah
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    
    # Simpan gambar wajah yang terdeteksi
    for (x,y,w,h) in faces:
        face_img = frame[y:y+h, x:x+w]
        face_img = cv2.resize(face_img, (160, 160))  # Resize ke ukuran tetap
        cv2.imwrite(f'dataset/{person_name}/face_{count}.jpg', face_img)
        count += 1
        
        # Gambar rectangle di wajah
        cv2.rectangle(frame, (x,y), (x+w,y+h), (255,0,0), 2)
    
    cv2.imshow('Capture Faces', frame)
    if cv2.waitKey(1) == 27 or count >= 100:  # ESC untuk keluar
        break

cap.release()
cv2.destroyAllWindows()

Jalankan script untuk setiap orang yang ingin dikenali.

⚠️ Tips Dataset yang Baik

  • Ambil gambar dengan berbagai ekspresi (senyum, netral, dll)
  • Variasi pencahayaan dan sudut
  • Minimal 50-100 gambar per orang
  • Ukuran gambar konsisten (misal 160x160 piksel)

🧠 Langkah 3: Membangun Model Pengenalan Wajah

1. Persiapan Data

Buat script train_model.py untuk memproses data:

# train_model.py - Bagian 1: Load dataset
import os
import numpy as np
from sklearn.preprocessing import LabelEncoder
from tensorflow.keras import utils

# Fungsi untuk load dataset
def load_dataset(dataset_path):
    X, y = [], []
    
    for person_name in os.listdir(dataset_path):
        person_dir = os.path.join(dataset_path, person_name)
        
        if os.path.isdir(person_dir):
            for img_name in os.listdir(person_dir):
                img_path = os.path.join(person_dir, img_name)
                img = cv2.imread(img_path)
                img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # Konversi ke RGB
                img = img / 255.0  # Normalisasi
                
                X.append(img)
                y.append(person_name)
    
    return np.array(X), np.array(y)

# Load dataset
X, y = load_dataset('dataset')

# Encode label
label_encoder = LabelEncoder()
y_encoded = label_encoder.fit_transform(y)
y_categorical = utils.to_categorical(y_encoded)

2. Arsitektur Model

Kita akan menggunakan arsitektur CNN sederhana:

# train_model.py - Bagian 2: Bangun model
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout

def build_model(input_shape, num_classes):
    model = Sequential([
        # Lapisan konvolusi pertama
        Conv2D(32, (3, 3), activation='relu', input_shape=input_shape),
        MaxPooling2D((2, 2)),
        
        # Lapisan konvolusi kedua
        Conv2D(64, (3, 3), activation='relu'),
        MaxPooling2D((2, 2)),
        
        # Lapisan konvolusi ketiga
        Conv2D(128, (3, 3), activation='relu'),
        MaxPooling2D((2, 2)),
        
        # Flatten dan dense layer
        Flatten(),
        Dense(256, activation='relu'),
        Dropout(0.5),
        Dense(num_classes, activation='softmax')
    ])
    
    return model

# Bangun model
input_shape = (160, 160, 3)  # Sesuaikan dengan ukuran gambar
num_classes = len(label_encoder.classes_)
model = build_model(input_shape, num_classes)

# Compile model
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

3. Pelatihan Model

Lanjutkan dengan pelatihan model:

# train_model.py - Bagian 3: Training
from sklearn.model_selection import train_test_split

# Split data training dan testing
X_train, X_test, y_train, y_test = train_test_split(X, y_categorical, test_size=0.2)

# Training model
history = model.fit(X_train, y_train,
                    epochs=20,
                    batch_size=32,
                    validation_data=(X_test, y_test))

# Simpan model dan label encoder
model.save('models/face_recognition_model.h5')
np.save('models/label_encoder.npy', label_encoder.classes_)

👁️ Langkah 4: Implementasi Real-Time Recognition

Buat Script Pengenalan

Buat file recognition.py:

# recognition.py
import cv2
import numpy as np
from tensorflow.keras.models import load_model

# Load model dan label encoder
model = load_model('models/face_recognition_model.h5')
label_encoder = np.load('models/label_encoder.npy', allow_pickle=True)

# Load Haar Cascade untuk deteksi wajah
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# Inisialisasi webcam
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # Deteksi wajah
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    
    # Untuk setiap wajah yang terdeteksi
    for (x,y,w,h) in faces:
        # Ekstrak dan preprocess wajah
        face_img = frame[y:y+h, x:x+w]
        face_img = cv2.resize(face_img, (160, 160))
        face_img = cv2.cvtColor(face_img, cv2.COLOR_BGR2RGB)
        face_img = face_img / 255.0
        face_img = np.expand_dims(face_img, axis=0)
        
        # Prediksi
        predictions = model.predict(face_img)
        person_idx = np.argmax(predictions)
        confidence = np.max(predictions)
        person_name = label_encoder[person_idx]
        
        # Tampilkan hasil
        if confidence > 0.7:  # Threshold confidence
            cv2.rectangle(frame, (x,y), (x+w,y+h), (0,255,0), 2)
            cv2.putText(frame, f'{person_name}: {confidence:.2f}', 
                        (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0,255,0), 2)
        else:
            cv2.rectangle(frame, (x,y), (x+w,y+h), (0,0,255), 2)
            cv2.putText(frame, 'Unknown', (x, y-10), 
                        cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0,0,255), 2)
    
    # Tampilkan frame
    cv2.imshow('Face Recognition', frame)
    
    # Tekan ESC untuk keluar
    if cv2.waitKey(1) == 27:
        break

cap.release()
cv2.destroyAllWindows()

🚀 Optimasi Performa

Untuk meningkatkan akurasi sistem:

  • Gunakan FaceNet - Arsitektur pre-trained untuk pengenalan wajah
  • Augmentasi data - Rotasi, flip, brightness adjustment
  • Fine-tuning - Gunakan model pre-trained dan sesuaikan
  • Face alignment - Sejajarkan wajah sebelum diproses

🎯 Kesimpulan

Anda telah berhasil membangun sistem pengenalan wajah dengan:

  1. Deteksi wajah menggunakan OpenCV
  2. Pembuatan dataset wajah
  3. Pelatihan model CNN dengan TensorFlow
  4. Implementasi real-time recognition

Langkah selanjutnya:

  • Eksperimen dengan arsitektur model yang lebih kompleks
  • Tambahkan fitur registrasi wajah baru secara dinamis
  • Implementasikan sistem autentikasi berbasis wajah
  • Optimasi untuk perangkat mobile

Dengan dasar ini, Anda bisa mengembangkan berbagai aplikasi canggih berbasis pengenalan wajah!

Punya pertanyaan? Tinggalkan komentar di bawah.

kresna berita

Saya seorang pelajar yang ingin berbagi ilmu pengetahuan dengan para pembaca blog saya

Post a Comment

Previous Post Next Post

Selamat Datang di Blog Anda

Pilih menu di atas untuk informasi lebih lanjut.