Spaces:
Sleeping
Sleeping
| import uuid | |
| import gradio as gr | |
| import pandas as pd | |
| from PIL import Image | |
| from transformers import CLIPModel, CLIPProcessor | |
| from comet import get_experiment, get_experiment_status, start_experiment | |
| CLIP_MODEL_PATH = "openai/clip-vit-base-patch32" | |
| clip_model = CLIPModel.from_pretrained(CLIP_MODEL_PATH) | |
| clip_processor = CLIPProcessor.from_pretrained(CLIP_MODEL_PATH) | |
| DESCRIPTION = """Glad to see you here π. | |
| You can use this Space to log predictions to [Comet](https://www.comet.ml/site) from Spaces that use Text to Image Diffusion Models. | |
| Keep track of all your prompts and generated images so that you remember the good ones! | |
| Set your Comet credentials in the Comet Settings tab and create an Experiment for logging data. If you don't have credentials yet, | |
| you can [sign up for Comet here](https://www.comet.ml/signup) | |
| If you want to continue logging to the same Experiment over multiple sessions, simply provide the experiment name. | |
| Set a path to a Space using that uses a Diffusion model and submit your prompt in the Diffusion Model tab | |
| ** Note: ** This Space will still run even if you don't set credentials | |
| """ | |
| def predict( | |
| model, | |
| prompt, | |
| experiment_state, | |
| ): | |
| io = gr.Interface.load(model) | |
| image = io(prompt) | |
| pil_image = Image.open(image) | |
| inputs = clip_processor( | |
| text=[prompt], | |
| images=pil_image, | |
| return_tensors="pt", | |
| padding=True, | |
| ) | |
| outputs = clip_model(**inputs) | |
| clip_score = outputs.logits_per_image.item() / 100.0 | |
| experiment = get_experiment(experiment_state) | |
| if experiment is not None: | |
| image_id = uuid.uuid4().hex | |
| experiment.log_image(image, image_id) | |
| asset = pd.DataFrame.from_records( | |
| [ | |
| { | |
| "prompt": prompt, | |
| "model": model, | |
| "clip_model": CLIP_MODEL_PATH, | |
| "clip_score": round(clip_score, 3), | |
| } | |
| ] | |
| ) | |
| experiment.log_table(f"{image_id}.json", asset, orient="records") | |
| return image, experiment_state | |
| def start_interface(): | |
| demo = gr.Blocks() | |
| with demo: | |
| description = gr.Markdown(DESCRIPTION) | |
| with gr.Tabs(): | |
| with gr.TabItem(label="Comet Settings"): | |
| # credentials | |
| comet_api_key = gr.Textbox( | |
| label="Comet API Key", | |
| placeholder="This is required if you'd like to create an Experiment", | |
| ) | |
| comet_workspace = gr.Textbox(label="Comet Workspace") | |
| comet_project_name = gr.Textbox(label="Comet Project Name") | |
| comet_experiment_name = gr.Textbox( | |
| label="Comet Experiment Name", | |
| placeholder=( | |
| "Set this if you'd like" | |
| "to continue logging to an existing Experiment", | |
| ), | |
| ) | |
| with gr.Row(): | |
| start = gr.Button("Start Experiment", variant="primary") | |
| status = gr.Button("Experiment Status") | |
| status_output = gr.Textbox(label="Status") | |
| experiment_state = gr.Variable(label="Experiment State") | |
| start.click( | |
| start_experiment, | |
| inputs=[ | |
| comet_api_key, | |
| comet_workspace, | |
| comet_project_name, | |
| comet_experiment_name, | |
| experiment_state, | |
| ], | |
| outputs=[experiment_state, status_output], | |
| ) | |
| status.click( | |
| get_experiment_status, | |
| inputs=[experiment_state], | |
| outputs=[experiment_state, status_output], | |
| ) | |
| with gr.TabItem(label="Diffusion Model"): | |
| diff_description = gr.Markdown( | |
| """The Model must be a path to any Space that accepts | |
| only text as input and produces an image as an output | |
| """ | |
| ) | |
| model = gr.Textbox( | |
| label="Model", | |
| value="spaces/valhalla/glide-text2im", | |
| placeholder="Enter a path to a Space", | |
| ) | |
| prompt = gr.Textbox( | |
| label="Prompt", | |
| value="an oil painting of a corgi", | |
| placeholder="Enter your text prompt here", | |
| ) | |
| outputs = gr.Image(label="Image") | |
| submit = gr.Button("Submit", variant="primary") | |
| submit.click( | |
| predict, | |
| inputs=[model, prompt, experiment_state], | |
| outputs=[outputs, experiment_state], | |
| ) | |
| demo.launch() | |
| start_interface() | |