File size: 2,612 Bytes
a15c0ab
30f0bac
 
ad5cb25
583955f
66a8046
 
 
583955f
 
 
a15c0ab
30f0bac
 
17397c2
66a8046
30f0bac
 
66a8046
 
 
 
 
 
 
 
 
30f0bac
 
 
 
ad5cb25
30f0bac
66a8046
 
 
 
 
 
30f0bac
 
ad5cb25
30f0bac
 
 
 
 
 
 
17397c2
30f0bac
ad5cb25
66a8046
30f0bac
 
 
 
 
17397c2
a15c0ab
 
30f0bac
66a8046
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
import gradio as gr
import tempfile
import os
from SDXLImageGenerator import SDXLImageGenerator  # Import your existing class
import sys
from Image3DProcessor import Image3DProcessor  # Import your 3D processing class

# Ensure setup.sh runs and paths are appended
os.system('bash setup.sh')
sys.path.append('./splatter-image')
sys.path.append('./diff-gaussian-rasterization')

class ControlNetProcessor:
    def controlnet_image(self, image):
        # Placeholder for ControlNet processing (e.g., returning a processed image or placeholder text)
        return image  # Returning the image for further processing

class VideoGenerator:
    def __init__(self, model_cfg_path, model_repo_id, model_filename):
        # Initialize the Image3DProcessor
        self.processor = Image3DProcessor(model_cfg_path, model_repo_id, model_filename)

    def generate_3d_video(self, image):
        # Process the image and create a 3D video
        processed_image = self.processor.preprocess(image, preprocess_background=False)
        mesh_path, video_path = self.processor.reconstruct_and_export(processed_image)

        return video_path

class GradioApp:
    def __init__(self):
        self.sdxl_generator = SDXLImageGenerator()  # Use your existing class
        self.controlnet_processor = ControlNetProcessor()
        # Initialize VideoGenerator with required paths and details
        self.video_generator = VideoGenerator(
            model_cfg_path="path/to/gradio_config.yaml",
            model_repo_id="szymanowiczs/splatter-image-multi-category-v1",
            model_filename="model_latest.pth"
        )

    def full_pipeline(self, prompt):
        initial_image = self.sdxl_generator.generate_images([prompt])[0]
        controlled_image = self.controlnet_processor.controlnet_image(initial_image)
        video_path = self.video_generator.generate_3d_video(controlled_image)
        return initial_image, controlled_image, video_path

    def launch(self):
        interface = gr.Interface(
            fn=self.full_pipeline,
            inputs=gr.Textbox(label="Input Prompt"),
            outputs=[
                gr.Image(label="Generated Image"),
                gr.Image(label="ControlNet Processed Image"),
                gr.Video(label="3D Model Video")
            ],
            title="SDXL to ControlNet to 3D Pipeline",
            description="Generate an image using SDXL, refine it with ControlNet, and generate a 3D video output."
        )
        interface.launch(share=True)  # Added `share=True` for public link

if __name__ == "__main__":
    app = GradioApp()
    app.launch()