Membangun Sistem Pengenalan Wajah dengan OpenCV dan TensorFlow
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!

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:
- OpenCV untuk deteksi wajah
- TensorFlow/Keras untuk model pengenalan
- 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:
- Deteksi wajah menggunakan OpenCV
- Pembuatan dataset wajah
- Pelatihan model CNN dengan TensorFlow
- 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.