Spaces:
Running
Running
import os | |
import uuid | |
from flask import jsonify, send_file, request | |
from main import * | |
from PIL import Image | |
import torch | |
import numpy as np | |
def image_to_3d_func(image_path, output_path="output_3d.obj"): | |
if image_to_3d_model is None: | |
return "Image-to-3D model not initialized." | |
pil_image = Image.open(image_path).convert("RGB") | |
image = torch.tensor(np.array(pil_image)).float().permute(2,0,1).unsqueeze(0) / 255.0 | |
image = image.to(device) | |
with torch.no_grad(): | |
mesh_obj = image_to_3d_model(image) | |
with open(output_path, 'w') as f: | |
f.write(mesh_obj) | |
return output_path | |
def image_to_3d_api(): | |
if 'image' not in request.files: | |
return jsonify({"error": "Image file is required"}), 400 | |
image_file = request.files['image'] | |
temp_image_path = f"temp_image_{uuid.uuid4()}.png" | |
image_file.save(temp_image_path) | |
output_file = image_to_3d_func(temp_image_path) | |
os.remove(temp_image_path) | |
if output_file == "Image-to-3D model not initialized.": | |
return jsonify({"error": "Image to 3D failed"}), 500 | |
return send_file(output_file, mimetype="model/obj", as_attachment=True, download_name="output_3d.obj") | |