Team Ai
Apppublic

Shailajagorile/MultiViewImageGeneration

sourceHugging Faceapache-2.0updated 1y agoView on Hugging Face
0likes
app.py58 linesDownload Raw Back to root
1import os2import torch3from diffusers import DiffusionPipeline4from PIL import Image5import gradio as gr6 7# Load Zero123-XL (3D-aware multi-view model)8model_id = "ashawkey/zero123-xl"9pipe = DiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)10pipe.to("cuda")11 12# Create output folder13os.makedirs("outputs", exist_ok=True)14 15# Generate novel views for a batch of images16def generate_views(image_list):17    results = {}18    for idx, image in enumerate(image_list):19        base_name = f"image_{idx+1}"20 21        # Generate multiple novel views22        # Zero123-XL automatically rotates input in different directions23        outputs = pipe(image, num_images_per_prompt=4)  # 4 new views per image24 25        img_paths = []26        for j, img in enumerate(outputs.images):27            path = f"outputs/{base_name}_view{j+1}.png"28            img.save(path)29            img_paths.append(path)30 31        results[base_name] = img_paths32 33    return results34 35# Gradio interface36with gr.Blocks() as demo:37    gr.Markdown("## 🖼 Novel View Synthesis with Zero123-XL")38 39    with gr.Row():40        input_images = gr.File(file_types=[".png", ".jpg", ".jpeg"], file_types_display="image", type="file", label="Upload Images", file_types_multiple=True)41        run_btn = gr.Button("Generate Views")42 43    gallery = gr.Gallery(label="Generated Views", show_label=True).style(grid=[4], height="auto")44 45    def inference(files):46        images = [Image.open(f.name).convert("RGB") for f in files]47        results = generate_views(images)48        all_outputs = []49        for k, v in results.items():50            for img_path in v:51                all_outputs.append(Image.open(img_path))52        return all_outputs53 54    run_btn.click(inference, inputs=[input_images], outputs=[gallery])55 56# Launch57if _name_ == "_main_":58    demo.launch()