Spaces:
Running
on
Zero
Running
on
Zero
Auto cleanup temporary files
Browse filesImages and zip files are kept 24 hours.
app.py
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
|
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
import spaces
|
| 3 |
from PIL import Image
|
| 4 |
|
| 5 |
from dataset import ImageDataset
|
|
|
|
| 6 |
from labelizer import get_task_response
|
| 7 |
from packager import create_dataset_zip
|
| 8 |
-
|
|
|
|
|
|
|
| 9 |
|
| 10 |
|
| 11 |
@spaces.GPU
|
|
@@ -73,7 +78,8 @@ def labelize_all_images(
|
|
| 73 |
def create_dataset_zipfile(dataset: ImageDataset, organize_in_folders: bool):
|
| 74 |
"""Create and return zip file for download."""
|
| 75 |
zip_path = create_dataset_zip(dataset, organize_in_folders)
|
| 76 |
-
|
|
|
|
| 77 |
|
| 78 |
|
| 79 |
def update_buttons_states(dataset: ImageDataset, labeling_in_progress=False):
|
|
@@ -99,7 +105,9 @@ def finish_labeling(dataset: ImageDataset):
|
|
| 99 |
return update_buttons_states(dataset, labeling_in_progress=False)
|
| 100 |
|
| 101 |
|
| 102 |
-
with gr.Blocks(
|
|
|
|
|
|
|
| 103 |
dataset = gr.State()
|
| 104 |
with gr.Sidebar():
|
| 105 |
gr.Markdown("# 🖼️ Image Labeling Tool")
|
|
@@ -128,16 +136,18 @@ with gr.Blocks(title="Labelizer", fill_width=True) as demo:
|
|
| 128 |
)
|
| 129 |
|
| 130 |
with gr.Group():
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
download_button = gr.Button(
|
| 135 |
"💾 Create zip file to download",
|
| 136 |
interactive=False,
|
| 137 |
size="lg",
|
| 138 |
)
|
|
|
|
| 139 |
download_file = gr.File(label="Generated datasets", visible=False)
|
| 140 |
-
|
|
|
|
| 141 |
|
| 142 |
@gr.render(inputs=[dataset, is_labeling_in_progress])
|
| 143 |
def render_grid(ds, is_labeling_in_progress):
|
|
@@ -284,7 +294,11 @@ with gr.Blocks(title="Labelizer", fill_width=True) as demo:
|
|
| 284 |
).then(
|
| 285 |
create_dataset_zipfile,
|
| 286 |
inputs=[dataset, organize_files],
|
| 287 |
-
outputs=download_file,
|
|
|
|
|
|
|
|
|
|
|
|
|
| 288 |
)
|
| 289 |
|
| 290 |
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
|
| 3 |
import gradio as gr
|
| 4 |
import spaces
|
| 5 |
from PIL import Image
|
| 6 |
|
| 7 |
from dataset import ImageDataset
|
| 8 |
+
from documentation import DOC_CONTENT
|
| 9 |
from labelizer import get_task_response
|
| 10 |
from packager import create_dataset_zip
|
| 11 |
+
|
| 12 |
+
# Drop files after 24 hours
|
| 13 |
+
CACHE_TTL = 24 * 60 * 60
|
| 14 |
|
| 15 |
|
| 16 |
@spaces.GPU
|
|
|
|
| 78 |
def create_dataset_zipfile(dataset: ImageDataset, organize_in_folders: bool):
|
| 79 |
"""Create and return zip file for download."""
|
| 80 |
zip_path = create_dataset_zip(dataset, organize_in_folders)
|
| 81 |
+
output = gr.update(visible=True, value=zip_path)
|
| 82 |
+
return output, zip_path
|
| 83 |
|
| 84 |
|
| 85 |
def update_buttons_states(dataset: ImageDataset, labeling_in_progress=False):
|
|
|
|
| 105 |
return update_buttons_states(dataset, labeling_in_progress=False)
|
| 106 |
|
| 107 |
|
| 108 |
+
with gr.Blocks(
|
| 109 |
+
title="Labelizer", fill_width=True, delete_cache=(CACHE_TTL, CACHE_TTL)
|
| 110 |
+
) as demo:
|
| 111 |
dataset = gr.State()
|
| 112 |
with gr.Sidebar():
|
| 113 |
gr.Markdown("# 🖼️ Image Labeling Tool")
|
|
|
|
| 136 |
)
|
| 137 |
|
| 138 |
with gr.Group():
|
| 139 |
+
# original zip file to drop, see the click envent of download_button
|
| 140 |
+
to_delete = gr.State()
|
| 141 |
+
# should create a zip file
|
| 142 |
download_button = gr.Button(
|
| 143 |
"💾 Create zip file to download",
|
| 144 |
interactive=False,
|
| 145 |
size="lg",
|
| 146 |
)
|
| 147 |
+
# the download section
|
| 148 |
download_file = gr.File(label="Generated datasets", visible=False)
|
| 149 |
+
# to organize dataset in folders or not
|
| 150 |
+
organize_files = gr.Checkbox(label="📂 Organize in folders", value=False)
|
| 151 |
|
| 152 |
@gr.render(inputs=[dataset, is_labeling_in_progress])
|
| 153 |
def render_grid(ds, is_labeling_in_progress):
|
|
|
|
| 294 |
).then(
|
| 295 |
create_dataset_zipfile,
|
| 296 |
inputs=[dataset, organize_files],
|
| 297 |
+
outputs=[download_file, to_delete],
|
| 298 |
+
).then(
|
| 299 |
+
# delete the generated files from /tmp as it is now coppied in gradio cache
|
| 300 |
+
lambda x: os.remove(x),
|
| 301 |
+
inputs=[to_delete],
|
| 302 |
)
|
| 303 |
|
| 304 |
|