Spaces:
Runtime error
Runtime error
Update visualization.py
Browse files- visualization.py +15 -20
visualization.py
CHANGED
|
@@ -208,7 +208,7 @@ def plot_posture(df, posture_scores, color='blue', anomaly_threshold=3):
|
|
| 208 |
return fig
|
| 209 |
|
| 210 |
|
| 211 |
-
def create_video_with_heatmap(video_path, df, mse_embeddings, mse_posture, mse_voice, output_path, desired_fps, largest_cluster):
|
| 212 |
# Filter the DataFrame to only include frames from the largest cluster
|
| 213 |
df_largest_cluster = df[df['Cluster'] == largest_cluster]
|
| 214 |
|
|
@@ -247,32 +247,30 @@ def create_video_with_heatmap(video_path, df, mse_embeddings, mse_posture, mse_v
|
|
| 247 |
combined_mse[0] = mse_embeddings_norm
|
| 248 |
combined_mse[1] = mse_posture_norm
|
| 249 |
combined_mse[2] = mse_voice_norm
|
| 250 |
-
|
| 251 |
# Custom colormap definition
|
| 252 |
cdict = {
|
| 253 |
-
'red': [(0.0, 0.
|
| 254 |
-
(1.0, 1.0, 1.0)],
|
| 255 |
-
'green': [(0.0, 0
|
| 256 |
-
(1.0, 0.0, 0.0)],
|
| 257 |
-
'blue': [(0.0, 0
|
| 258 |
-
(1.0, 0.0, 0.0)]
|
| 259 |
}
|
| 260 |
|
| 261 |
custom_cmap = LinearSegmentedColormap('custom_cmap', segmentdata=cdict, N=256)
|
| 262 |
|
| 263 |
fig, ax = plt.subplots(figsize=(width/100, 2))
|
| 264 |
-
# Use the custom colormap in the heatmap generation
|
| 265 |
im = ax.imshow(combined_mse, aspect='auto', cmap=custom_cmap, extent=[0, total_frames, 0, 3])
|
| 266 |
ax.set_yticks([0.5, 1.5, 2.5])
|
| 267 |
ax.set_yticklabels(['Face', 'Posture', 'Voice'])
|
| 268 |
ax.set_xticks([])
|
| 269 |
plt.tight_layout()
|
| 270 |
|
|
|
|
|
|
|
|
|
|
| 271 |
line = None
|
| 272 |
-
|
| 273 |
-
# Add progress tracking
|
| 274 |
-
progress(0.9, desc="Generating video with heatmap")
|
| 275 |
-
|
| 276 |
for frame_count in range(total_frames):
|
| 277 |
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_count)
|
| 278 |
ret, frame = cap.read()
|
|
@@ -281,7 +279,7 @@ def create_video_with_heatmap(video_path, df, mse_embeddings, mse_posture, mse_v
|
|
| 281 |
|
| 282 |
if line:
|
| 283 |
line.remove()
|
| 284 |
-
line = ax.axvline(x=frame_count, color='
|
| 285 |
|
| 286 |
canvas = FigureCanvasAgg(fig)
|
| 287 |
canvas.draw()
|
|
@@ -289,9 +287,6 @@ def create_video_with_heatmap(video_path, df, mse_embeddings, mse_posture, mse_v
|
|
| 289 |
heatmap_img = heatmap_img.reshape(canvas.get_width_height()[::-1] + (3,))
|
| 290 |
heatmap_img = cv2.resize(heatmap_img, (width, 200))
|
| 291 |
|
| 292 |
-
# Convert heatmap_img from RGB to BGR
|
| 293 |
-
heatmap_img = cv2.cvtColor(heatmap_img, cv2.COLOR_RGB2BGR)
|
| 294 |
-
|
| 295 |
combined_frame = np.vstack((frame, heatmap_img))
|
| 296 |
|
| 297 |
seconds = frame_count / original_fps
|
|
@@ -299,9 +294,9 @@ def create_video_with_heatmap(video_path, df, mse_embeddings, mse_posture, mse_v
|
|
| 299 |
cv2.putText(combined_frame, f"Time: {timecode}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
|
| 300 |
|
| 301 |
out.write(combined_frame)
|
| 302 |
-
|
| 303 |
-
|
| 304 |
-
|
| 305 |
|
| 306 |
cap.release()
|
| 307 |
out.release()
|
|
|
|
| 208 |
return fig
|
| 209 |
|
| 210 |
|
| 211 |
+
def create_video_with_heatmap(video_path, df, mse_embeddings, mse_posture, mse_voice, output_path, desired_fps, largest_cluster, progress=None):
|
| 212 |
# Filter the DataFrame to only include frames from the largest cluster
|
| 213 |
df_largest_cluster = df[df['Cluster'] == largest_cluster]
|
| 214 |
|
|
|
|
| 247 |
combined_mse[0] = mse_embeddings_norm
|
| 248 |
combined_mse[1] = mse_posture_norm
|
| 249 |
combined_mse[2] = mse_voice_norm
|
| 250 |
+
|
| 251 |
# Custom colormap definition
|
| 252 |
cdict = {
|
| 253 |
+
'red': [(0.0, 0.0, 0.0),
|
| 254 |
+
(1.0, 1.0, 1.0)],
|
| 255 |
+
'green': [(0.0, 1.0, 1.0),
|
| 256 |
+
(1.0, 0.0, 0.0)],
|
| 257 |
+
'blue': [(0.0, 1.0, 1.0),
|
| 258 |
+
(1.0, 0.0, 0.0)]
|
| 259 |
}
|
| 260 |
|
| 261 |
custom_cmap = LinearSegmentedColormap('custom_cmap', segmentdata=cdict, N=256)
|
| 262 |
|
| 263 |
fig, ax = plt.subplots(figsize=(width/100, 2))
|
|
|
|
| 264 |
im = ax.imshow(combined_mse, aspect='auto', cmap=custom_cmap, extent=[0, total_frames, 0, 3])
|
| 265 |
ax.set_yticks([0.5, 1.5, 2.5])
|
| 266 |
ax.set_yticklabels(['Face', 'Posture', 'Voice'])
|
| 267 |
ax.set_xticks([])
|
| 268 |
plt.tight_layout()
|
| 269 |
|
| 270 |
+
if progress:
|
| 271 |
+
progress(0, desc="Generating video with heatmap")
|
| 272 |
+
|
| 273 |
line = None
|
|
|
|
|
|
|
|
|
|
|
|
|
| 274 |
for frame_count in range(total_frames):
|
| 275 |
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_count)
|
| 276 |
ret, frame = cap.read()
|
|
|
|
| 279 |
|
| 280 |
if line:
|
| 281 |
line.remove()
|
| 282 |
+
line = ax.axvline(x=frame_count, color='r', linewidth=2)
|
| 283 |
|
| 284 |
canvas = FigureCanvasAgg(fig)
|
| 285 |
canvas.draw()
|
|
|
|
| 287 |
heatmap_img = heatmap_img.reshape(canvas.get_width_height()[::-1] + (3,))
|
| 288 |
heatmap_img = cv2.resize(heatmap_img, (width, 200))
|
| 289 |
|
|
|
|
|
|
|
|
|
|
| 290 |
combined_frame = np.vstack((frame, heatmap_img))
|
| 291 |
|
| 292 |
seconds = frame_count / original_fps
|
|
|
|
| 294 |
cv2.putText(combined_frame, f"Time: {timecode}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
|
| 295 |
|
| 296 |
out.write(combined_frame)
|
| 297 |
+
|
| 298 |
+
if progress:
|
| 299 |
+
progress((frame_count + 1) / total_frames, desc="Generating video with heatmap")
|
| 300 |
|
| 301 |
cap.release()
|
| 302 |
out.release()
|