reab5555 commited on
Commit
c500bb3
·
verified ·
1 Parent(s): d05a31e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +62 -38
app.py CHANGED
@@ -2,10 +2,13 @@ import gradio as gr
2
  import time
3
  from video_processing import process_video
4
  from PIL import Image
5
- import matplotlib
 
 
6
 
7
- matplotlib.rcParams['figure.dpi'] = 300
8
- matplotlib.rcParams['savefig.dpi'] = 300
 
9
 
10
  def process_and_show_completion(video_input_path, anomaly_threshold_input, fps, progress=gr.Progress()):
11
  try:
@@ -33,14 +36,11 @@ def process_and_show_completion(video_input_path, anomaly_threshold_input, fps,
33
 
34
  output = [
35
  exec_time, results_summary,
36
- df, mse_embeddings, mse_posture, mse_voice,
37
  mse_plot_embeddings, mse_plot_posture, mse_plot_voice,
38
  mse_histogram_embeddings, mse_histogram_posture, mse_histogram_voice,
39
  mse_heatmap_embeddings, mse_heatmap_posture, mse_heatmap_voice,
40
  anomaly_faces_embeddings_pil, anomaly_frames_posture_pil,
41
  face_samples_frequent,
42
- aligned_faces_folder, frames_folder,
43
- mse_embeddings, mse_posture, mse_voice,
44
  heatmap_video_path, combined_mse_plot, correlation_heatmap
45
  ]
46
 
@@ -51,10 +51,32 @@ def process_and_show_completion(video_input_path, anomaly_threshold_input, fps,
51
  print(error_message)
52
  import traceback
53
  traceback.print_exc()
54
- return [error_message] + [None] * 27
55
 
56
- def show_results(outputs):
57
- return gr.Group(visible=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
 
59
  with gr.Blocks() as iface:
60
  gr.Markdown("""
@@ -71,10 +93,11 @@ with gr.Blocks() as iface:
71
  fps_slider = gr.Slider(minimum=5, maximum=20, step=1, value=10, label="Frames Per Second (FPS)")
72
  process_btn = gr.Button("Detect Anomalies")
73
  progress_bar = gr.Progress()
74
- execution_time = gr.Number(label="Execution Time (seconds)")
 
75
 
76
- with gr.Tabs():
77
- with gr.TabItem("Description"):
78
  with gr.Column():
79
  gr.Markdown("""
80
  # Multimodal Behavioral Anomalies Detection
@@ -90,10 +113,29 @@ with gr.Blocks() as iface:
90
  - Monitor and assess emotional states in communications.
91
  - Evaluate changes in vocal tone and speech patterns.
92
 
93
- ... (rest of the description content)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  """)
95
 
96
- with gr.TabItem("Results", visible=False) as results_group:
97
  with gr.Tabs():
98
  with gr.TabItem("Facial Features"):
99
  results_text = gr.TextArea(label="Faces Breakdown", lines=5)
@@ -119,37 +161,19 @@ with gr.Blocks() as iface:
119
  combined_mse_plot = gr.Plot(label="Combined MSE Plot")
120
  correlation_heatmap_plot = gr.Plot(label="Correlation Heatmap")
121
 
122
-
123
- df_store = gr.State()
124
- mse_features_store = gr.State()
125
- mse_posture_store = gr.State()
126
- mse_voice_store = gr.State()
127
- aligned_faces_folder_store = gr.State()
128
- frames_folder_store = gr.State()
129
- mse_heatmap_embeddings_store = gr.State()
130
- mse_heatmap_posture_store = gr.State()
131
- mse_heatmap_voice_store = gr.State()
132
-
133
  process_btn.click(
134
- process_and_show_completion,
135
  inputs=[video_input, anomaly_threshold, fps_slider],
136
  outputs=[
137
- execution_time, results_text, df_store,
138
- mse_features_store, mse_posture_store, mse_voice_store,
139
- mse_features_plot, mse_posture_plot, mse_voice_plot,
140
  mse_features_hist, mse_posture_hist, mse_voice_hist,
141
  mse_features_heatmap, mse_posture_heatmap, mse_voice_heatmap,
142
  anomaly_frames_features, anomaly_frames_posture,
143
- face_samples_most_frequent,
144
- aligned_faces_folder_store, frames_folder_store,
145
- mse_heatmap_embeddings_store, mse_heatmap_posture_store, mse_heatmap_voice_store,
146
- heatmap_video, combined_mse_plot, correlation_heatmap_plot
147
  ]
148
- ).then(
149
- show_results,
150
- inputs=None,
151
- outputs=results_group
152
  )
153
 
154
  if __name__ == "__main__":
155
- iface.launch()
 
2
  import time
3
  from video_processing import process_video
4
  from PIL import Image
5
+ import matplotlib.pyplot as plt
6
+ import numpy as np
7
+ import pandas as pd
8
 
9
+ # Ensure high DPI plots
10
+ plt.rcParams['figure.dpi'] = 300
11
+ plt.rcParams['savefig.dpi'] = 300
12
 
13
  def process_and_show_completion(video_input_path, anomaly_threshold_input, fps, progress=gr.Progress()):
14
  try:
 
36
 
37
  output = [
38
  exec_time, results_summary,
 
39
  mse_plot_embeddings, mse_plot_posture, mse_plot_voice,
40
  mse_histogram_embeddings, mse_histogram_posture, mse_histogram_voice,
41
  mse_heatmap_embeddings, mse_heatmap_posture, mse_heatmap_voice,
42
  anomaly_faces_embeddings_pil, anomaly_frames_posture_pil,
43
  face_samples_frequent,
 
 
44
  heatmap_video_path, combined_mse_plot, correlation_heatmap
45
  ]
46
 
 
51
  print(error_message)
52
  import traceback
53
  traceback.print_exc()
54
+ return [error_message] + [None] * 16
55
 
56
+ def on_button_click(video, threshold, fps):
57
+ results = process_and_show_completion(video, threshold, fps)
58
+
59
+ return {
60
+ execution_time: gr.update(visible=True, value=results[0]),
61
+ results_tab: gr.update(visible=True),
62
+ description_tab: gr.update(visible=False),
63
+ results_text: results[1],
64
+ mse_features_plot: results[2],
65
+ mse_posture_plot: results[3],
66
+ mse_voice_plot: results[4],
67
+ mse_features_hist: results[5],
68
+ mse_posture_hist: results[6],
69
+ mse_voice_hist: results[7],
70
+ mse_features_heatmap: results[8],
71
+ mse_posture_heatmap: results[9],
72
+ mse_voice_heatmap: results[10],
73
+ anomaly_frames_features: results[11],
74
+ anomaly_frames_posture: results[12],
75
+ face_samples_most_frequent: results[13],
76
+ heatmap_video: results[14],
77
+ combined_mse_plot: results[15],
78
+ correlation_heatmap_plot: results[16]
79
+ }
80
 
81
  with gr.Blocks() as iface:
82
  gr.Markdown("""
 
93
  fps_slider = gr.Slider(minimum=5, maximum=20, step=1, value=10, label="Frames Per Second (FPS)")
94
  process_btn = gr.Button("Detect Anomalies")
95
  progress_bar = gr.Progress()
96
+
97
+ execution_time = gr.Number(label="Execution Time (seconds)", visible=False)
98
 
99
+ with gr.Tabs() as tabs:
100
+ with gr.TabItem("Description", id="description_tab") as description_tab:
101
  with gr.Column():
102
  gr.Markdown("""
103
  # Multimodal Behavioral Anomalies Detection
 
113
  - Monitor and assess emotional states in communications.
114
  - Evaluate changes in vocal tone and speech patterns.
115
 
116
+ ## Features
117
+
118
+ - **Face Extraction**: Extracts faces from video frames using the MTCNN model.
119
+ - **Feature Embeddings**: Extracts facial feature embeddings using the InceptionResnetV1 model.
120
+ - **Body Posture Analysis**: Evaluates body postures using MediaPipe Pose.
121
+ - **Voice Analysis**: Extracts and segment speaker embeddings from audio using PyAnnote.
122
+ - **Anomaly Detection**: Uses Variational Autoencoder (VAE) to detect anomalies in facial expressions, body postures, and voice features over time.
123
+ - **Visualization**: Represents changes in facial expressions, body postures, and vocal tone over time, marking anomaly key points.
124
+
125
+ ## Limitations
126
+
127
+ - **Evaluation Challenges**: Since this is an unsupervised method, there is no labeled data to compare against.
128
+ - **Subjectivity**: The concept of what constitutes an "anomaly" can be subjective and context-dependent.
129
+ - **Lighting and Resolution**: Variability in lighting conditions and camera resolution can affect the quality of detected features.
130
+ - **Audio Quality**: Background noise and poor audio quality can affect the accuracy of voice analysis.
131
+ - **Generalization**: The model may not generalize well to all types of videos and contexts.
132
+ - **Computationally Intensive**: Processing high-resolution video frames can be computationally demanding.
133
+
134
+ ## Conclusion
135
+ This tool offers solutions for detecting behavioral anomalies in video content. However, users should be aware of its limitations and interpret results with caution.
136
  """)
137
 
138
+ with gr.TabItem("Results", id="results_tab", visible=False) as results_tab:
139
  with gr.Tabs():
140
  with gr.TabItem("Facial Features"):
141
  results_text = gr.TextArea(label="Faces Breakdown", lines=5)
 
161
  combined_mse_plot = gr.Plot(label="Combined MSE Plot")
162
  correlation_heatmap_plot = gr.Plot(label="Correlation Heatmap")
163
 
 
 
 
 
 
 
 
 
 
 
 
164
  process_btn.click(
165
+ fn=on_button_click,
166
  inputs=[video_input, anomaly_threshold, fps_slider],
167
  outputs=[
168
+ execution_time, results_tab, description_tab,
169
+ results_text, mse_features_plot, mse_posture_plot, mse_voice_plot,
 
170
  mse_features_hist, mse_posture_hist, mse_voice_hist,
171
  mse_features_heatmap, mse_posture_heatmap, mse_voice_heatmap,
172
  anomaly_frames_features, anomaly_frames_posture,
173
+ face_samples_most_frequent, heatmap_video, combined_mse_plot,
174
+ correlation_heatmap_plot
 
 
175
  ]
 
 
 
 
176
  )
177
 
178
  if __name__ == "__main__":
179
+ iface.launch()