你是一个资深的 AI 全栈工程师。我已经在一个拥有 RTX 5880 显卡(48GB 显存)的 Linux 服务器上,通过 Docker Compose 启动了一个名为 nerfstudio_3dgs 的容器。该容器内置了完整的 Nerfstudio 环境,并在后台持续运行。
我的宿主机与容器的目录挂载关系如下:
- 宿主机
./data/uploads挂载到容器/workspace/inputs - 宿主机
./data/outputs挂载到容器/workspace/outputs - 宿主机
./data/exports挂载到容器/workspace/exports
本项目是一个基于 TripoSR 的本地化单图到三维模型生成工作流。通过上传单张或少量图片,利用基于 LRM (Large Reconstruction Model) 架构的生成式 3D AI,秒级输出高保真的 3D 实体模型 (.obj / .glb),彻底解决传统摄影测量算法 (例如 COLMAP) 对于反光、纯色抛光表面 (如汽车、金属) 几何重建失败的痛点。
本项目采用前后端分离设计,完全基于本地计算 (如 RTX 5880) 完成 AI 生成。
-
前端 (HTML/JS/CSS):
- 单页应用 (SPA),使用纯原生 JavaScript 和 Tailwind 风格的 CSS 实现现代暗黑界面。
- 3D 模型渲染:采用 Google 的
<model-viewer>组件直接在浏览器中渲染输出的 3D 模型 (.obj 或 .glb格式)。 - 拖拽式上传、WebSocket 风格的状态轮询以展示 AI 推理进度。
-
后端 (FastAPI + Python):
- 使用
FastAPI构建轻量异步 API 服务器。 - AI 抠图管道:使用
rembg[gpu]自动剥离图片背景,净化生成质量。 - TripoSR 引擎集成:利用 PyTorch 前馈大模型对输入图片进行秒级张量推理,直接合成完整 Mesh 结构并在本地输出 3D 模型。
- 使用
-
环境依赖 (Pixi):
- 整个 Python 运行环境及所有前沿 AI 库基于轻量化的
pixi.toml管理,不污染宿主机系统。
- 整个 Python 运行环境及所有前沿 AI 库基于轻量化的
本项目依赖以下核心环境包,可通过 pixi run start 自动激活与加载:
fastapi,uvicorn,python-multiparttorch,torchvision,torchaudiotransformers,accelerate,xformerstrimesh,rembg[gpu],omegaconf,einops
- 安装依赖包:
pixi install- 点击运行后端:
pixi run start如果需要调试,可尝试:uvicorn main:app --host 0.0.0.0 --port 8000 --reload。
前端默认在 http://127.0.0.1:8000 启动,上传 1 张带主体的图片后即可见证 3 秒钟大模型奇迹。
- 步骤 3 (导出通用模型):利用 shell 命令找到刚才训练生成的
config.yml文件路径,然后执行导出:docker exec nerfstudio_3dgs ns-export gaussian-splat --load-config <找到的config.yml路径> --output-dir /workspace/exports/{task_id}
-
GET
/api/status/{task_id}:- 查询当前任务的状态(如:正在处理图片、正在训练、训练完成、失败)。请在后端使用简单的内存字典或 SQLite 记录状态即可。
-
静态文件服务:
- 将宿主机的
./data/exports/目录挂载为静态文件目录,以便前端可以通过 URL(如/exports/{task_id}/splat.ply)直接获取生成的 3D 模型文件。
- 将宿主机的
请提供一个精简且美观的 index.html,包含以下功能:
- 一个多文件上传的 input 框,支持选择数十张照片。
- 一个“开始生成 3D 模型”的按钮。
- 点击按钮后,通过 AJAX/Fetch 将照片提交到
/api/upload。 - 提交成功后,启动一个轮询机制(每 5 秒调用一次
/api/status/{task_id}),并在页面上显示当前的进度状态(最好有简单的进度条或文字提示)。 - 当状态变为“完成”时,提供生成的
.ply文件的下载链接,或者(如果是高级能力)在网页中直接渲染该.ply3D 模型。
请提供:
- 初始化项目所需的
pixi init和pixi add命令,或者直接提供pixi.toml的内容。 - 完整的
main.py后端代码。 - 完整的
index.html前端代码。 - 使用
pixi run启动后端服务的完整命令。代码需要考虑基础的异常捕获(如 docker 命令执行失败时的状态更新)。