Spaces:
Running
on
Zero
Running
on
Zero
add image profile
Browse files
app.py
CHANGED
@@ -1,8 +1,10 @@
|
|
1 |
# Author: Huzheng Yang
|
2 |
# %%
|
3 |
import copy
|
|
|
4 |
from functools import partial
|
5 |
from io import BytesIO
|
|
|
6 |
import os
|
7 |
import uuid
|
8 |
|
@@ -1152,14 +1154,6 @@ def run_fn(
|
|
1152 |
raise gr.Error(message, duration=0)
|
1153 |
|
1154 |
|
1155 |
-
|
1156 |
-
def make_input_images_section(rows=1, cols=3, height="auto"):
|
1157 |
-
gr.Markdown('### Input Images')
|
1158 |
-
input_gallery = gr.Gallery(value=None, label="Select images", show_label=True, elem_id="images", columns=[cols], rows=[rows], object_fit="contain", height=height, type="pil", show_share_button=False)
|
1159 |
-
submit_button = gr.Button("🔴 RUN", elem_id="submit_button", variant='primary')
|
1160 |
-
clear_images_button = gr.Button("🗑️Clear", elem_id='clear_button', variant='stop')
|
1161 |
-
return input_gallery, submit_button, clear_images_button
|
1162 |
-
|
1163 |
def make_input_video_section():
|
1164 |
# gr.Markdown('### Input Video')
|
1165 |
input_gallery = gr.Video(value=None, label="Select video", elem_id="video-input", height="auto", show_share_button=False, interactive=True)
|
@@ -1170,8 +1164,33 @@ def make_input_video_section():
|
|
1170 |
clear_images_button = gr.Button("🗑️Clear", elem_id='clear_button', variant='stop')
|
1171 |
return input_gallery, submit_button, clear_images_button, max_frames_number
|
1172 |
|
1173 |
-
def make_dataset_images_section(advanced=False, is_random=False):
|
1174 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1175 |
gr.Markdown('### Load Datasets')
|
1176 |
load_images_button = gr.Button("🔴 Load Images", elem_id="load-images-button", variant='primary')
|
1177 |
advanced_radio = gr.Radio(["Basic", "Advanced"], label="Datasets", value="Advanced" if advanced else "Basic", elem_id="advanced-radio", show_label=True)
|
@@ -1204,7 +1223,67 @@ def make_dataset_images_section(advanced=False, is_random=False):
|
|
1204 |
filter_by_class_text = gr.Textbox(label="Class to select", value="0,33,99", elem_id="filter_by_class_text", info=f"e.g. `0,1,2`. (1000 classes)", visible=False)
|
1205 |
is_random_checkbox = gr.Checkbox(label="Random shuffle", value=True, elem_id="random_seed_checkbox")
|
1206 |
random_seed_slider = gr.Slider(0, 1000, step=1, label="Random seed", value=42, elem_id="random_seed", visible=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1207 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1208 |
|
1209 |
if advanced:
|
1210 |
advanced_block.visible = True
|
@@ -1259,8 +1338,7 @@ def make_dataset_images_section(advanced=False, is_random=False):
|
|
1259 |
key = list(dataset.keys())[0]
|
1260 |
dataset = dataset[key]
|
1261 |
except Exception as e:
|
1262 |
-
gr.Error(f"Error loading dataset {dataset_name}: {e}")
|
1263 |
-
return None
|
1264 |
if num_images > len(dataset):
|
1265 |
num_images = len(dataset)
|
1266 |
|
@@ -1310,15 +1388,188 @@ def make_dataset_images_section(advanced=False, is_random=False):
|
|
1310 |
return img
|
1311 |
images = [center_crop_image(image) for image in images]
|
1312 |
|
1313 |
-
return images
|
1314 |
-
|
1315 |
-
|
1316 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1317 |
filter_by_class_checkbox, filter_by_class_text,
|
1318 |
is_random_checkbox, random_seed_slider],
|
1319 |
outputs=[input_gallery])
|
1320 |
|
1321 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1322 |
|
1323 |
|
1324 |
# def random_rotate_rgb_gallery(images):
|
@@ -1501,8 +1752,7 @@ with demo:
|
|
1501 |
|
1502 |
with gr.Row():
|
1503 |
with gr.Column(scale=5, min_width=200):
|
1504 |
-
input_gallery, submit_button, clear_images_button = make_input_images_section()
|
1505 |
-
dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_dataset_images_section()
|
1506 |
num_images_slider.value = 30
|
1507 |
logging_text = gr.Textbox("Logging information", label="Logging", elem_id="logging", type="text", placeholder="Logging information", autofocus=False, autoscroll=False)
|
1508 |
|
@@ -1516,10 +1766,7 @@ with demo:
|
|
1516 |
perplexity_slider, n_neighbors_slider, min_dist_slider,
|
1517 |
sampling_method_dropdown, ncut_metric_dropdown, positive_prompt, negative_prompt
|
1518 |
] = make_parameters_section()
|
1519 |
-
num_eig_slider.value = 30
|
1520 |
|
1521 |
-
clear_images_button.click(lambda x: ([], [], []), outputs=[input_gallery, output_gallery, cluster_gallery])
|
1522 |
-
|
1523 |
false_placeholder = gr.Checkbox(label="False", value=False, elem_id="false_placeholder", visible=False)
|
1524 |
no_prompt = gr.Textbox("", label="", elem_id="empty_placeholder", type="text", placeholder="", visible=False)
|
1525 |
|
@@ -1542,8 +1789,7 @@ with demo:
|
|
1542 |
|
1543 |
with gr.Row():
|
1544 |
with gr.Column(scale=5, min_width=200):
|
1545 |
-
input_gallery, submit_button, clear_images_button = make_input_images_section()
|
1546 |
-
dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_dataset_images_section()
|
1547 |
num_images_slider.value = 30
|
1548 |
logging_text = gr.Textbox("Logging information", label="Logging", elem_id="logging", type="text", placeholder="Logging information", autofocus=False, autoscroll=False, lines=20)
|
1549 |
|
@@ -1559,8 +1805,6 @@ with demo:
|
|
1559 |
sampling_method_dropdown, ncut_metric_dropdown, positive_prompt, negative_prompt
|
1560 |
] = make_parameters_section()
|
1561 |
num_eig_slider.value = 30
|
1562 |
-
|
1563 |
-
clear_images_button.click(lambda x: ([], [], [], []), outputs=[input_gallery, output_gallery, cluster_gallery, norm_gallery])
|
1564 |
|
1565 |
false_placeholder = gr.Checkbox(label="False", value=False, elem_id="false_placeholder", visible=False)
|
1566 |
no_prompt = gr.Textbox("", label="", elem_id="empty_placeholder", type="text", placeholder="", visible=False)
|
@@ -1604,8 +1848,7 @@ with demo:
|
|
1604 |
|
1605 |
with gr.Row():
|
1606 |
with gr.Column(scale=5, min_width=200):
|
1607 |
-
input_gallery, submit_button, clear_images_button = make_input_images_section()
|
1608 |
-
dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_dataset_images_section()
|
1609 |
|
1610 |
with gr.Column(scale=5, min_width=200):
|
1611 |
output_gallery = make_output_images_section()
|
@@ -1624,7 +1867,6 @@ with demo:
|
|
1624 |
# logging text box
|
1625 |
logging_text = gr.Textbox("Logging information", label="Logging", elem_id="logging", type="text", placeholder="Logging information")
|
1626 |
|
1627 |
-
clear_images_button.click(lambda x: ([], []), outputs=[input_gallery, output_gallery])
|
1628 |
false_placeholder = gr.Checkbox(label="False", value=False, elem_id="false_placeholder", visible=False)
|
1629 |
no_prompt = gr.Textbox("", label="", elem_id="empty_placeholder", type="text", placeholder="", visible=False)
|
1630 |
|
@@ -1651,8 +1893,7 @@ with demo:
|
|
1651 |
|
1652 |
with gr.Row():
|
1653 |
with gr.Column(scale=5, min_width=200):
|
1654 |
-
input_gallery, submit_button, clear_images_button = make_input_images_section()
|
1655 |
-
dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_dataset_images_section(advanced=True)
|
1656 |
num_images_slider.value = 100
|
1657 |
clear_images_button.visible = False
|
1658 |
logging_text = gr.Textbox("Logging information", label="Logging", elem_id="logging", type="text", placeholder="Logging information")
|
@@ -1695,7 +1936,6 @@ with demo:
|
|
1695 |
false_placeholder.visible = False
|
1696 |
number_placeholder = gr.Number(0, label="Number placeholder", elem_id="number_placeholder")
|
1697 |
number_placeholder.visible = False
|
1698 |
-
clear_images_button.click(lambda x: ([],), outputs=[input_gallery])
|
1699 |
no_prompt = gr.Textbox("", label="", elem_id="empty_placeholder", type="text", placeholder="", visible=False)
|
1700 |
|
1701 |
submit_button.click(
|
@@ -1719,8 +1959,7 @@ with demo:
|
|
1719 |
|
1720 |
with gr.Row():
|
1721 |
with gr.Column(scale=5, min_width=200):
|
1722 |
-
input_gallery, submit_button, clear_images_button
|
1723 |
-
dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_dataset_images_section(advanced=True)
|
1724 |
num_images_slider.value = 100
|
1725 |
clear_images_button.visible = False
|
1726 |
logging_text = gr.Textbox("Logging information", label="Logging", elem_id="logging", type="text", placeholder="Logging information", lines=20)
|
@@ -1769,7 +2008,6 @@ with demo:
|
|
1769 |
false_placeholder.visible = False
|
1770 |
number_placeholder = gr.Number(0, label="Number placeholder", elem_id="number_placeholder")
|
1771 |
number_placeholder.visible = False
|
1772 |
-
clear_images_button.click(lambda x: ([],), outputs=[input_gallery])
|
1773 |
no_prompt = gr.Textbox("", label="", elem_id="empty_placeholder", type="text", placeholder="", visible=False)
|
1774 |
|
1775 |
submit_button.click(
|
@@ -1859,9 +2097,7 @@ with demo:
|
|
1859 |
|
1860 |
with gr.Row():
|
1861 |
with gr.Column(scale=5, min_width=200):
|
1862 |
-
input_gallery, submit_button, clear_images_button = make_input_images_section()
|
1863 |
-
dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_dataset_images_section(advanced=False)
|
1864 |
-
clear_images_button.click(lambda x: ([], [], [], []), outputs=[input_gallery, l1_gallery, l2_gallery, l3_gallery])
|
1865 |
|
1866 |
with gr.Column(scale=5, min_width=200):
|
1867 |
[
|
@@ -1898,8 +2134,7 @@ with demo:
|
|
1898 |
gr.Markdown('---')
|
1899 |
with gr.Row():
|
1900 |
with gr.Column(scale=5, min_width=200):
|
1901 |
-
input_gallery, submit_button, clear_images_button = make_input_images_section()
|
1902 |
-
dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_dataset_images_section(advanced=True, is_random=True)
|
1903 |
num_images_slider.value = 100
|
1904 |
|
1905 |
|
@@ -1926,9 +2161,7 @@ with demo:
|
|
1926 |
num_sample_tsne_slider.value = 1000
|
1927 |
# logging text box
|
1928 |
logging_text = gr.Textbox("Logging information", label="Logging", elem_id="logging", type="text", placeholder="Logging information")
|
1929 |
-
|
1930 |
-
clear_images_button.click(lambda x: ([], []), outputs=[input_gallery, output_gallery])
|
1931 |
-
|
1932 |
false_placeholder = gr.Checkbox(label="False", value=False, elem_id="false_placeholder", visible=False)
|
1933 |
no_prompt = gr.Textbox("", label="", elem_id="empty_placeholder", type="text", placeholder="", visible=False)
|
1934 |
|
@@ -1980,8 +2213,7 @@ with demo:
|
|
1980 |
|
1981 |
with gr.Row():
|
1982 |
with gr.Column(scale=5, min_width=200):
|
1983 |
-
input_gallery, submit_button, clear_images_button = make_input_images_section()
|
1984 |
-
dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_dataset_images_section(advanced=True, is_random=True)
|
1985 |
num_images_slider.value = 100
|
1986 |
|
1987 |
|
@@ -2014,9 +2246,7 @@ with demo:
|
|
2014 |
num_sample_tsne_slider.value = 1000
|
2015 |
# logging text box
|
2016 |
logging_text = gr.Textbox("Logging information", label="Logging", elem_id="logging", type="text", placeholder="Logging information")
|
2017 |
-
|
2018 |
-
clear_images_button.click(lambda x: ([],), outputs=[input_gallery])
|
2019 |
-
|
2020 |
true_placeholder = gr.Checkbox(label="True placeholder", value=True, elem_id="true_placeholder")
|
2021 |
true_placeholder.visible = False
|
2022 |
false_placeholder = gr.Checkbox(label="False placeholder", value=False, elem_id="false_placeholder")
|
@@ -2078,10 +2308,8 @@ with demo:
|
|
2078 |
|
2079 |
with gr.Row():
|
2080 |
with gr.Column(scale=5, min_width=200):
|
2081 |
-
input_gallery, submit_button, clear_images_button = make_input_images_section()
|
2082 |
-
clear_images_button.click(lambda x: [], outputs=[input_gallery])
|
2083 |
submit_button.visible = False
|
2084 |
-
dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_dataset_images_section(advanced=True)
|
2085 |
|
2086 |
|
2087 |
for i in range(3):
|
@@ -2153,10 +2381,8 @@ with demo:
|
|
2153 |
|
2154 |
with gr.Row():
|
2155 |
with gr.Column(scale=5, min_width=200):
|
2156 |
-
input_gallery, submit_button, clear_images_button = make_input_images_section()
|
2157 |
-
clear_images_button.click(lambda x: [], outputs=[input_gallery])
|
2158 |
submit_button.visible = False
|
2159 |
-
dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_dataset_images_section(advanced=True)
|
2160 |
|
2161 |
|
2162 |
for i in range(3):
|
|
|
1 |
# Author: Huzheng Yang
|
2 |
# %%
|
3 |
import copy
|
4 |
+
import pickle
|
5 |
from functools import partial
|
6 |
from io import BytesIO
|
7 |
+
import json
|
8 |
import os
|
9 |
import uuid
|
10 |
|
|
|
1154 |
raise gr.Error(message, duration=0)
|
1155 |
|
1156 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1157 |
def make_input_video_section():
|
1158 |
# gr.Markdown('### Input Video')
|
1159 |
input_gallery = gr.Video(value=None, label="Select video", elem_id="video-input", height="auto", show_share_button=False, interactive=True)
|
|
|
1164 |
clear_images_button = gr.Button("🗑️Clear", elem_id='clear_button', variant='stop')
|
1165 |
return input_gallery, submit_button, clear_images_button, max_frames_number
|
1166 |
|
|
|
1167 |
|
1168 |
+
def make_input_images_section(rows=1, cols=3, height="auto", advanced=False, is_random=False):
|
1169 |
+
gr.Markdown('### Input Images')
|
1170 |
+
input_gallery = gr.Gallery(value=None, label="Input images", show_label=True, elem_id="input_images", columns=[cols], rows=[rows], object_fit="contain", height=height, type="pil", show_share_button=False)
|
1171 |
+
|
1172 |
+
submit_button = gr.Button("🔴 RUN", elem_id="submit_button", variant='primary')
|
1173 |
+
with gr.Row():
|
1174 |
+
clear_images_button = gr.Button("🗑️Clear", elem_id='clear_button', variant='stop')
|
1175 |
+
clear_images_button.click(fn=lambda: gr.update(value=None), outputs=[input_gallery])
|
1176 |
+
upload_button = gr.UploadButton(elem_id="upload_button", label="⬆️Upload", variant='secondary', file_types=["image"], file_count="multiple")
|
1177 |
+
|
1178 |
+
def convert_to_pil_and_append(images, new_images):
|
1179 |
+
if images is None:
|
1180 |
+
images = []
|
1181 |
+
if new_images is None:
|
1182 |
+
return images
|
1183 |
+
if isinstance(new_images, Image.Image):
|
1184 |
+
images.append(new_images)
|
1185 |
+
if isinstance(new_images, list):
|
1186 |
+
images += [Image.open(new_image) for new_image in new_images]
|
1187 |
+
if isinstance(new_images, str):
|
1188 |
+
images.append(Image.open(new_images))
|
1189 |
+
new_images = None
|
1190 |
+
return images
|
1191 |
+
upload_button.upload(convert_to_pil_and_append, inputs=[input_gallery, upload_button], outputs=[input_gallery])
|
1192 |
+
|
1193 |
+
|
1194 |
gr.Markdown('### Load Datasets')
|
1195 |
load_images_button = gr.Button("🔴 Load Images", elem_id="load-images-button", variant='primary')
|
1196 |
advanced_radio = gr.Radio(["Basic", "Advanced"], label="Datasets", value="Advanced" if advanced else "Basic", elem_id="advanced-radio", show_label=True)
|
|
|
1223 |
filter_by_class_text = gr.Textbox(label="Class to select", value="0,33,99", elem_id="filter_by_class_text", info=f"e.g. `0,1,2`. (1000 classes)", visible=False)
|
1224 |
is_random_checkbox = gr.Checkbox(label="Random shuffle", value=True, elem_id="random_seed_checkbox")
|
1225 |
random_seed_slider = gr.Slider(0, 1000, step=1, label="Random seed", value=42, elem_id="random_seed", visible=True)
|
1226 |
+
|
1227 |
+
# add functionality, save and load images to profile
|
1228 |
+
with gr.Accordion("Saved Image Profiles", open=False) as profile_accordion:
|
1229 |
+
with gr.Row():
|
1230 |
+
profile_text = gr.Textbox(label="Profile name", placeholder="Type here: Profile name to save/load/delete", elem_id="profile-name", scale=6, show_label=False)
|
1231 |
+
list_profiles_button = gr.Button("📋 List", elem_id="list-profile-button", variant='secondary', scale=3)
|
1232 |
+
with gr.Row():
|
1233 |
+
save_profile_button = gr.Button("💾 Save", elem_id="save-profile-button", variant='secondary')
|
1234 |
+
load_profile_button = gr.Button("📂 Load", elem_id="load-profile-button", variant='secondary')
|
1235 |
+
delete_profile_button = gr.Button("🗑️ Delete", elem_id="delete-profile-button", variant='secondary')
|
1236 |
+
|
1237 |
+
class OnDiskProfiles:
|
1238 |
+
def __init__(self, profile_dir="demo_profiles"):
|
1239 |
+
if not os.path.exists(profile_dir):
|
1240 |
+
os.makedirs(profile_dir)
|
1241 |
+
self.profile_dir = profile_dir
|
1242 |
+
|
1243 |
+
def list_profiles(self):
|
1244 |
+
profiles = os.listdir(self.profile_dir)
|
1245 |
+
# remove hidden files
|
1246 |
+
profiles = [p for p in profiles if not p.startswith(".")]
|
1247 |
+
if len(profiles) == 0:
|
1248 |
+
return "No profiles found."
|
1249 |
+
profile_text = "</br>".join(profiles)
|
1250 |
+
n_files = len(profiles)
|
1251 |
+
profile_text = f"Number of profiles: {n_files}</br>---------</br>" + profile_text
|
1252 |
+
return profile_text
|
1253 |
+
|
1254 |
+
def save_profile(self, profile_name, images):
|
1255 |
+
profile_path = os.path.join(self.profile_dir, profile_name)
|
1256 |
+
if os.path.exists(profile_path):
|
1257 |
+
raise gr.Error(f"Profile {profile_name} already exists.")
|
1258 |
+
with open(profile_path, "wb") as f:
|
1259 |
+
pickle.dump(images, f)
|
1260 |
+
gr.Info(f"Profile {profile_name} saved.")
|
1261 |
+
return profile_path
|
1262 |
|
1263 |
+
def load_profile(self, profile_name):
|
1264 |
+
profile_path = os.path.join(self.profile_dir, profile_name)
|
1265 |
+
if not os.path.exists(profile_path):
|
1266 |
+
raise gr.Error(f"Profile {profile_name} not found.")
|
1267 |
+
with open(profile_path, "rb") as f:
|
1268 |
+
images = pickle.load(f)
|
1269 |
+
gr.Info(f"Profile {profile_name} loaded.")
|
1270 |
+
return images
|
1271 |
+
|
1272 |
+
def delete_profile(self, profile_name):
|
1273 |
+
profile_path = os.path.join(self.profile_dir, profile_name)
|
1274 |
+
os.remove(profile_path)
|
1275 |
+
gr.Info(f"Profile {profile_name} deleted.")
|
1276 |
+
return profile_path
|
1277 |
+
|
1278 |
+
home_dir = os.path.expanduser("~")
|
1279 |
+
defualt_dir = os.path.join(home_dir, ".cache")
|
1280 |
+
cache_dir = os.environ.get("DEMO_PROFILE_CACHE_DIR", defualt_dir)
|
1281 |
+
cache_dir = os.path.join(cache_dir, "demo_profiles")
|
1282 |
+
on_disk_profiles = OnDiskProfiles(cache_dir)
|
1283 |
+
save_profile_button.click(fn=lambda name, images: on_disk_profiles.save_profile(name, images), inputs=[profile_text, input_gallery])
|
1284 |
+
load_profile_button.click(fn=lambda name: gr.update(value=on_disk_profiles.load_profile(name)), inputs=profile_text, outputs=[input_gallery])
|
1285 |
+
delete_profile_button.click(fn=lambda name: on_disk_profiles.delete_profile(name), inputs=profile_text)
|
1286 |
+
list_profiles_button.click(fn=lambda: gr.Info(on_disk_profiles.list_profiles(), duration=0))
|
1287 |
|
1288 |
if advanced:
|
1289 |
advanced_block.visible = True
|
|
|
1338 |
key = list(dataset.keys())[0]
|
1339 |
dataset = dataset[key]
|
1340 |
except Exception as e:
|
1341 |
+
raise gr.Error(f"Error loading dataset {dataset_name}: {e}")
|
|
|
1342 |
if num_images > len(dataset):
|
1343 |
num_images = len(dataset)
|
1344 |
|
|
|
1388 |
return img
|
1389 |
images = [center_crop_image(image) for image in images]
|
1390 |
|
1391 |
+
return images
|
1392 |
+
|
1393 |
+
def load_and_append(existing_images, *args, **kwargs):
|
1394 |
+
new_images = load_dataset_images(*args, **kwargs)
|
1395 |
+
if new_images is None:
|
1396 |
+
return existing_images
|
1397 |
+
if len(new_images) == 0:
|
1398 |
+
return existing_images
|
1399 |
+
if existing_images is None:
|
1400 |
+
existing_images = []
|
1401 |
+
existing_images += new_images
|
1402 |
+
return existing_images
|
1403 |
+
|
1404 |
+
load_images_button.click(load_and_append,
|
1405 |
+
inputs=[input_gallery, advanced_radio, dataset_dropdown, num_images_slider,
|
1406 |
filter_by_class_checkbox, filter_by_class_text,
|
1407 |
is_random_checkbox, random_seed_slider],
|
1408 |
outputs=[input_gallery])
|
1409 |
|
1410 |
+
|
1411 |
+
|
1412 |
+
return input_gallery, submit_button, clear_images_button, dataset_dropdown, num_images_slider, random_seed_slider, load_images_button
|
1413 |
+
|
1414 |
+
|
1415 |
+
|
1416 |
+
# def make_input_images_section(rows=1, cols=3, height="auto"):
|
1417 |
+
# gr.Markdown('### Input Images')
|
1418 |
+
# input_gallery = gr.Gallery(value=None, label="Select images", show_label=True, elem_id="images", columns=[cols], rows=[rows], object_fit="contain", height=height, type="pil", show_share_button=False)
|
1419 |
+
# submit_button = gr.Button("🔴 RUN", elem_id="submit_button", variant='primary')
|
1420 |
+
# clear_images_button = gr.Button("🗑️Clear", elem_id='clear_button', variant='stop')
|
1421 |
+
# return input_gallery, submit_button, clear_images_button
|
1422 |
+
|
1423 |
+
|
1424 |
+
# def make_dataset_images_section(advanced=False, is_random=False):
|
1425 |
+
|
1426 |
+
# gr.Markdown('### Load Datasets')
|
1427 |
+
# load_images_button = gr.Button("🔴 Load Images", elem_id="load-images-button", variant='primary')
|
1428 |
+
# advanced_radio = gr.Radio(["Basic", "Advanced"], label="Datasets", value="Advanced" if advanced else "Basic", elem_id="advanced-radio", show_label=True)
|
1429 |
+
# with gr.Column() as basic_block:
|
1430 |
+
# example_gallery = gr.Gallery(value=example_items, label="Example Images", show_label=True, columns=[3], rows=[2], object_fit="scale-down", height="200px", show_share_button=False, elem_id="example-gallery")
|
1431 |
+
# with gr.Column() as advanced_block:
|
1432 |
+
# # dataset_names = DATASET_NAMES
|
1433 |
+
# # dataset_classes = DATASET_CLASSES
|
1434 |
+
# dataset_categories = list(DATASETS.keys())
|
1435 |
+
# defualt_cat = dataset_categories[0]
|
1436 |
+
# def get_choices(cat):
|
1437 |
+
# return [tup[0] for tup in DATASETS[cat]]
|
1438 |
+
# defualt_choices = get_choices(defualt_cat)
|
1439 |
+
# with gr.Row():
|
1440 |
+
# dataset_radio = gr.Radio(dataset_categories, label="Dataset Category", value=defualt_cat, elem_id="dataset-radio", show_label=True, min_width=600)
|
1441 |
+
# # dataset_dropdown = gr.Dropdown(dataset_names, label="Dataset name", value="mrm8488/ImageNet1K-val", elem_id="dataset", min_width=300)
|
1442 |
+
# dataset_dropdown = gr.Dropdown(defualt_choices, label="Dataset name", value=defualt_choices[0], elem_id="dataset", min_width=400)
|
1443 |
+
# dataset_radio.change(fn=lambda x: gr.update(choices=get_choices(x), value=get_choices(x)[0]), inputs=dataset_radio, outputs=dataset_dropdown)
|
1444 |
+
# # num_images_slider = gr.Number(10, label="Number of images", elem_id="num_images")
|
1445 |
+
# num_images_slider = gr.Slider(1, 1000, step=1, label="Number of images", value=10, elem_id="num_images", min_width=200)
|
1446 |
+
# if not is_random:
|
1447 |
+
# filter_by_class_checkbox = gr.Checkbox(label="Filter by class", value=True, elem_id="filter_by_class_checkbox")
|
1448 |
+
# filter_by_class_text = gr.Textbox(label="Class to select", value="0,33,99", elem_id="filter_by_class_text", info=f"e.g. `0,1,2`. (1000 classes)", visible=True)
|
1449 |
+
# # is_random_checkbox = gr.Checkbox(label="Random shuffle", value=False, elem_id="random_seed_checkbox")
|
1450 |
+
# # random_seed_slider = gr.Slider(0, 1000, step=1, label="Random seed", value=1, elem_id="random_seed", visible=False)
|
1451 |
+
# is_random_checkbox = gr.Checkbox(label="Random shuffle", value=True, elem_id="random_seed_checkbox")
|
1452 |
+
# random_seed_slider = gr.Slider(0, 1000, step=1, label="Random seed", value=1, elem_id="random_seed", visible=True)
|
1453 |
+
# if is_random:
|
1454 |
+
# filter_by_class_checkbox = gr.Checkbox(label="Filter by class", value=False, elem_id="filter_by_class_checkbox")
|
1455 |
+
# filter_by_class_text = gr.Textbox(label="Class to select", value="0,33,99", elem_id="filter_by_class_text", info=f"e.g. `0,1,2`. (1000 classes)", visible=False)
|
1456 |
+
# is_random_checkbox = gr.Checkbox(label="Random shuffle", value=True, elem_id="random_seed_checkbox")
|
1457 |
+
# random_seed_slider = gr.Slider(0, 1000, step=1, label="Random seed", value=42, elem_id="random_seed", visible=True)
|
1458 |
+
|
1459 |
+
|
1460 |
+
# if advanced:
|
1461 |
+
# advanced_block.visible = True
|
1462 |
+
# basic_block.visible = False
|
1463 |
+
# else:
|
1464 |
+
# advanced_block.visible = False
|
1465 |
+
# basic_block.visible = True
|
1466 |
+
|
1467 |
+
# # change visibility
|
1468 |
+
# advanced_radio.change(fn=lambda x: gr.update(visible=x=="Advanced"), inputs=advanced_radio, outputs=[advanced_block])
|
1469 |
+
# advanced_radio.change(fn=lambda x: gr.update(visible=x=="Basic"), inputs=advanced_radio, outputs=[basic_block])
|
1470 |
+
|
1471 |
+
# def find_num_classes(dataset_name):
|
1472 |
+
# num_classes = None
|
1473 |
+
# for cat, datasets in DATASETS.items():
|
1474 |
+
# datasets = [tup[0] for tup in datasets]
|
1475 |
+
# if dataset_name in datasets:
|
1476 |
+
# num_classes = DATASETS[cat][datasets.index(dataset_name)][1]
|
1477 |
+
# break
|
1478 |
+
# return num_classes
|
1479 |
+
|
1480 |
+
# def change_filter_options(dataset_name):
|
1481 |
+
# num_classes = find_num_classes(dataset_name)
|
1482 |
+
# if num_classes is None:
|
1483 |
+
# return (gr.Checkbox(label="Filter by class", value=False, elem_id="filter_by_class_checkbox", visible=False),
|
1484 |
+
# gr.Textbox(label="Class to select", value="0,1,2", elem_id="filter_by_class_text", info="e.g. `0,1,2`. This dataset has no class label", visible=False))
|
1485 |
+
# return (gr.Checkbox(label="Filter by class", value=True, elem_id="filter_by_class_checkbox", visible=True),
|
1486 |
+
# gr.Textbox(label="Class to select", value="0,1,2", elem_id="filter_by_class_text", info=f"e.g. `0,1,2`. ({num_classes} classes)", visible=True))
|
1487 |
+
# dataset_dropdown.change(fn=change_filter_options, inputs=dataset_dropdown, outputs=[filter_by_class_checkbox, filter_by_class_text])
|
1488 |
+
|
1489 |
+
# def change_filter_by_class(is_filter, dataset_name):
|
1490 |
+
# num_classes = find_num_classes(dataset_name)
|
1491 |
+
# return gr.Textbox(label="Class to select", value="0,1,2", elem_id="filter_by_class_text", info=f"e.g. `0,1,2`. ({num_classes} classes)", visible=is_filter)
|
1492 |
+
# filter_by_class_checkbox.change(fn=change_filter_by_class, inputs=[filter_by_class_checkbox, dataset_dropdown], outputs=filter_by_class_text)
|
1493 |
+
|
1494 |
+
# def change_random_seed(is_random):
|
1495 |
+
# return gr.Slider(0, 1000, step=1, label="Random seed", value=1, elem_id="random_seed", visible=is_random)
|
1496 |
+
# is_random_checkbox.change(fn=change_random_seed, inputs=is_random_checkbox, outputs=random_seed_slider)
|
1497 |
+
|
1498 |
+
|
1499 |
+
# def load_dataset_images(is_advanced, dataset_name, num_images=10,
|
1500 |
+
# is_filter=True, filter_by_class_text="0,1,2",
|
1501 |
+
# is_random=False, seed=1):
|
1502 |
+
# progress = gr.Progress()
|
1503 |
+
# progress(0, desc="Loading Images")
|
1504 |
+
# if is_advanced == "Basic":
|
1505 |
+
# gr.Info("Loaded images from Ego-Exo4D")
|
1506 |
+
# return default_images
|
1507 |
+
# try:
|
1508 |
+
# progress(0.5, desc="Downloading Dataset")
|
1509 |
+
# dataset = load_dataset(dataset_name, trust_remote_code=True)
|
1510 |
+
# key = list(dataset.keys())[0]
|
1511 |
+
# dataset = dataset[key]
|
1512 |
+
# except Exception as e:
|
1513 |
+
# gr.Error(f"Error loading dataset {dataset_name}: {e}")
|
1514 |
+
# return None
|
1515 |
+
# if num_images > len(dataset):
|
1516 |
+
# num_images = len(dataset)
|
1517 |
+
|
1518 |
+
# if is_filter:
|
1519 |
+
# progress(0.8, desc="Filtering Images")
|
1520 |
+
# classes = [int(i) for i in filter_by_class_text.split(",")]
|
1521 |
+
# labels = np.array(dataset['label'])
|
1522 |
+
# unique_labels = np.unique(labels)
|
1523 |
+
# valid_classes = [i for i in classes if i in unique_labels]
|
1524 |
+
# invalid_classes = [i for i in classes if i not in unique_labels]
|
1525 |
+
# if len(invalid_classes) > 0:
|
1526 |
+
# gr.Warning(f"Classes {invalid_classes} not found in the dataset.")
|
1527 |
+
# if len(valid_classes) == 0:
|
1528 |
+
# gr.Error(f"Classes {classes} not found in the dataset.")
|
1529 |
+
# return None
|
1530 |
+
# # shuffle each class
|
1531 |
+
# chunk_size = num_images // len(valid_classes)
|
1532 |
+
# image_idx = []
|
1533 |
+
# for i in valid_classes:
|
1534 |
+
# idx = np.where(labels == i)[0]
|
1535 |
+
# if is_random:
|
1536 |
+
# idx = np.random.RandomState(seed).choice(idx, chunk_size, replace=False)
|
1537 |
+
# else:
|
1538 |
+
# idx = idx[:chunk_size]
|
1539 |
+
# image_idx.extend(idx.tolist())
|
1540 |
+
# if not is_filter:
|
1541 |
+
# if is_random:
|
1542 |
+
# image_idx = np.random.RandomState(seed).choice(len(dataset), num_images, replace=False).tolist()
|
1543 |
+
# else:
|
1544 |
+
# image_idx = list(range(num_images))
|
1545 |
+
# key = 'image' if 'image' in dataset[0] else list(dataset[0].keys())[0]
|
1546 |
+
# images = [dataset[i][key] for i in image_idx]
|
1547 |
+
# gr.Info(f"Loaded {len(images)} images from {dataset_name}")
|
1548 |
+
# del dataset
|
1549 |
+
|
1550 |
+
# if dataset_name in CENTER_CROP_DATASETS:
|
1551 |
+
# def center_crop_image(img):
|
1552 |
+
# # image: PIL image
|
1553 |
+
# w, h = img.size
|
1554 |
+
# min_hw = min(h, w)
|
1555 |
+
# # center crop
|
1556 |
+
# left = (w - min_hw) // 2
|
1557 |
+
# top = (h - min_hw) // 2
|
1558 |
+
# right = left + min_hw
|
1559 |
+
# bottom = top + min_hw
|
1560 |
+
# img = img.crop((left, top, right, bottom))
|
1561 |
+
# return img
|
1562 |
+
# images = [center_crop_image(image) for image in images]
|
1563 |
+
|
1564 |
+
# return images
|
1565 |
+
|
1566 |
+
# load_images_button.click(load_dataset_images,
|
1567 |
+
# inputs=[advanced_radio, dataset_dropdown, num_images_slider,
|
1568 |
+
# filter_by_class_checkbox, filter_by_class_text,
|
1569 |
+
# is_random_checkbox, random_seed_slider],
|
1570 |
+
# outputs=[input_gallery])
|
1571 |
+
|
1572 |
+
# return dataset_dropdown, num_images_slider, random_seed_slider, load_images_button
|
1573 |
|
1574 |
|
1575 |
# def random_rotate_rgb_gallery(images):
|
|
|
1752 |
|
1753 |
with gr.Row():
|
1754 |
with gr.Column(scale=5, min_width=200):
|
1755 |
+
input_gallery, submit_button, clear_images_button, dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_input_images_section()
|
|
|
1756 |
num_images_slider.value = 30
|
1757 |
logging_text = gr.Textbox("Logging information", label="Logging", elem_id="logging", type="text", placeholder="Logging information", autofocus=False, autoscroll=False)
|
1758 |
|
|
|
1766 |
perplexity_slider, n_neighbors_slider, min_dist_slider,
|
1767 |
sampling_method_dropdown, ncut_metric_dropdown, positive_prompt, negative_prompt
|
1768 |
] = make_parameters_section()
|
|
|
1769 |
|
|
|
|
|
1770 |
false_placeholder = gr.Checkbox(label="False", value=False, elem_id="false_placeholder", visible=False)
|
1771 |
no_prompt = gr.Textbox("", label="", elem_id="empty_placeholder", type="text", placeholder="", visible=False)
|
1772 |
|
|
|
1789 |
|
1790 |
with gr.Row():
|
1791 |
with gr.Column(scale=5, min_width=200):
|
1792 |
+
input_gallery, submit_button, clear_images_button, dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_input_images_section()
|
|
|
1793 |
num_images_slider.value = 30
|
1794 |
logging_text = gr.Textbox("Logging information", label="Logging", elem_id="logging", type="text", placeholder="Logging information", autofocus=False, autoscroll=False, lines=20)
|
1795 |
|
|
|
1805 |
sampling_method_dropdown, ncut_metric_dropdown, positive_prompt, negative_prompt
|
1806 |
] = make_parameters_section()
|
1807 |
num_eig_slider.value = 30
|
|
|
|
|
1808 |
|
1809 |
false_placeholder = gr.Checkbox(label="False", value=False, elem_id="false_placeholder", visible=False)
|
1810 |
no_prompt = gr.Textbox("", label="", elem_id="empty_placeholder", type="text", placeholder="", visible=False)
|
|
|
1848 |
|
1849 |
with gr.Row():
|
1850 |
with gr.Column(scale=5, min_width=200):
|
1851 |
+
input_gallery, submit_button, clear_images_button, dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_input_images_section()
|
|
|
1852 |
|
1853 |
with gr.Column(scale=5, min_width=200):
|
1854 |
output_gallery = make_output_images_section()
|
|
|
1867 |
# logging text box
|
1868 |
logging_text = gr.Textbox("Logging information", label="Logging", elem_id="logging", type="text", placeholder="Logging information")
|
1869 |
|
|
|
1870 |
false_placeholder = gr.Checkbox(label="False", value=False, elem_id="false_placeholder", visible=False)
|
1871 |
no_prompt = gr.Textbox("", label="", elem_id="empty_placeholder", type="text", placeholder="", visible=False)
|
1872 |
|
|
|
1893 |
|
1894 |
with gr.Row():
|
1895 |
with gr.Column(scale=5, min_width=200):
|
1896 |
+
input_gallery, submit_button, clear_images_button, dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_input_images_section()
|
|
|
1897 |
num_images_slider.value = 100
|
1898 |
clear_images_button.visible = False
|
1899 |
logging_text = gr.Textbox("Logging information", label="Logging", elem_id="logging", type="text", placeholder="Logging information")
|
|
|
1936 |
false_placeholder.visible = False
|
1937 |
number_placeholder = gr.Number(0, label="Number placeholder", elem_id="number_placeholder")
|
1938 |
number_placeholder.visible = False
|
|
|
1939 |
no_prompt = gr.Textbox("", label="", elem_id="empty_placeholder", type="text", placeholder="", visible=False)
|
1940 |
|
1941 |
submit_button.click(
|
|
|
1959 |
|
1960 |
with gr.Row():
|
1961 |
with gr.Column(scale=5, min_width=200):
|
1962 |
+
input_gallery, submit_button, clear_images_button, dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_input_images_section()
|
|
|
1963 |
num_images_slider.value = 100
|
1964 |
clear_images_button.visible = False
|
1965 |
logging_text = gr.Textbox("Logging information", label="Logging", elem_id="logging", type="text", placeholder="Logging information", lines=20)
|
|
|
2008 |
false_placeholder.visible = False
|
2009 |
number_placeholder = gr.Number(0, label="Number placeholder", elem_id="number_placeholder")
|
2010 |
number_placeholder.visible = False
|
|
|
2011 |
no_prompt = gr.Textbox("", label="", elem_id="empty_placeholder", type="text", placeholder="", visible=False)
|
2012 |
|
2013 |
submit_button.click(
|
|
|
2097 |
|
2098 |
with gr.Row():
|
2099 |
with gr.Column(scale=5, min_width=200):
|
2100 |
+
input_gallery, submit_button, clear_images_button, dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_input_images_section()
|
|
|
|
|
2101 |
|
2102 |
with gr.Column(scale=5, min_width=200):
|
2103 |
[
|
|
|
2134 |
gr.Markdown('---')
|
2135 |
with gr.Row():
|
2136 |
with gr.Column(scale=5, min_width=200):
|
2137 |
+
input_gallery, submit_button, clear_images_button, dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_input_images_section()
|
|
|
2138 |
num_images_slider.value = 100
|
2139 |
|
2140 |
|
|
|
2161 |
num_sample_tsne_slider.value = 1000
|
2162 |
# logging text box
|
2163 |
logging_text = gr.Textbox("Logging information", label="Logging", elem_id="logging", type="text", placeholder="Logging information")
|
2164 |
+
|
|
|
|
|
2165 |
false_placeholder = gr.Checkbox(label="False", value=False, elem_id="false_placeholder", visible=False)
|
2166 |
no_prompt = gr.Textbox("", label="", elem_id="empty_placeholder", type="text", placeholder="", visible=False)
|
2167 |
|
|
|
2213 |
|
2214 |
with gr.Row():
|
2215 |
with gr.Column(scale=5, min_width=200):
|
2216 |
+
input_gallery, submit_button, clear_images_button, dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_input_images_section()
|
|
|
2217 |
num_images_slider.value = 100
|
2218 |
|
2219 |
|
|
|
2246 |
num_sample_tsne_slider.value = 1000
|
2247 |
# logging text box
|
2248 |
logging_text = gr.Textbox("Logging information", label="Logging", elem_id="logging", type="text", placeholder="Logging information")
|
2249 |
+
|
|
|
|
|
2250 |
true_placeholder = gr.Checkbox(label="True placeholder", value=True, elem_id="true_placeholder")
|
2251 |
true_placeholder.visible = False
|
2252 |
false_placeholder = gr.Checkbox(label="False placeholder", value=False, elem_id="false_placeholder")
|
|
|
2308 |
|
2309 |
with gr.Row():
|
2310 |
with gr.Column(scale=5, min_width=200):
|
2311 |
+
input_gallery, submit_button, clear_images_button, dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_input_images_section()
|
|
|
2312 |
submit_button.visible = False
|
|
|
2313 |
|
2314 |
|
2315 |
for i in range(3):
|
|
|
2381 |
|
2382 |
with gr.Row():
|
2383 |
with gr.Column(scale=5, min_width=200):
|
2384 |
+
input_gallery, submit_button, clear_images_button, dataset_dropdown, num_images_slider, random_seed_slider, load_images_button = make_input_images_section()
|
|
|
2385 |
submit_button.visible = False
|
|
|
2386 |
|
2387 |
|
2388 |
for i in range(3):
|