frogleo commited on
Commit
548fc2d
·
1 Parent(s): 6e8b9a9

完成简单版本的逻辑

Browse files
Files changed (1) hide show
  1. app.py +55 -28
app.py CHANGED
@@ -8,9 +8,11 @@ from pathlib import Path
8
  import uuid
9
  import argparse
10
  import torch
 
 
 
11
  import trimesh
12
 
13
-
14
  parser = argparse.ArgumentParser()
15
  parser.add_argument("--model_path", type=str, default='tencent/Hunyuan3D-2mini')
16
  parser.add_argument("--subfolder", type=str, default='hunyuan3d-dit-v2-mini-turbo')
@@ -178,39 +180,49 @@ def gen_shape(
178
 
179
  path = export_mesh(mesh, save_folder, textured=False)
180
 
181
- model_viewer_html = build_model_viewer_html(save_folder, height=HTML_HEIGHT, width=HTML_WIDTH)
182
 
183
- return model_viewer_html, path
184
 
185
- # if args.low_vram_mode:
186
- # torch.cuda.empty_cache()
187
 
188
- # if path is None:
189
- # raise gr.Error('Please generate a mesh first.')
190
 
191
- # # 简化模型
192
- # print(f'exporting {path}')
193
- # print(f'reduce face to {target_face_num}')
194
 
195
- # mesh = trimesh.load(path)
196
- # progress(0.5,desc="Optimizing mesh")
197
 
198
- # mesh = floater_remove_worker(mesh)
199
- # mesh = degenerate_face_remove_worker(mesh)
200
- # progress(0.6,desc="Reducing mesh faces")
201
- # mesh = face_reduce_worker(mesh, target_face_num)
202
- # save_folder = gen_save_folder()
203
 
204
- # file_type = "obj"
205
- # path = export_mesh(mesh, save_folder, textured=False, type=file_type)
 
 
206
 
207
- # # for preview
208
- # save_folder = gen_save_folder()
209
- # _ = export_mesh(mesh, save_folder, textured=False)
210
- # model_viewer_html = build_model_viewer_html(save_folder, height=HTML_HEIGHT, width=HTML_WIDTH, textured=False)
211
 
212
- # progress(1,desc="Complete")
213
- # return model_viewer_html, path
 
 
 
 
 
 
 
 
214
 
215
 
216
 
@@ -262,7 +274,8 @@ with gr.Blocks().queue() as demo:
262
  with gr.Column(scale=6):
263
  gr.Markdown("#### Generated Mesh")
264
  html_export_mesh = gr.HTML(HTML_OUTPUT_PLACEHOLDER, label='Output')
265
- path_output = gr.Textbox(label="Mesh Path")
 
266
 
267
  with gr.Column(scale=3):
268
  gr.Markdown("#### Image Examples")
@@ -272,7 +285,21 @@ with gr.Blocks().queue() as demo:
272
  gen_button.click(
273
  fn=gen_shape,
274
  inputs=[image,num_steps,cfg_scale,seed,octree_resolution,num_chunks,target_face_num, randomize_seed],
275
- outputs=[html_export_mesh, path_output]
276
  )
277
 
278
- demo.launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  import uuid
9
  import argparse
10
  import torch
11
+ import uvicorn
12
+ from fastapi import FastAPI
13
+ from fastapi.staticfiles import StaticFiles
14
  import trimesh
15
 
 
16
  parser = argparse.ArgumentParser()
17
  parser.add_argument("--model_path", type=str, default='tencent/Hunyuan3D-2mini')
18
  parser.add_argument("--subfolder", type=str, default='hunyuan3d-dit-v2-mini-turbo')
 
180
 
181
  path = export_mesh(mesh, save_folder, textured=False)
182
 
183
+ # model_viewer_html = build_model_viewer_html(save_folder, height=HTML_HEIGHT, width=HTML_WIDTH)
184
 
185
+ # return model_viewer_html, path
186
 
187
+ if args.low_vram_mode:
188
+ torch.cuda.empty_cache()
189
 
190
+ if path is None:
191
+ raise gr.Error('Please generate a mesh first.')
192
 
193
+ # 简化模型
194
+ print(f'exporting {path}')
195
+ print(f'reduce face to {target_face_num}')
196
 
197
+ mesh = trimesh.load(path)
198
+ progress(0.5,desc="Optimizing mesh")
199
 
200
+ mesh = floater_remove_worker(mesh)
201
+ mesh = degenerate_face_remove_worker(mesh)
202
+ progress(0.6,desc="Reducing mesh faces")
203
+ mesh = face_reduce_worker(mesh, target_face_num)
204
+ save_folder = gen_save_folder()
205
 
206
+ file_type = "obj"
207
+ objPath = export_mesh(mesh, save_folder, textured=False, type=file_type)
208
+ rel_objPath = os.path.relpath(objPath, SAVE_DIR)
209
+ objPath = "/static/"+rel_objPath
210
 
211
+ # for preview
212
+ save_folder = gen_save_folder()
213
+ _ = export_mesh(mesh, save_folder, textured=False)
214
+ model_viewer_html = build_model_viewer_html(save_folder, height=HTML_HEIGHT, width=HTML_WIDTH, textured=False)
215
 
216
+
217
+ glbPath = os.path.join(save_folder, f'white_mesh.glb')
218
+ rel_glbPath = os.path.relpath(glbPath, SAVE_DIR)
219
+ glbPath = "/static/"+rel_glbPath
220
+
221
+
222
+
223
+
224
+ progress(1,desc="Complete")
225
+ return model_viewer_html, glbPath, objPath
226
 
227
 
228
 
 
274
  with gr.Column(scale=6):
275
  gr.Markdown("#### Generated Mesh")
276
  html_export_mesh = gr.HTML(HTML_OUTPUT_PLACEHOLDER, label='Output')
277
+ objPath_output = gr.Textbox(label="Obj Path")
278
+ glbPath_output = gr.Textbox(label="Glb Path")
279
 
280
  with gr.Column(scale=3):
281
  gr.Markdown("#### Image Examples")
 
285
  gen_button.click(
286
  fn=gen_shape,
287
  inputs=[image,num_steps,cfg_scale,seed,octree_resolution,num_chunks,target_face_num, randomize_seed],
288
+ outputs=[html_export_mesh, glbPath_output, objPath_output]
289
  )
290
 
291
+ # https://discuss.huggingface.co/t/how-to-serve-an-html-file/33921/2
292
+ # create a FastAPI app
293
+ app = FastAPI()
294
+ # create a static directory to store the static files
295
+ static_dir = Path(SAVE_DIR).absolute()
296
+ static_dir.mkdir(parents=True, exist_ok=True)
297
+ app.mount("/static", StaticFiles(directory=static_dir, html=True), name="static")
298
+ shutil.copytree('./assets/env_maps', os.path.join(static_dir, 'env_maps'), dirs_exist_ok=True)
299
+
300
+ if args.low_vram_mode:
301
+ torch.cuda.empty_cache()
302
+
303
+ app = gr.mount_gradio_app(app, demo, path="/")
304
+ # demo.launch()
305
+ uvicorn.run(app, host=args.host, port=args.port)