File size: 4,331 Bytes
79b274c e377d5f 79b274c e377d5f 79b274c e377d5f 79b274c e377d5f 79b274c e377d5f 79b274c e377d5f 79b274c e377d5f 79b274c e377d5f 79b274c e377d5f 79b274c e377d5f 79b274c e377d5f 79b274c e377d5f 39e4df6 e377d5f 39e4df6 e377d5f 39e4df6 e377d5f 39e4df6 e377d5f 39e4df6 e377d5f 39e4df6 79b274c |
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 |
import gradio as gr
import json
import os
import zipfile
from datetime import datetime
# Initialize dataset storage
datasets = {}
# Function to save dataset to JSONL file
def save_dataset(dataset_name):
if dataset_name in datasets:
dataset = datasets[dataset_name]
os.makedirs(f"{dataset_name}/images", exist_ok=True)
with open(f"{dataset_name}/dataset.jsonl", "w") as f:
for item in dataset:
f.write(json.dumps(item) + "\n")
# Function to load dataset from JSONL file
def load_dataset(dataset_name, file):
if file:
os.makedirs(dataset_name, exist_ok=True)
with open(f"{dataset_name}/dataset.jsonl", "r") as f:
datasets[dataset_name] = [json.loads(line) for line in f]
return f"Dataset '{dataset_name}' loaded successfully."
return "No file uploaded."
# Function to add image/prompt pair to dataset
def add_to_dataset(dataset_name, image, prompt):
if dataset_name not in datasets:
datasets[dataset_name] = []
image_path = f"{dataset_name}/images/{datetime.now().timestamp()}.png"
image.save(image_path)
datasets[dataset_name].append({"image": image_path, "prompt": prompt})
return f"Added to dataset '{dataset_name}'."
# Function to edit image/prompt pair in dataset
def edit_dataset(dataset_name, index, new_prompt):
if dataset_name in datasets and 0 <= index < len(datasets[dataset_name]):
datasets[dataset_name][index]["prompt"] = new_prompt
return f"Edited prompt at index {index} in dataset '{dataset_name}'."
return "Invalid index."
# Function to delete image/prompt pair from dataset
def delete_from_dataset(dataset_name, index):
if dataset_name in datasets and 0 <= index < len(datasets[dataset_name]):
os.remove(datasets[dataset_name][index]["image"])
datasets[dataset_name].pop(index)
return f"Deleted item at index {index} from dataset '{dataset_name}'."
return "Invalid index."
# Function to generate and download dataset as zip file
def generate_dataset(dataset_name):
if dataset_name in datasets:
save_dataset(dataset_name)
zip_filename = f"{dataset_name}.zip"
with zipfile.ZipFile(zip_filename, 'w') as zipf:
for root, _, files in os.walk(dataset_name):
for file in files:
zipf.write(os.path.join(root, file))
return zip_filename
return "Dataset not found."
# Gradio interface
with gr.Blocks() as demo:
gr.Markdown("# Dataset Builder")
with gr.Tab("Create/Edit Dataset"):
dataset_name = gr.Textbox(label="Dataset Name")
image = gr.Image(label="Upload Image")
prompt = gr.Textbox(label="Prompt")
add_button = gr.Button("Add to Dataset")
add_output = gr.Textbox()
add_button.click(add_to_dataset, inputs=[dataset_name, image, prompt], outputs=add_output)
index = gr.Number(label="Index to Edit/Delete", precision=0)
new_prompt = gr.Textbox(label="New Prompt")
edit_button = gr.Button("Edit Prompt")
edit_output = gr.Textbox()
edit_button.click(edit_dataset, inputs=[dataset_name, index, new_prompt], outputs=edit_output)
delete_button = gr.Button("Delete from Dataset")
delete_output = gr.Textbox()
delete_button.click(delete_from_dataset, inputs=[dataset_name, index], outputs=delete_output)
with gr.Tab("Upload Dataset"):
upload_dataset_name = gr.Textbox(label="Dataset Name")
upload_file = gr.File(label="Upload JSONL File")
upload_button = gr.Button("Upload Dataset")
upload_output = gr.Textbox()
upload_button.click(load_dataset, inputs=[upload_dataset_name, upload_file], outputs=upload_output)
with gr.Tab("Generate/Download Dataset"):
generate_button = gr.Button("Generate Dataset")
generate_output = gr.File()
generate_button.click(generate_dataset, inputs=[dataset_name], outputs=generate_output)
with gr.Tab("View Dataset"):
view_dataset_name = gr.Textbox(label="Dataset Name")
view_button = gr.Button("View Dataset")
view_output = gr.JSON()
view_button.click(lambda name: datasets.get(name, []), inputs=[view_dataset_name], outputs=view_output)
demo.launch()
|