Untitled
unknown
plain_text
8 months ago
2.1 kB
7
Indexable
import cv2
import os
import numpy as np
def preprocess_face(face):
"""Preprocessing untuk memperbaiki kualitas wajah."""
# Konversi ke grayscale
gray_face = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)
# Histogram Equalization untuk normalisasi pencahayaan
equalized_face = cv2.equalizeHist(gray_face)
# Kembali ke format RGB agar cocok dengan input model
return cv2.cvtColor(equalized_face, cv2.COLOR_GRAY2BGR)
# Input nama pengguna
user_name = input("Masukkan Nama Pengguna: ")
# Buat folder untuk menyimpan dataset berdasarkan nama pengguna
OUTPUT_DIR = f"dataset_latest/{user_name.replace(' ', '_')}" # Mengganti spasi dengan underscore
os.makedirs(OUTPUT_DIR, exist_ok=True)
# Menggunakan kamera untuk menangkap wajah
cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
count = 0 # Counter untuk menyimpan jumlah gambar
while count < 200: # Ambil 200 gambar
ret, frame = cap.read()
if not ret:
break
# Deteksi wajah
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(50, 50))
for (x, y, w, h) in faces:
face = frame[y:y+h, x:x+w]
# Preprocessing wajah
preprocessed_face = preprocess_face(face)
face_resized = cv2.resize(preprocessed_face, (128, 128))
file_path = os.path.join(OUTPUT_DIR, f"face_{count}.jpg")
# Simpan wajah yang telah diproses
cv2.imwrite(file_path, face_resized)
count += 1
# Gambar kotak di wajah
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.putText(frame, f"Capturing {count}/200", (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
cv2.imshow(f"Collecting Faces for {user_name}", frame)
if cv2.waitKey(1) & 0xFF == ord('q') or count >= 200:
break
cap.release()
cv2.destroyAllWindows()
print(f"{count} images saved for user {user_name} in {OUTPUT_DIR}")
Editor is loading...
Leave a Comment