Pengenalan wajah atau Face Recognition adalah salah satu aplikasi kecerdasan buatan (AI) yang paling menarik dan banyak digunakan saat ini. Dengan Python, berkat pustaka yang kuat seperti OpenCV dan dlib, membuat sistem dasar pengenalan wajah menjadi lebih mudah diakses daripada sebelumnya.
Untuk memulai proyek ini, kita akan memerlukan beberapa pustaka utama Python. Ini adalah fondasi bagi semua proses deteksi, ekstraksi fitur, dan perbandingan:
Anda dapat menginstal pustaka ini menggunakan pip. Perlu diperhatikan bahwa instalasi dlib (yang merupakan dependensi face_recognition) terkadang memerlukan kompilator C++ di sistem Anda.
pip install opencv-python
pip install face_recognition
pip install numpy
Sistem pengenalan wajah bekerja dengan membandingkan fitur wajah baru dengan wajah yang sudah dikenal yang tersimpan dalam database. Proses menyimpan fitur wajah yang dikenal ini disebut encoding.
Kita perlu mengambil beberapa foto orang yang ingin kita kenali dan mengubahnya menjadi vektor numerik. Vektor ini adalah "sidik jari" wajah.
Dalam skrip Python, Anda akan membaca gambar-gambar ini dan menggunakan face_recognition.face_encodings().
import face_recognition
import os
known_face_encodings = []
known_face_names = []
# Asumsikan Anda memiliki folder 'data_wajah' berisi gambar-gambar
image_dir = "data_wajah"
for filename in os.listdir(image_dir):
if filename.endswith((".jpg", ".png")):
path = os.path.join(image_dir, filename)
image = face_recognition.load_image_file(path)
# Asumsi: hanya ada satu wajah per gambar pelatihan
encoding = face_recognition.face_encodings(image)
if encoding:
known_face_encodings.append(encoding[0])
# Menggunakan nama file (tanpa ekstensi) sebagai nama orang
name = os.path.splitext(filename)[0]
known_face_names.append(name)
print(f"Total wajah yang berhasil di-encode: {len(known_face_names)}")
Setelah basis data wajah kita siap, kita beralih ke pengambilan input, biasanya dari webcam atau file video. OpenCV sangat berguna di sini.
Kita akan melakukan perulangan untuk menangkap frame demi frame, mendeteksi wajah di frame tersebut, dan membandingkan encoding wajah yang terdeteksi dengan encoding yang tersimpan.
Fungsi kunci di sini adalah face_recognition.compare_faces() yang akan membandingkan encoding baru dengan daftar encoding yang dikenal, dan face_recognition.face_distance() untuk menentukan seberapa dekat kecocokannya.
import cv2
# Inisialisasi kamera
video_capture = cv2.VideoCapture(0)
while True:
ret, frame = video_capture.read()
# Mengubah warna frame dari BGR (OpenCV) ke RGB (face_recognition)
rgb_frame = frame[:, :, ::-1]
# Temukan semua wajah dan encoding dalam frame saat ini
face_locations = face_recognition.face_locations(rgb_frame)
face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)
for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
# Bandingkan wajah yang terdeteksi dengan wajah yang kita kenal
matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
name = "Tidak Dikenal"
# Hitung jarak (semakin kecil semakin mirip)
face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)
best_match_index = np.argmin(face_distances)
if matches[best_match_index]:
name = known_face_names[best_match_index]
# Gambar kotak di sekitar wajah
cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
# Tuliskan nama di bawah kotak
cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 255, 0), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 0.8, (255, 255, 255), 1)
# Tampilkan hasilnya
cv2.imshow('Face Recognition Demo', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video_capture.release()
cv2.destroyAllWindows()
Metode yang dijelaskan di atas menggunakan dlib's ResNet model, yang sangat baik dalam menghasilkan embeddings wajah yang robust. Namun, sistem ini memiliki beberapa batasan:
Untuk meningkatkan sistem, Anda dapat mengintegrasikan lebih lanjut dengan pembelajaran mesin yang lebih dalam (Deep Learning), seperti menggunakan model berbasis CNN yang sudah dilatih sebelumnya (misalnya, VGG-Face atau FaceNet) yang dapat memberikan akurasi yang jauh lebih tinggi daripada metode berbasis Euclidean distance sederhana yang digunakan oleh pustaka face_recognition secara default.
Dengan menguasai dasar-dasar ini menggunakan Python, Anda telah meletakkan fondasi kuat untuk eksplorasi teknologi biometrik di masa depan.