Update video_processing.py
Browse files- video_processing.py +1 -6
video_processing.py
CHANGED
@@ -22,7 +22,6 @@ mtcnn = MTCNN(keep_all=False, device=device, thresholds=[0.9, 0.9, 0.9], min_fac
|
|
22 |
mp_face_mesh = mp.solutions.face_mesh
|
23 |
face_mesh = mp_face_mesh.FaceMesh(static_image_mode=False, max_num_faces=1, min_detection_confidence=0.8)
|
24 |
|
25 |
-
|
26 |
def extract_frames(video_path, output_folder, desired_fps, progress_callback=None):
|
27 |
os.makedirs(output_folder, exist_ok=True)
|
28 |
clip = VideoFileClip(video_path)
|
@@ -45,7 +44,6 @@ def extract_frames(video_path, output_folder, desired_fps, progress_callback=Non
|
|
45 |
clip.close()
|
46 |
return frame_count, original_fps
|
47 |
|
48 |
-
|
49 |
def process_frames(frames_folder, aligned_faces_folder, frame_count, progress):
|
50 |
embeddings_by_frame = {}
|
51 |
posture_scores_by_frame = {}
|
@@ -89,7 +87,6 @@ def process_frames(frames_folder, aligned_faces_folder, frame_count, progress):
|
|
89 |
|
90 |
return embeddings_by_frame, posture_scores_by_frame, posture_landmarks_by_frame, aligned_face_paths, facial_landmarks_by_frame
|
91 |
|
92 |
-
|
93 |
def process_video(video_path, anomaly_threshold, desired_fps, progress=None):
|
94 |
start_time = time.time()
|
95 |
output_folder = "output"
|
@@ -182,6 +179,7 @@ def process_video(video_path, anomaly_threshold, desired_fps, progress=None):
|
|
182 |
progress(0.9, "Generating video with heatmap")
|
183 |
|
184 |
# Create video with heatmap
|
|
|
185 |
heatmap_video_path = create_video_with_heatmap(video_path, df, mse_embeddings, mse_posture, heatmap_video_path, desired_fps, largest_cluster)
|
186 |
|
187 |
except Exception as e:
|
@@ -254,7 +252,6 @@ def process_video(video_path, anomaly_threshold, desired_fps, progress=None):
|
|
254 |
heatmap_video_path
|
255 |
)
|
256 |
|
257 |
-
|
258 |
def is_frontal_face(landmarks, threshold=60):
|
259 |
nose_tip = landmarks[4]
|
260 |
left_chin = landmarks[234]
|
@@ -269,7 +266,6 @@ def is_frontal_face(landmarks, threshold=60):
|
|
269 |
angle_degrees = math.degrees(angle)
|
270 |
return abs(180 - angle_degrees) < threshold
|
271 |
|
272 |
-
|
273 |
def save_person_data_to_csv(embeddings_by_frame, clusters, desired_fps, original_fps, output_folder, video_duration):
|
274 |
person_data = {}
|
275 |
|
@@ -303,7 +299,6 @@ def save_person_data_to_csv(embeddings_by_frame, clusters, desired_fps, original
|
|
303 |
|
304 |
return df, largest_cluster
|
305 |
|
306 |
-
|
307 |
def get_all_face_samples(organized_faces_folder, output_folder, largest_cluster, max_samples=100):
|
308 |
face_samples = {"most_frequent": [], "others": []}
|
309 |
for cluster_folder in sorted(os.listdir(organized_faces_folder)):
|
|
|
22 |
mp_face_mesh = mp.solutions.face_mesh
|
23 |
face_mesh = mp_face_mesh.FaceMesh(static_image_mode=False, max_num_faces=1, min_detection_confidence=0.8)
|
24 |
|
|
|
25 |
def extract_frames(video_path, output_folder, desired_fps, progress_callback=None):
|
26 |
os.makedirs(output_folder, exist_ok=True)
|
27 |
clip = VideoFileClip(video_path)
|
|
|
44 |
clip.close()
|
45 |
return frame_count, original_fps
|
46 |
|
|
|
47 |
def process_frames(frames_folder, aligned_faces_folder, frame_count, progress):
|
48 |
embeddings_by_frame = {}
|
49 |
posture_scores_by_frame = {}
|
|
|
87 |
|
88 |
return embeddings_by_frame, posture_scores_by_frame, posture_landmarks_by_frame, aligned_face_paths, facial_landmarks_by_frame
|
89 |
|
|
|
90 |
def process_video(video_path, anomaly_threshold, desired_fps, progress=None):
|
91 |
start_time = time.time()
|
92 |
output_folder = "output"
|
|
|
179 |
progress(0.9, "Generating video with heatmap")
|
180 |
|
181 |
# Create video with heatmap
|
182 |
+
heatmap_video_path = os.path.join(output_folder, "heatmap_video.mp4")
|
183 |
heatmap_video_path = create_video_with_heatmap(video_path, df, mse_embeddings, mse_posture, heatmap_video_path, desired_fps, largest_cluster)
|
184 |
|
185 |
except Exception as e:
|
|
|
252 |
heatmap_video_path
|
253 |
)
|
254 |
|
|
|
255 |
def is_frontal_face(landmarks, threshold=60):
|
256 |
nose_tip = landmarks[4]
|
257 |
left_chin = landmarks[234]
|
|
|
266 |
angle_degrees = math.degrees(angle)
|
267 |
return abs(180 - angle_degrees) < threshold
|
268 |
|
|
|
269 |
def save_person_data_to_csv(embeddings_by_frame, clusters, desired_fps, original_fps, output_folder, video_duration):
|
270 |
person_data = {}
|
271 |
|
|
|
299 |
|
300 |
return df, largest_cluster
|
301 |
|
|
|
302 |
def get_all_face_samples(organized_faces_folder, output_folder, largest_cluster, max_samples=100):
|
303 |
face_samples = {"most_frequent": [], "others": []}
|
304 |
for cluster_folder in sorted(os.listdir(organized_faces_folder)):
|