Spaces:
Paused
Paused
| import cv2 | |
| import insightface | |
| import numpy as np | |
| # Load InsightFace model | |
| app = insightface.app.FaceAnalysis( | |
| providers=['CUDAExecutionProvider', 'CPUExecutionProvider'] | |
| ) | |
| # Larger detection size for better accuracy | |
| app.prepare(ctx_id=0, det_size=(640, 640)) | |
| known_face_embeddings = [] | |
| known_face_names = [] | |
| # ------------------------- | |
| # Add Known Person | |
| # ------------------------- | |
| def add_person(image_path, person_name): | |
| image = cv2.imread(image_path) | |
| faces = app.get(image) | |
| if len(faces) > 0: | |
| embedding = faces[0].embedding | |
| known_face_embeddings.append(embedding) | |
| known_face_names.append(person_name) | |
| print(f"{person_name} added successfully") | |
| else: | |
| print(f"No face found in {image_path}") | |
| # Add your saved faces | |
| add_person(r"D:\face\Lavi.png", "Lavi") | |
| add_person(r"D:\face\gaurav image.jpg", "Gaurav") | |
| # Webcam | |
| cap = cv2.VideoCapture(1) | |
| cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) | |
| cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) | |
| while True: | |
| ret, frame = cap.read() | |
| if not ret: | |
| break | |
| faces = app.get(frame) | |
| for face in faces: | |
| bbox = face.bbox.astype(int) | |
| x1, y1, x2, y2 = bbox | |
| current_embedding = face.embedding | |
| name = "Unknown" | |
| best_score = -1 | |
| for i, known_embedding in enumerate(known_face_embeddings): | |
| similarity = np.dot(current_embedding, known_embedding) / ( | |
| np.linalg.norm(current_embedding) * | |
| np.linalg.norm(known_embedding) | |
| ) | |
| if similarity > best_score: | |
| best_score = similarity | |
| name = known_face_names[i] | |
| # Threshold | |
| if best_score < 0.45: | |
| name = "Unknown" | |
| cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2) | |
| label = f"{name} {best_score:.2f}" | |
| cv2.putText( | |
| frame, | |
| label, | |
| (x1, y1 - 10), | |
| cv2.FONT_HERSHEY_SIMPLEX, | |
| 0.8, | |
| (0, 255, 0), | |
| 2 | |
| ) | |
| cv2.imshow("InsightFace Recognition", frame) | |
| if cv2.waitKey(1) == 27: | |
| break | |
| cap.release() | |
| cv2.destroyAllWindows() |