Spaces:
Running
Running
File size: 5,991 Bytes
8c31b90 95312c3 8c31b90 df9abf4 95312c3 df9abf4 8c31b90 df9abf4 8c31b90 df9abf4 0d0ab89 95312c3 8c31b90 0d0ab89 df9abf4 8c31b90 0d0ab89 df9abf4 8c31b90 df9abf4 8c31b90 df9abf4 8c31b90 df9abf4 8c31b90 df9abf4 8c31b90 df9abf4 8c31b90 df9abf4 c103e03 0d0ab89 df9abf4 8c31b90 0d0ab89 c103e03 95312c3 0d0ab89 95312c3 c103e03 0d0ab89 c103e03 95312c3 0d0ab89 95312c3 c103e03 95312c3 0d0ab89 95312c3 0d0ab89 c103e03 95312c3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
import os
import subprocess
import streamlit as st
from utils import get_configs, get_display_names, get_path_for_viz, Layout
# st.header("EVREAL - Event-based Video Reconstruction Evaluation and Analysis Library")
#
# paper_link = "https://arxiv.org/abs/2305.00434"
# code_link = "https://github.com/ercanburak/EVREAL"
# page_link = "https://ercanburak.github.io/evreal.html"
# instructions_video = "https://www.youtube.com/watch?v="
#
# st.markdown("Paper: " + paper_link, unsafe_allow_html=True)
# st.markdown("Code: " + paper_link, unsafe_allow_html=True)
# st.markdown("Page: " + paper_link, unsafe_allow_html=True)
# st.markdown("Please see this video for instructions on how to use this tool: " + instructions_video, unsafe_allow_html=True)
st.title("Result Analysis Tool")
data_base_path = "/home/bercan/ebv/evreal_data"
font_path = "font/Ubuntu-B.ttf"
dataset_cfg_path = os.path.join("cfg", "dataset")
model_cfg_path = os.path.join("cfg", "model")
metric_cfg_path = os.path.join("cfg", "metric")
viz_cfg_path = os.path.join("cfg", "viz")
datasets = get_configs(dataset_cfg_path)
models = get_configs(model_cfg_path)
metrics = get_configs(metric_cfg_path)
visualizations = get_configs(viz_cfg_path)
dataset_display_names = get_display_names(datasets)
model_display_names = get_display_names(models)
metric_display_names = get_display_names(metrics)
viz_display_names = get_display_names(visualizations)
assert len(set(dataset_display_names)) == len(dataset_display_names), "Dataset display names are not unique"
assert len(set(model_display_names)) == len(model_display_names), "Model display names are not unique"
assert len(set(metric_display_names)) == len(metric_display_names), "Metric display names are not unique"
assert len(set(viz_display_names)) == len(viz_display_names), "Viz display names are not unique"
selected_model_names = st.multiselect('Select multiple methods to compare', model_display_names)
selected_models = [model for model in models if model['display_name'] in selected_model_names]
col1, col2 = st.columns(2)
with col1:
selected_dataset_name = st.selectbox('Select dataset', options=dataset_display_names)
selected_dataset = [dataset for dataset in datasets if dataset['display_name'] == selected_dataset_name][0]
with col2:
selected_sequence = st.selectbox('Select sequence', options=selected_dataset["sequences"].keys())
usable_metrics = [metric for metric in metrics if metric['no_ref'] == selected_dataset['no_ref']]
usable_metric_display_names = get_display_names(usable_metrics)
selected_metric_names = st.multiselect('Select metrics to display', usable_metric_display_names)
selected_metrics = [metric for metric in usable_metrics if metric['display_name'] in selected_metric_names]
if not selected_dataset['has_frames']:
usable_viz = [viz for viz in visualizations if viz['gt_type'] != 'frame']
else:
usable_viz = visualizations
usable_viz_display_names = get_display_names(usable_viz)
selected_viz = st.multiselect('Select other visualizations to display', usable_viz_display_names)
selected_visualizations = [viz for viz in visualizations if viz['display_name'] in selected_viz]
if not st.button('Get Results'):
st.stop()
gt_only_viz = [viz for viz in selected_visualizations if viz['viz_type'] == 'gt_only']
model_only_viz = [viz for viz in selected_visualizations if viz['viz_type'] == 'model_only']
both_viz = [viz for viz in selected_visualizations if viz['viz_type'] == 'both']
recon_viz = {"name": "recon", "display_name": "Reconstruction", "viz_type": "both", "gt_type": "frame"}
# ground_truth = {"name": "gt", "display_name": "Ground Truth", "model_id": "groundtruth"}
model_viz = [recon_viz] + both_viz + selected_metrics + model_only_viz
num_model_rows = len(model_viz)
gt_viz = []
if selected_dataset['has_frames']:
gt_viz.append(recon_viz)
gt_viz.extend([viz for viz in both_viz if viz['gt_type'] == 'frame'])
gt_viz.extend([viz for viz in gt_only_viz if viz['gt_type'] == 'frame'])
gt_viz.extend([viz for viz in both_viz if viz['gt_type'] == 'event'])
gt_viz.extend([viz for viz in gt_only_viz if viz['gt_type'] == 'event'])
# print(get_display_names(model_viz))
# print(get_display_names(gt_viz))
# st.stop()
num_gt_rows = len(gt_viz)
num_rows = max(num_model_rows, num_gt_rows)
num_model_columns = len(selected_models)
num_elements = num_rows * num_model_columns
layout = Layout(num_rows, num_model_columns)
layout_str = layout.get_layout_str()
video_paths = []
for row_idx in range(num_rows):
for col_idx in range(num_model_columns):
video_path = get_path_for_viz(data_base_path, selected_dataset, selected_sequence,
selected_models[col_idx], model_viz[row_idx])
print(video_path)
video_paths.append(video_path)
# if os.path.isfile(video_path):
# video_paths.append(video_path)
# else:
# print("Video path does not exist: " + video_path)
#
# assert len(video_paths) == num_elements, "Number of video paths is not equal to expected number of elements"
inputs_str = " ".join(["-i " + video_path for video_path in video_paths])
crop_str = "crop=trunc(iw/2)*2:trunc(ih/2)*2"
w = selected_dataset["width"]
input_scaling_parts = []
xstack_input_parts = []
for i in range(num_elements):
input_scaling_part = "[{}:v]scale={}:-1,{}[v{}]".format(i, w, crop_str, i)
input_scaling_parts.append(input_scaling_part)
xstack_input_part = "[v{}]".format(i)
xstack_input_parts.append(xstack_input_part)
input_scaling_str = ";".join(input_scaling_parts)
xstack_input_str = "".join(xstack_input_parts)
# opt = "-c:v libx264 -preset veryslow -crf 18 -c:a copy"
opt = ""
ffmpeg_command_str = "ffmpeg -y " + inputs_str + " -filter_complex \"" + input_scaling_str + ";" + xstack_input_str + "xstack=inputs=" + str(num_elements) + ":layout=" + layout_str + "\"" + opt + " output.mp4"
print(ffmpeg_command_str)
subprocess.call(ffmpeg_command_str, shell=True)
|