Commit
·
b88f82b
1
Parent(s):
a9e44d5
fix orientation, markdown
Browse files- app.py +10 -18
- tsr/utils.py +6 -16
app.py
CHANGED
|
@@ -17,14 +17,13 @@ HF_TOKEN = os.getenv("HF_TOKEN")
|
|
| 17 |
|
| 18 |
HEADER = """
|
| 19 |
# TripoSR Demo
|
| 20 |
-
<table>
|
| 21 |
-
<tr>
|
| 22 |
<td style="text-align: center;">
|
| 23 |
<a href="https://stability.ai">
|
| 24 |
<img src="https://images.squarespace-cdn.com/content/v1/6213c340453c3f502425776e/6c9c4c25-5410-4547-bc26-dc621cdacb25/Stability+AI+logo.png" width="200" height="40" />
|
| 25 |
</a>
|
| 26 |
</td>
|
| 27 |
-
<td style="border-left: 1px solid #000; width: 1px;"></td>
|
| 28 |
<td style="text-align: center;">
|
| 29 |
<a href="https://www.tripo3d.ai">
|
| 30 |
<img src="https://www.tripo3d.ai/logo.png" width="170" height="40" />
|
|
@@ -32,19 +31,17 @@ HEADER = """
|
|
| 32 |
</td>
|
| 33 |
</tr>
|
| 34 |
</table>
|
| 35 |
-
|
| 36 |
-
<
|
| 37 |
-
<tr>
|
| 38 |
<td style="text-align: center;">
|
| 39 |
-
<a href="https://huggingface.co/stabilityai/TripoSR"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Model_Card-Huggingface-orange"></a>
|
| 40 |
</td>
|
| 41 |
-
<td style="border-left: 1px solid #000; width: 1px;"></td>
|
| 42 |
<td style="text-align: center;">
|
| 43 |
-
<a href="https://github.com/VAST-AI-Research/TripoSR"><img src="
|
| 44 |
</td>
|
| 45 |
-
<td style="
|
| 46 |
-
<
|
| 47 |
-
<a href="
|
| 48 |
</td>
|
| 49 |
</tr>
|
| 50 |
</table>
|
|
@@ -101,7 +98,7 @@ def preprocess(input_image, do_remove_background, foreground_ratio):
|
|
| 101 |
def generate(image):
|
| 102 |
scene_codes = model(image, device=device)
|
| 103 |
mesh = model.extract_mesh(scene_codes)[0]
|
| 104 |
-
mesh
|
| 105 |
mesh_path = tempfile.NamedTemporaryFile(suffix=".obj", delete=False)
|
| 106 |
mesh.export(mesh_path.name)
|
| 107 |
return mesh_path.name
|
|
@@ -144,11 +141,6 @@ with gr.Blocks() as demo:
|
|
| 144 |
label="Output Model",
|
| 145 |
interactive=False,
|
| 146 |
)
|
| 147 |
-
gr.Markdown(
|
| 148 |
-
"""
|
| 149 |
-
Note: The model shown here will be flipped due to some visualization issues. Please download to get the correct result.
|
| 150 |
-
"""
|
| 151 |
-
)
|
| 152 |
with gr.Row(variant="panel"):
|
| 153 |
gr.Examples(
|
| 154 |
examples=[
|
|
|
|
| 17 |
|
| 18 |
HEADER = """
|
| 19 |
# TripoSR Demo
|
| 20 |
+
<table bgcolor="#1E2432" cellspacing="0" cellpadding="0" width="450">
|
| 21 |
+
<tr style="height:50px;">
|
| 22 |
<td style="text-align: center;">
|
| 23 |
<a href="https://stability.ai">
|
| 24 |
<img src="https://images.squarespace-cdn.com/content/v1/6213c340453c3f502425776e/6c9c4c25-5410-4547-bc26-dc621cdacb25/Stability+AI+logo.png" width="200" height="40" />
|
| 25 |
</a>
|
| 26 |
</td>
|
|
|
|
| 27 |
<td style="text-align: center;">
|
| 28 |
<a href="https://www.tripo3d.ai">
|
| 29 |
<img src="https://www.tripo3d.ai/logo.png" width="170" height="40" />
|
|
|
|
| 31 |
</td>
|
| 32 |
</tr>
|
| 33 |
</table>
|
| 34 |
+
<table bgcolor="#1E2432" cellspacing="0" cellpadding="0" width="450">
|
| 35 |
+
<tr style="height:30px;">
|
|
|
|
| 36 |
<td style="text-align: center;">
|
| 37 |
+
<a href="https://huggingface.co/stabilityai/TripoSR"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Model_Card-Huggingface-orange" height="20"></a>
|
| 38 |
</td>
|
|
|
|
| 39 |
<td style="text-align: center;">
|
| 40 |
+
<a href="https://github.com/VAST-AI-Research/TripoSR"><img src="https://postimage.me/images/2024/03/04/GitHub_Logo_White.png" width="100" height="20"></a>
|
| 41 |
</td>
|
| 42 |
+
<td style="text-align: center; color: white;">
|
| 43 |
+
<!-- <a href="https://github.com/VAST-AI-Research/TripoSR"><img src="https://img.shields.io/badge/arXiv-1234.56789-b31b1b.svg" height="20"></a> -->
|
| 44 |
+
<a href="http://your-url.com"><b>[Tech Report pdf]</b></a>
|
| 45 |
</td>
|
| 46 |
</tr>
|
| 47 |
</table>
|
|
|
|
| 98 |
def generate(image):
|
| 99 |
scene_codes = model(image, device=device)
|
| 100 |
mesh = model.extract_mesh(scene_codes)[0]
|
| 101 |
+
mesh = to_gradio_3d_orientation(mesh)
|
| 102 |
mesh_path = tempfile.NamedTemporaryFile(suffix=".obj", delete=False)
|
| 103 |
mesh.export(mesh_path.name)
|
| 104 |
return mesh_path.name
|
|
|
|
| 141 |
label="Output Model",
|
| 142 |
interactive=False,
|
| 143 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 144 |
with gr.Row(variant="panel"):
|
| 145 |
gr.Examples(
|
| 146 |
examples=[
|
tsr/utils.py
CHANGED
|
@@ -11,6 +11,7 @@ import rembg
|
|
| 11 |
import torch
|
| 12 |
import torch.nn as nn
|
| 13 |
import torch.nn.functional as F
|
|
|
|
| 14 |
from omegaconf import DictConfig, OmegaConf
|
| 15 |
from PIL import Image
|
| 16 |
|
|
@@ -474,19 +475,8 @@ def save_video(
|
|
| 474 |
writer.close()
|
| 475 |
|
| 476 |
|
| 477 |
-
|
| 478 |
-
|
| 479 |
-
|
| 480 |
-
|
| 481 |
-
|
| 482 |
-
"-y": np.array([0, -1, 0]),
|
| 483 |
-
"-z": np.array([0, 0, -1]),
|
| 484 |
-
}
|
| 485 |
-
|
| 486 |
-
|
| 487 |
-
def to_gradio_3d_orientation(vertices):
|
| 488 |
-
z_, x_ = _dir2vec["+y"], _dir2vec["-z"]
|
| 489 |
-
y_ = np.cross(z_, x_)
|
| 490 |
-
std2mesh = np.stack([x_, y_, z_], axis=0).T
|
| 491 |
-
vertices = np.dot(std2mesh, vertices.T).T
|
| 492 |
-
return vertices
|
|
|
|
| 11 |
import torch
|
| 12 |
import torch.nn as nn
|
| 13 |
import torch.nn.functional as F
|
| 14 |
+
import trimesh
|
| 15 |
from omegaconf import DictConfig, OmegaConf
|
| 16 |
from PIL import Image
|
| 17 |
|
|
|
|
| 475 |
writer.close()
|
| 476 |
|
| 477 |
|
| 478 |
+
def to_gradio_3d_orientation(mesh):
|
| 479 |
+
mesh.apply_transform(trimesh.transformations.rotation_matrix(-np.pi/2, [1, 0, 0]))
|
| 480 |
+
mesh.apply_scale([1, 1, -1])
|
| 481 |
+
mesh.apply_transform(trimesh.transformations.rotation_matrix(np.pi/2, [0, 1, 0]))
|
| 482 |
+
return mesh
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|