Spaces:
Build error
Build error
import spaces | |
import gradio as gr | |
from PIL import Image | |
from diffusers import StableDiffusionPipeline | |
import torch | |
import numpy as np | |
import base64 | |
from gradio_pannellum import Pannellum | |
import io | |
from huggingface_hub import snapshot_download | |
from txt2panoimg import Text2360PanoramaImagePipeline | |
# Download the model | |
model_path = snapshot_download("archerfmy0831/sd-t2i-360panoimage") | |
# Initialize pipelines | |
txt2panoimg = Text2360PanoramaImagePipeline(model_path, torch_dtype=torch.float16) | |
def text_to_pano(prompt, upscale): | |
try: | |
input_data = {'prompt': prompt, 'upscale': upscale, 'refinement': False} | |
output = txt2panoimg(input_data) | |
return output, output | |
except Exception as e: | |
print(f"Error generating panorama: {e}") | |
return None, None | |
title = """ | |
<div style="text-align: left;"> | |
<img src="https://ant.dpu.ac.th/wp-content/uploads/2024/04/dpulogo.png" width="200"/> | |
<h4></h4> | |
<p>This Space is a playground designed to experiment with generating 360-degree images for use in Virtual Reality (VR) experiences. It utilizes A-Frame to render the images as WebXR using a Text-to-VR approach. This demonstration was presented at the MHESI Fair 2024 in Thailand. <br/> It is conducted by the College of Creative Design and Entertainment Technology, Dhurakij Pundit University, in the lab of Asst. Prof. Banyapon Poolsawas under the MIT License.</p> | |
<p>SD-T2I-360PanoImage Generate 360° Panorama Image Generation</p> | |
<p> | |
<a href="https://github.com/ArcherFMY/SD-T2I-360PanoImage/" target="_blank">[Github]</a> | |
<a href="https://huggingface.co/archerfmy0831/sd-t2i-360panoimage" target="_blank">[Models]</a> | |
</p> | |
</div> | |
""" | |
def create_aframe_html(image): | |
buffered = io.BytesIO() | |
image.save(buffered, format="JPEG") | |
img_str = base64.b64encode(buffered.getvalue()).decode('utf-8') | |
return f"data:image/jpeg;base64,{img_str}" | |
with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
gr.HTML(title) | |
with gr.Row(): | |
with gr.Column(): | |
t2p_input = gr.Textbox(label="Enter your prompt", lines=3) | |
t2p_upscale = gr.Checkbox(label="Upscale (takes about 60 seconds 6144x3072 resolution)") | |
t2p_generate = gr.Button("Generate 360° Image") | |
with gr.Column(variant="panel"): | |
t2p_output = Pannellum(show_label=False, interactive=True) | |
with gr.Row(): | |
t2p_image_output = gr.Image(label="Generated 360°Image") | |
# New A-Frame Code Block | |
with gr.Row(): | |
output_html = gr.Textbox(label="A-Frame HTML Code (Copy and use in Glitch)", lines=15, interactive=False) | |
gr.Markdown(""" | |
**Copy this code for Glitch.com:** | |
1. Create a new Glitch project ([https://glitch.com/](https://glitch.com/)). | |
2. Choose the **hello-webpage** template. | |
3. Paste this HTML code into the `index.html` file. | |
""") | |
update_trigger = gr.State(value=0) | |
def generate_with_update(prompt, upscale, trigger): | |
output, image = text_to_pano(prompt, upscale) | |
image_url = create_aframe_html(image) | |
html = f""" | |
<html> | |
<head> | |
<script src="https://aframe.io/releases/1.3.0/aframe.min.js"></script> | |
</head> | |
<body> | |
<a-scene> | |
<a-sky src="{image_url}" rotation="0 -130 0"></a-sky> | |
<a-text font="kelsonsans" value="Generated from AI" width="8" position="-2.5 0.25 -1.5" rotation="0 15 0"></a-text> | |
</a-scene> | |
</body> | |
</html> | |
""" if image_url is not None else "Failed to generate A-Frame HTML. Please try again." | |
return output, image, html, trigger + 1 | |
t2p_generate.click( | |
generate_with_update, | |
inputs=[t2p_input, t2p_upscale, update_trigger], | |
outputs=[t2p_output, t2p_image_output, output_html, update_trigger] | |
) | |
demo.launch() | |