Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import cv2
- from ultralytics import YOLO
- import numpy as np
- # Muat model YOLO yang telah dilatih
- model = YOLO("models/best.pt") # Ganti dengan path model Anda
- # Daftar ID personal dari dataset
- id_mapping = {}
- with open("id_mapping.txt", "r") as f:
- for line in f:
- idpersonal, class_id = line.strip().split()
- id_mapping[class_id] = idpersonal
- # Fungsi untuk mendeteksi wajah dan mengeluarkan ID Personal atau "Unknown"
- def recognize_faces_from_webcam():
- # Mengakses webcam
- cap = cv2.VideoCapture(0)
- while True:
- # Baca frame dari webcam
- ret, img = cap.read()
- if not ret:
- print("❌ Tidak bisa mendapatkan frame dari webcam.")
- break
- # Resize gambar menjadi 640x640 untuk sesuai dengan ukuran input model
- img_resized = cv2.resize(img, (640, 640))
- img_rgb = cv2.cvtColor(img_resized, cv2.COLOR_BGR2RGB) # Konversi ke RGB agar model bekerja dengan benar
- # Deteksi wajah menggunakan model YOLO
- results = model(img_rgb)
- # Ambil bounding box dan klasifikasi untuk setiap wajah yang terdeteksi
- for result in results:
- if result.boxes:
- for box in result.boxes:
- class_id = int(box.cls) # Ambil class ID dari box
- confidence = box.conf[0].item() # Ambil nilai confidence
- # Set threshold confidence
- confidence_threshold = 0.75
- if confidence < confidence_threshold:
- label = "Unknown"
- color = (0, 0, 255) # Merah untuk wajah yang tidak dikenali
- print(f"❌ Unknown: Wajah tidak dikenali. Confidence terlalu rendah ({confidence:.2f})")
- else:
- # Jika class_id ada dalam id_mapping, kenali ID Personal
- if str(class_id) in id_mapping:
- idpersonal = id_mapping[str(class_id)]
- label = idpersonal
- color = (0, 255, 0) # Hijau untuk wajah yang dikenali
- print(f"✅ ID Personal Dikenali: {idpersonal}")
- else:
- label = "Unknown"
- color = (0, 0, 255) # Merah untuk wajah yang tidak dikenali
- print("❌ Unknown: Wajah tidak dikenali.")
- # Gambar bounding box dan label pada wajah yang terdeteksi
- x1, y1, x2, y2 = map(int, box.xyxy[0])
- cv2.rectangle(img, (x1, y1), (x2, y2), color, 2) # Gambar kotak
- # Menampilkan label dengan ukuran font lebih kecil
- cv2.putText(img, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 1)
- # Menampilkan gambar dengan OpenCV
- cv2.imshow("Deteksi Wajah - Real-Time", img)
- # Tekan 'q' untuk keluar dari loop
- if cv2.waitKey(1) & 0xFF == ord('q'):
- break
- # Setelah selesai, lepaskan capture dan tutup jendela
- cap.release()
- cv2.destroyAllWindows()
- # Jalankan deteksi wajah dari webcam
- recognize_faces_from_webcam()
Add Comment
Please, Sign In to add comment