Update app.py
Browse files
app.py
CHANGED
@@ -6,6 +6,7 @@ import torch.nn as nn
|
|
6 |
import torch.optim as optim
|
7 |
from facenet_pytorch import InceptionResnetV1, MTCNN
|
8 |
import mediapipe as mp
|
|
|
9 |
from sklearn.cluster import KMeans
|
10 |
from sklearn.preprocessing import StandardScaler, MinMaxScaler
|
11 |
from sklearn.metrics import silhouette_score
|
@@ -24,6 +25,7 @@ mtcnn = MTCNN(keep_all=False, device=device, thresholds=[0.999, 0.999, 0.999], m
|
|
24 |
model = InceptionResnetV1(pretrained='vggface2').eval().to(device)
|
25 |
mp_face_mesh = mp.solutions.face_mesh
|
26 |
face_mesh = mp_face_mesh.FaceMesh(static_image_mode=False, max_num_faces=1, min_detection_confidence=0.5)
|
|
|
27 |
|
28 |
def frame_to_timecode(frame_num, original_fps, desired_fps):
|
29 |
total_seconds = frame_num / original_fps
|
@@ -40,9 +42,12 @@ def get_face_embedding_and_emotion(face_img):
|
|
40 |
with torch.no_grad():
|
41 |
embedding = model(face_tensor)
|
42 |
|
43 |
-
|
44 |
-
|
45 |
-
|
|
|
|
|
|
|
46 |
return embedding.cpu().numpy().flatten(), emotion_dict
|
47 |
|
48 |
def alignFace(img):
|
@@ -278,7 +283,7 @@ def process_video(video_path, num_anomalies, num_components, desired_fps, batch_
|
|
278 |
progress(0.4, "Organizing faces")
|
279 |
organize_faces_by_person(embeddings_by_frame, clusters, aligned_faces_folder, organized_faces_folder)
|
280 |
|
281 |
-
|
282 |
df, largest_cluster = save_person_data_to_csv(embeddings_by_frame, emotions_by_frame, clusters, desired_fps, original_fps, temp_dir, num_components)
|
283 |
|
284 |
progress(0.6, "Performing anomaly detection")
|
|
|
6 |
import torch.optim as optim
|
7 |
from facenet_pytorch import InceptionResnetV1, MTCNN
|
8 |
import mediapipe as mp
|
9 |
+
from fer import FER
|
10 |
from sklearn.cluster import KMeans
|
11 |
from sklearn.preprocessing import StandardScaler, MinMaxScaler
|
12 |
from sklearn.metrics import silhouette_score
|
|
|
25 |
model = InceptionResnetV1(pretrained='vggface2').eval().to(device)
|
26 |
mp_face_mesh = mp.solutions.face_mesh
|
27 |
face_mesh = mp_face_mesh.FaceMesh(static_image_mode=False, max_num_faces=1, min_detection_confidence=0.5)
|
28 |
+
emotion_detector = FER(mtcnn=False)
|
29 |
|
30 |
def frame_to_timecode(frame_num, original_fps, desired_fps):
|
31 |
total_seconds = frame_num / original_fps
|
|
|
42 |
with torch.no_grad():
|
43 |
embedding = model(face_tensor)
|
44 |
|
45 |
+
emotions = emotion_detector.detect_emotions(face_img)
|
46 |
+
if emotions:
|
47 |
+
emotion_dict = emotions[0]['emotions']
|
48 |
+
else:
|
49 |
+
emotion_dict = {e: 0 for e in ['angry', 'disgust', 'fear', 'happy', 'sad', 'surprise', 'neutral']}
|
50 |
+
|
51 |
return embedding.cpu().numpy().flatten(), emotion_dict
|
52 |
|
53 |
def alignFace(img):
|
|
|
283 |
progress(0.4, "Organizing faces")
|
284 |
organize_faces_by_person(embeddings_by_frame, clusters, aligned_faces_folder, organized_faces_folder)
|
285 |
|
286 |
+
progress(0.5, "Saving person data")
|
287 |
df, largest_cluster = save_person_data_to_csv(embeddings_by_frame, emotions_by_frame, clusters, desired_fps, original_fps, temp_dir, num_components)
|
288 |
|
289 |
progress(0.6, "Performing anomaly detection")
|