yanranxiaoxi commited on
Commit
5864223
·
verified ·
1 Parent(s): 0acd026

feat: add video generate method

Browse files
Files changed (1) hide show
  1. app.py +20 -15
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
- # generate_video_button = gr.Button("生成视频")
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=True # 这样用户就可以与模型进行交互
273
  )
274
-
275
-
276
- # clear outputs
 
 
 
 
 
 
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
- # first we clear the existing 3D model
286
  img_input.change(clear_model_viewer, inputs=None, outputs=model_output)
287
 
288
- # then, generate the mesh and video
289
  generate_mesh_button.click(step_1_generate_obj, inputs=img_input, outputs=[obj_file_output, model_output])
290
- # generate_video_button.click(step_2_generate_video, inputs=img_input, outputs=video_file_output)
291
 
292
- demo.launch(auth=(os.environ.get('AUTH_USERNAME'), os.environ.get('AUTH_PASSWORD')))
 
 
 
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
+ )