danhtran2mind's picture
Upload 68 files
f56ede2 verified
import os
import json
from PIL import Image
import gradio as gr
def load_examples(examples_base_path=os.path.join("apps", "gradio_app",
"assets", "examples", "Stable-Diffusion-2.1-Openpose-ControlNet")):
"""Load example configurations and input images from the Stable-Diffusion-2.1-Openpose-ControlNet directory."""
examples = []
# Iterate through example folders (e.g., '1', '2', '3', '4')
for folder in os.listdir(examples_base_path):
folder_path = os.path.join(examples_base_path, folder)
config_path = os.path.join(folder_path, "config.json")
if os.path.exists(config_path):
try:
with open(config_path, 'r') as f:
config = json.load(f)
# Extract configuration fields
input_filename = config["input_image"]
output_filename = config["output_image"]
prompt = config.get("prompt", "a man is doing yoga")
negative_prompt = config.get("negative_prompt", "monochrome, lowres, bad anatomy, worst quality, low quality")
num_steps = config.get("num_steps", 30)
seed = config.get("seed", 42)
width = config.get("width", 512)
height = config.get("height", 512)
guidance_scale = config.get("guidance_scale", 7.5)
controlnet_conditioning_scale = config.get("controlnet_conditioning_scale", 1.0)
# Construct absolute path for input image
input_image_path = os.path.join(folder_path, input_filename)
output_image_path = os.path.join(folder_path, output_filename)
# Check if input image exists
if os.path.exists(input_image_path):
input_image_data = Image.open(input_image_path)
output_image_data = Image.open(output_image_path)
# Append example data in the order expected by Gradio inputs
examples.append([
input_image_data, # Input image
prompt,
negative_prompt,
output_image_data,
num_steps,
seed,
width,
height,
guidance_scale,
controlnet_conditioning_scale,
False # use_random_seed, hardcoded as per original gr.Examples
])
else:
print(f"Input image not found at {input_image_path}")
except json.JSONDecodeError as e:
print(f"Error decoding JSON from {config_path}: {str(e)}")
except Exception as e:
print(f"Error processing example in {folder_path}: {str(e)}")
return examples
def select_example(evt: gr.SelectData, examples_data):
"""Handle selection of an example to populate Gradio inputs."""
example_index = evt.index
# Extract example data
# input_image_data, prompt, negative_prompt, output_image_data, num_steps, seed, width, height, guidance_scale, controlnet_conditioning_scale, use_random_seed = examples_data[example_index]
(
input_image_data,
prompt,
negative_prompt,
output_image_data,
num_steps,
seed,
width,
height,
guidance_scale,
controlnet_conditioning_scale,
use_random_seed,
) = examples_data[example_index]
# Return values to update Gradio interface inputs and output message
return (
input_image_data, # Input image
prompt, # Prompt
negative_prompt, # Negative prompt
output_image_data, # Output image
num_steps, # Number of inference steps
seed, # Random seed
width, # Width
height, # Height
guidance_scale, # Guidance scale
controlnet_conditioning_scale, # ControlNet conditioning scale
use_random_seed, # Use random seed
f"Loaded example {example_index + 1} with prompt: {prompt}" # Output message
)