import tempfile | |
import gradio as gr | |
from gradio.inputs import Image, Radio | |
from gradio.outputs import Image3D | |
from gltflib import GLTF, FileResource | |
avocado = GLTF.load('./Avocado.glb') | |
cube = GLTF.load("./AnimatedCube/AnimatedCube.gltf") | |
def load_mesh(im: str, choose: str): | |
print(im) | |
# let's first clone the source model | |
model = (avocado if choose == "avocado" else cube).clone() | |
resource = FileResource(im.name) | |
model.resources.append(resource) | |
# let's do surgery | |
if choose != "avocado": | |
model.model.images[0].uri = im.name | |
with tempfile.NamedTemporaryFile(suffix=".glb", delete=False) as file: | |
model.export(file.name) | |
return file.name | |
iface = gr.Interface( | |
fn=load_mesh, | |
description="draw on a canvas, get a 3D model", | |
inputs=[ | |
Image(source="canvas", type="file", label="canvas"), | |
Radio(choices=["cube", "avocado"], default="cube"), | |
], | |
outputs=Image3D(), | |
live=True, | |
) | |
if __name__ == "__main__": | |
iface.launch() | |