Spaces:
Running
on
Zero
Running
on
Zero
feat: add video generate method
Browse files
app.py
CHANGED
@@ -175,7 +175,7 @@ def _default_render_cameras(batch_size: int = 1):
|
|
175 |
render_camera_intrinsics = _default_intrinsics().unsqueeze(0).repeat(extrinsics.shape[0], 1, 1)
|
176 |
render_cameras = _build_camera_standard(extrinsics, render_camera_intrinsics)
|
177 |
return render_cameras.unsqueeze(0).repeat(batch_size, 1, 1)
|
178 |
-
|
179 |
@spaces.GPU
|
180 |
def generate_mesh(image, source_size=512, render_size=384, mesh_size=512, export_mesh=False, export_video=True, fps=30):
|
181 |
image = preprocess_image(image, source_size).to(model_wrapper.device)
|
@@ -239,6 +239,7 @@ def step_3_display_3d_model(mesh_file):
|
|
239 |
example_folder = "assets"
|
240 |
examples = [os.path.join(example_folder, f) for f in os.listdir(example_folder) if f.endswith(('.png', '.jpg', '.jpeg', '.webp'))][:10]
|
241 |
|
|
|
242 |
with gr.Blocks() as demo:
|
243 |
with gr.Row():
|
244 |
gr.Markdown("""
|
@@ -249,15 +250,11 @@ with gr.Blocks() as demo:
|
|
249 |
""")
|
250 |
|
251 |
with gr.Row():
|
252 |
-
|
253 |
with gr.Column():
|
254 |
img_input = gr.Image(type="pil", label="输入图像")
|
255 |
examples_component = gr.Examples(examples=examples, inputs=img_input, outputs=None, examples_per_page=3)
|
256 |
generate_mesh_button = gr.Button("生成模型")
|
257 |
-
|
258 |
-
obj_file_output = gr.File(label="下载 .obj 文件")
|
259 |
-
# video_file_output = gr.File(label="下载视频")
|
260 |
-
|
261 |
with gr.Column():
|
262 |
model_output = LitModel3D(
|
263 |
clear_color=[0, 0, 0, 0], # 可调整背景颜色,以获得更好的对比度
|
@@ -269,24 +266,32 @@ with gr.Blocks() as demo:
|
|
269 |
camera_position=(0, 0, 2), # 将设置初始摄像机位置,使模型居中
|
270 |
zoom_speed=0.5, # 将调整变焦速度,以便更好地控制
|
271 |
pan_speed=0.5, # 将调整摇摄速度,以便更好地控制
|
272 |
-
interactive=
|
273 |
)
|
274 |
-
|
275 |
-
|
276 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
277 |
def clear_model_viewer():
|
278 |
"""在加载新模型前重置 Model3D 组件。"""
|
279 |
return gr.update(value=None)
|
280 |
-
|
281 |
def generate_and_visualize(image):
|
282 |
mesh_path = step_1_generate_obj(image)
|
283 |
return mesh_path, mesh_path
|
284 |
|
285 |
-
#
|
286 |
img_input.change(clear_model_viewer, inputs=None, outputs=model_output)
|
287 |
|
288 |
-
#
|
289 |
generate_mesh_button.click(step_1_generate_obj, inputs=img_input, outputs=[obj_file_output, model_output])
|
290 |
-
|
291 |
|
292 |
-
demo.launch(
|
|
|
|
|
|
175 |
render_camera_intrinsics = _default_intrinsics().unsqueeze(0).repeat(extrinsics.shape[0], 1, 1)
|
176 |
render_cameras = _build_camera_standard(extrinsics, render_camera_intrinsics)
|
177 |
return render_cameras.unsqueeze(0).repeat(batch_size, 1, 1)
|
178 |
+
|
179 |
@spaces.GPU
|
180 |
def generate_mesh(image, source_size=512, render_size=384, mesh_size=512, export_mesh=False, export_video=True, fps=30):
|
181 |
image = preprocess_image(image, source_size).to(model_wrapper.device)
|
|
|
239 |
example_folder = "assets"
|
240 |
examples = [os.path.join(example_folder, f) for f in os.listdir(example_folder) if f.endswith(('.png', '.jpg', '.jpeg', '.webp'))][:10]
|
241 |
|
242 |
+
|
243 |
with gr.Blocks() as demo:
|
244 |
with gr.Row():
|
245 |
gr.Markdown("""
|
|
|
250 |
""")
|
251 |
|
252 |
with gr.Row():
|
|
|
253 |
with gr.Column():
|
254 |
img_input = gr.Image(type="pil", label="输入图像")
|
255 |
examples_component = gr.Examples(examples=examples, inputs=img_input, outputs=None, examples_per_page=3)
|
256 |
generate_mesh_button = gr.Button("生成模型")
|
257 |
+
generate_video_button = gr.Button("生成视频")
|
|
|
|
|
|
|
258 |
with gr.Column():
|
259 |
model_output = LitModel3D(
|
260 |
clear_color=[0, 0, 0, 0], # 可调整背景颜色,以获得更好的对比度
|
|
|
266 |
camera_position=(0, 0, 2), # 将设置初始摄像机位置,使模型居中
|
267 |
zoom_speed=0.5, # 将调整变焦速度,以便更好地控制
|
268 |
pan_speed=0.5, # 将调整摇摄速度,以便更好地控制
|
269 |
+
interactive=False # 这样用户就可以与模型进行交互
|
270 |
)
|
271 |
+
|
272 |
+
with gr.Row():
|
273 |
+
with gr.Column():
|
274 |
+
video_file_output = gr.File(label="下载视频")
|
275 |
+
with gr.Column():
|
276 |
+
obj_file_output = gr.File(label="下载 .obj 文件")
|
277 |
+
|
278 |
+
|
279 |
+
# 清除输出
|
280 |
def clear_model_viewer():
|
281 |
"""在加载新模型前重置 Model3D 组件。"""
|
282 |
return gr.update(value=None)
|
283 |
+
|
284 |
def generate_and_visualize(image):
|
285 |
mesh_path = step_1_generate_obj(image)
|
286 |
return mesh_path, mesh_path
|
287 |
|
288 |
+
# 首先清除输出的 3D 模型
|
289 |
img_input.change(clear_model_viewer, inputs=None, outputs=model_output)
|
290 |
|
291 |
+
# 然后生成模型和视频
|
292 |
generate_mesh_button.click(step_1_generate_obj, inputs=img_input, outputs=[obj_file_output, model_output])
|
293 |
+
generate_video_button.click(step_2_generate_video, inputs=img_input, outputs=video_file_output)
|
294 |
|
295 |
+
demo.launch(
|
296 |
+
auth=(os.environ.get('AUTH_USERNAME'), os.environ.get('AUTH_PASSWORD'))
|
297 |
+
)
|