Spaces:
Running
on
Zero
Running
on
Zero
xinjie.wang
commited on
Commit
·
1a190b2
1
Parent(s):
a75fc8a
update
Browse files- app.py +8 -0
- asset3d_gen/data/utils.py +13 -3
- asset3d_gen/models/segment_model.py +7 -5
- common.py +3 -1
app.py
CHANGED
@@ -102,6 +102,13 @@ with gr.Blocks(
|
|
102 |
seed = gr.Slider(
|
103 |
0, MAX_SEED, label="Seed", value=0, step=1
|
104 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
with gr.Row():
|
106 |
randomize_seed = gr.Checkbox(
|
107 |
label="Randomize Seed", value=False
|
@@ -403,6 +410,7 @@ with gr.Blocks(
|
|
403 |
inputs=[
|
404 |
output_buf,
|
405 |
project_delight,
|
|
|
406 |
],
|
407 |
outputs=[
|
408 |
model_output_mesh,
|
|
|
102 |
seed = gr.Slider(
|
103 |
0, MAX_SEED, label="Seed", value=0, step=1
|
104 |
)
|
105 |
+
texture_size = gr.Slider(
|
106 |
+
1024,
|
107 |
+
4096,
|
108 |
+
label="UV texture size",
|
109 |
+
value=2048,
|
110 |
+
step=256,
|
111 |
+
)
|
112 |
with gr.Row():
|
113 |
randomize_seed = gr.Checkbox(
|
114 |
label="Randomize Seed", value=False
|
|
|
410 |
inputs=[
|
411 |
output_buf,
|
412 |
project_delight,
|
413 |
+
texture_size,
|
414 |
],
|
415 |
outputs=[
|
416 |
model_output_mesh,
|
asset3d_gen/data/utils.py
CHANGED
@@ -933,11 +933,21 @@ def get_images_from_grid(
|
|
933 |
return images
|
934 |
|
935 |
|
936 |
-
def post_process_texture(texture: np.ndarray, iter: int = 2) -> np.ndarray:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
937 |
for _ in range(iter):
|
938 |
-
texture = cv2.fastNlMeansDenoisingColored(texture, None,
|
939 |
texture = cv2.bilateralFilter(
|
940 |
-
texture, d=
|
941 |
)
|
942 |
|
943 |
return texture
|
|
|
933 |
return images
|
934 |
|
935 |
|
936 |
+
# def post_process_texture(texture: np.ndarray, iter: int = 2) -> np.ndarray:
|
937 |
+
# for _ in range(iter):
|
938 |
+
# texture = cv2.fastNlMeansDenoisingColored(texture, None, 13, 13, 9, 27)
|
939 |
+
# texture = cv2.bilateralFilter(
|
940 |
+
# texture, d=9, sigmaColor=80, sigmaSpace=80
|
941 |
+
# )
|
942 |
+
|
943 |
+
# return texture
|
944 |
+
|
945 |
+
|
946 |
+
def post_process_texture(texture: np.ndarray, iter: int = 1) -> np.ndarray:
|
947 |
for _ in range(iter):
|
948 |
+
texture = cv2.fastNlMeansDenoisingColored(texture, None, 5, 5, 7, 19)
|
949 |
texture = cv2.bilateralFilter(
|
950 |
+
texture, d=7, sigmaColor=50, sigmaSpace=50
|
951 |
)
|
952 |
|
953 |
return texture
|
asset3d_gen/models/segment_model.py
CHANGED
@@ -6,7 +6,6 @@ import cv2
|
|
6 |
import numpy as np
|
7 |
import rembg
|
8 |
import torch
|
9 |
-
from transformers import pipeline
|
10 |
from huggingface_hub import snapshot_download
|
11 |
from PIL import Image
|
12 |
from segment_anything import (
|
@@ -14,6 +13,7 @@ from segment_anything import (
|
|
14 |
SamPredictor,
|
15 |
sam_model_registry,
|
16 |
)
|
|
|
17 |
from asset3d_gen.utils.process_media import filter_small_connected_components
|
18 |
from asset3d_gen.validators.quality_checkers import ImageSegChecker
|
19 |
|
@@ -296,9 +296,11 @@ class RembgRemover(object):
|
|
296 |
class BMGG14Remover(object):
|
297 |
def __init__(self) -> None:
|
298 |
self.model = pipeline(
|
299 |
-
"image-segmentation",
|
|
|
|
|
300 |
)
|
301 |
-
|
302 |
def __call__(
|
303 |
self, image: Union[str, Image.Image, np.ndarray], save_path: str = None
|
304 |
):
|
@@ -309,7 +311,7 @@ class BMGG14Remover(object):
|
|
309 |
|
310 |
image = resize_pil(image)
|
311 |
output_image = self.model(image)
|
312 |
-
|
313 |
if save_path is not None:
|
314 |
os.makedirs(os.path.dirname(save_path), exist_ok=True)
|
315 |
output_image.save(save_path)
|
@@ -400,4 +402,4 @@ if __name__ == "__main__":
|
|
400 |
)
|
401 |
|
402 |
remover = BMGG14Remover()
|
403 |
-
remover("asset3d_gen/models/test_seg.jpg", "./seg.png")
|
|
|
6 |
import numpy as np
|
7 |
import rembg
|
8 |
import torch
|
|
|
9 |
from huggingface_hub import snapshot_download
|
10 |
from PIL import Image
|
11 |
from segment_anything import (
|
|
|
13 |
SamPredictor,
|
14 |
sam_model_registry,
|
15 |
)
|
16 |
+
from transformers import pipeline
|
17 |
from asset3d_gen.utils.process_media import filter_small_connected_components
|
18 |
from asset3d_gen.validators.quality_checkers import ImageSegChecker
|
19 |
|
|
|
296 |
class BMGG14Remover(object):
|
297 |
def __init__(self) -> None:
|
298 |
self.model = pipeline(
|
299 |
+
"image-segmentation",
|
300 |
+
model="briaai/RMBG-1.4",
|
301 |
+
trust_remote_code=True,
|
302 |
)
|
303 |
+
|
304 |
def __call__(
|
305 |
self, image: Union[str, Image.Image, np.ndarray], save_path: str = None
|
306 |
):
|
|
|
311 |
|
312 |
image = resize_pil(image)
|
313 |
output_image = self.model(image)
|
314 |
+
|
315 |
if save_path is not None:
|
316 |
os.makedirs(os.path.dirname(save_path), exist_ok=True)
|
317 |
output_image.save(save_path)
|
|
|
402 |
)
|
403 |
|
404 |
remover = BMGG14Remover()
|
405 |
+
remover("asset3d_gen/models/test_seg.jpg", "./seg.png")
|
common.py
CHANGED
@@ -21,10 +21,10 @@ from asset3d_gen.data.differentiable_render import entrypoint as render_api
|
|
21 |
from asset3d_gen.models.delight_model import DelightingModel
|
22 |
from asset3d_gen.models.gs_model import GaussianOperator
|
23 |
from asset3d_gen.models.segment_model import (
|
|
|
24 |
RembgRemover,
|
25 |
SAMPredictor,
|
26 |
trellis_preprocess,
|
27 |
-
BMGG14Remover,
|
28 |
)
|
29 |
from asset3d_gen.models.sr_model import ImageRealESRGAN
|
30 |
from asset3d_gen.scripts.render_gs import entrypoint as render_gs_api
|
@@ -539,6 +539,7 @@ def extract_3d_representations(
|
|
539 |
def extract_3d_representations_v2(
|
540 |
state: dict,
|
541 |
enable_delight: bool,
|
|
|
542 |
req: gr.Request,
|
543 |
):
|
544 |
output_root = TMP_DIR
|
@@ -585,6 +586,7 @@ def extract_3d_representations_v2(
|
|
585 |
output_path=mesh_obj_path,
|
586 |
skip_fix_mesh=False,
|
587 |
delight=enable_delight,
|
|
|
588 |
)
|
589 |
|
590 |
mesh_glb_path = os.path.join(user_dir, f"{filename}.glb")
|
|
|
21 |
from asset3d_gen.models.delight_model import DelightingModel
|
22 |
from asset3d_gen.models.gs_model import GaussianOperator
|
23 |
from asset3d_gen.models.segment_model import (
|
24 |
+
BMGG14Remover,
|
25 |
RembgRemover,
|
26 |
SAMPredictor,
|
27 |
trellis_preprocess,
|
|
|
28 |
)
|
29 |
from asset3d_gen.models.sr_model import ImageRealESRGAN
|
30 |
from asset3d_gen.scripts.render_gs import entrypoint as render_gs_api
|
|
|
539 |
def extract_3d_representations_v2(
|
540 |
state: dict,
|
541 |
enable_delight: bool,
|
542 |
+
texture_size: int,
|
543 |
req: gr.Request,
|
544 |
):
|
545 |
output_root = TMP_DIR
|
|
|
586 |
output_path=mesh_obj_path,
|
587 |
skip_fix_mesh=False,
|
588 |
delight=enable_delight,
|
589 |
+
texture_wh=[texture_size, texture_size],
|
590 |
)
|
591 |
|
592 |
mesh_glb_path = os.path.join(user_dir, f"{filename}.glb")
|