Update app.py
Browse files
app.py
CHANGED
@@ -331,16 +331,23 @@ def plot_emotion(df, emotion, num_anomalies, color):
|
|
331 |
plt.tight_layout()
|
332 |
return fig
|
333 |
|
334 |
-
|
|
|
|
|
335 |
person_folder = os.path.join(organized_faces_folder, f"person_{largest_cluster}")
|
336 |
face_files = [f for f in os.listdir(person_folder) if f.endswith('.jpg')]
|
337 |
if face_files:
|
338 |
random_face = np.random.choice(face_files)
|
339 |
face_path = os.path.join(person_folder, random_face)
|
340 |
-
|
|
|
|
|
341 |
return None
|
342 |
|
343 |
def process_video(video_path, num_anomalies, num_components, desired_fps, batch_size, progress=gr.Progress()):
|
|
|
|
|
|
|
344 |
with tempfile.TemporaryDirectory() as temp_dir:
|
345 |
aligned_faces_folder = os.path.join(temp_dir, 'aligned_faces')
|
346 |
organized_faces_folder = os.path.join(temp_dir, 'organized_faces')
|
@@ -396,8 +403,8 @@ def process_video(video_path, num_anomalies, num_components, desired_fps, batch_
|
|
396 |
return f"Error generating plots: {str(e)}", None, None, None, None, None, None
|
397 |
|
398 |
# Get a random face sample
|
399 |
-
face_sample = get_random_face_sample(organized_faces_folder, largest_cluster)
|
400 |
-
|
401 |
progress(1.0, "Preparing results")
|
402 |
results = f"Top {num_anomalies} anomalies (All Features):\n"
|
403 |
results += "\n".join([f"{score:.4f} at {timecode}" for score, timecode in
|
@@ -425,7 +432,7 @@ iface = gr.Interface(
|
|
425 |
],
|
426 |
outputs=[
|
427 |
gr.Textbox(label="Anomaly Detection Results"),
|
428 |
-
gr.Image(label="Random Face Sample of Most Frequent Person"),
|
429 |
gr.Plot(label="Anomaly Scores (All Features)"),
|
430 |
gr.Plot(label="Anomaly Scores (Components Only)"),
|
431 |
gr.Plot(label="Fear Scores"),
|
|
|
331 |
plt.tight_layout()
|
332 |
return fig
|
333 |
|
334 |
+
import base64
|
335 |
+
|
336 |
+
def get_random_face_sample(organized_faces_folder, largest_cluster, output_folder):
|
337 |
person_folder = os.path.join(organized_faces_folder, f"person_{largest_cluster}")
|
338 |
face_files = [f for f in os.listdir(person_folder) if f.endswith('.jpg')]
|
339 |
if face_files:
|
340 |
random_face = np.random.choice(face_files)
|
341 |
face_path = os.path.join(person_folder, random_face)
|
342 |
+
output_path = os.path.join(output_folder, "random_face_sample.jpg")
|
343 |
+
shutil.copy(face_path, output_path)
|
344 |
+
return output_path
|
345 |
return None
|
346 |
|
347 |
def process_video(video_path, num_anomalies, num_components, desired_fps, batch_size, progress=gr.Progress()):
|
348 |
+
output_folder = "output"
|
349 |
+
os.makedirs(output_folder, exist_ok=True)
|
350 |
+
|
351 |
with tempfile.TemporaryDirectory() as temp_dir:
|
352 |
aligned_faces_folder = os.path.join(temp_dir, 'aligned_faces')
|
353 |
organized_faces_folder = os.path.join(temp_dir, 'organized_faces')
|
|
|
403 |
return f"Error generating plots: {str(e)}", None, None, None, None, None, None
|
404 |
|
405 |
# Get a random face sample
|
406 |
+
face_sample = get_random_face_sample(organized_faces_folder, largest_cluster, output_folder)
|
407 |
+
|
408 |
progress(1.0, "Preparing results")
|
409 |
results = f"Top {num_anomalies} anomalies (All Features):\n"
|
410 |
results += "\n".join([f"{score:.4f} at {timecode}" for score, timecode in
|
|
|
432 |
],
|
433 |
outputs=[
|
434 |
gr.Textbox(label="Anomaly Detection Results"),
|
435 |
+
gr.Image(type="filepath", label="Random Face Sample of Most Frequent Person"),
|
436 |
gr.Plot(label="Anomaly Scores (All Features)"),
|
437 |
gr.Plot(label="Anomaly Scores (Components Only)"),
|
438 |
gr.Plot(label="Fear Scores"),
|