Update visualization.py
Browse files- visualization.py +10 -12
visualization.py
CHANGED
@@ -241,28 +241,26 @@ def create_video_with_heatmap(video_path, df, mse_embeddings, mse_posture, mse_v
|
|
241 |
mse_voice = np.interp(np.linspace(0, len(mse_voice) - 1, total_frames),
|
242 |
np.arange(len(mse_voice)), mse_voice)
|
243 |
|
|
|
244 |
mse_embeddings_norm = (mse_embeddings - np.min(mse_embeddings)) / (np.max(mse_embeddings) - np.min(mse_embeddings))
|
245 |
mse_posture_norm = (mse_posture - np.min(mse_posture)) / (np.max(mse_posture) - np.min(mse_posture))
|
246 |
mse_voice_norm = (mse_voice - np.min(mse_voice)) / (np.max(mse_voice) - np.min(mse_voice))
|
247 |
|
248 |
-
combined_mse = np.
|
249 |
combined_mse[0] = mse_embeddings_norm
|
250 |
combined_mse[1] = mse_posture_norm
|
251 |
combined_mse[2] = mse_voice_norm
|
252 |
|
|
|
253 |
cdict = {
|
254 |
-
'red': [(0.0, 0.0, 0.0),
|
255 |
-
|
256 |
-
'
|
257 |
-
(1.0, 0.0, 0.0)],
|
258 |
-
'blue': [(0.0, 1.0, 1.0),
|
259 |
-
(1.0, 0.0, 0.0)]
|
260 |
}
|
261 |
-
|
262 |
custom_cmap = LinearSegmentedColormap('custom_cmap', segmentdata=cdict, N=256)
|
263 |
|
264 |
fig, ax = plt.subplots(figsize=(width/100, 2))
|
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([])
|
@@ -273,7 +271,7 @@ def create_video_with_heatmap(video_path, df, mse_embeddings, mse_posture, mse_v
|
|
273 |
|
274 |
if hasattr(ax, 'line'):
|
275 |
ax.lines.pop(0)
|
276 |
-
ax.axvline(x=frame_count, color='
|
277 |
|
278 |
canvas = FigureCanvasAgg(fig)
|
279 |
canvas.draw()
|
@@ -304,8 +302,8 @@ def create_video_with_heatmap(video_path, df, mse_embeddings, mse_posture, mse_v
|
|
304 |
final_clip = VideoClip(combine_video_and_heatmap, duration=video.duration)
|
305 |
final_clip = final_clip.set_audio(video.audio)
|
306 |
|
307 |
-
# Write the final video
|
308 |
-
final_clip.write_videofile(heatmap_video_path, codec='libx264', audio_codec='aac', fps=video.fps)
|
309 |
|
310 |
# Close the video clips
|
311 |
video.close()
|
|
|
241 |
mse_voice = np.interp(np.linspace(0, len(mse_voice) - 1, total_frames),
|
242 |
np.arange(len(mse_voice)), mse_voice)
|
243 |
|
244 |
+
# Normalize the MSE values
|
245 |
mse_embeddings_norm = (mse_embeddings - np.min(mse_embeddings)) / (np.max(mse_embeddings) - np.min(mse_embeddings))
|
246 |
mse_posture_norm = (mse_posture - np.min(mse_posture)) / (np.max(mse_posture) - np.min(mse_posture))
|
247 |
mse_voice_norm = (mse_voice - np.min(mse_voice)) / (np.max(mse_voice) - np.min(mse_voice))
|
248 |
|
249 |
+
combined_mse = np.full((3, total_frames), np.nan)
|
250 |
combined_mse[0] = mse_embeddings_norm
|
251 |
combined_mse[1] = mse_posture_norm
|
252 |
combined_mse[2] = mse_voice_norm
|
253 |
|
254 |
+
# Create custom colormap
|
255 |
cdict = {
|
256 |
+
'red': [(0.0, 0.5, 0.5), (1.0, 1.0, 1.0)],
|
257 |
+
'green': [(0.0, 0.5, 0.5), (1.0, 0.0, 0.0)],
|
258 |
+
'blue': [(0.0, 0.5, 0.5), (1.0, 0.0, 0.0)],
|
|
|
|
|
|
|
259 |
}
|
|
|
260 |
custom_cmap = LinearSegmentedColormap('custom_cmap', segmentdata=cdict, N=256)
|
261 |
|
262 |
fig, ax = plt.subplots(figsize=(width/100, 2))
|
263 |
+
im = ax.imshow(combined_mse, aspect='auto', cmap=custom_cmap, extent=[0, total_frames, 0, 3], vmin=0, vmax=1)
|
264 |
ax.set_yticks([0.5, 1.5, 2.5])
|
265 |
ax.set_yticklabels(['Face', 'Posture', 'Voice'])
|
266 |
ax.set_xticks([])
|
|
|
271 |
|
272 |
if hasattr(ax, 'line'):
|
273 |
ax.lines.pop(0)
|
274 |
+
ax.axvline(x=frame_count, color='blue', linewidth=2)
|
275 |
|
276 |
canvas = FigureCanvasAgg(fig)
|
277 |
canvas.draw()
|
|
|
302 |
final_clip = VideoClip(combine_video_and_heatmap, duration=video.duration)
|
303 |
final_clip = final_clip.set_audio(video.audio)
|
304 |
|
305 |
+
# Write the final video with progress bar
|
306 |
+
final_clip.write_videofile(heatmap_video_path, codec='libx264', audio_codec='aac', fps=video.fps, progress_bar=progress)
|
307 |
|
308 |
# Close the video clips
|
309 |
video.close()
|