Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import cv2 | |
| import numpy as np | |
| from PIL import Image | |
| import os | |
| from image_processor import ImageProcessor | |
| from model_generator import ModelGenerator | |
| from utils import create_output_directory, allowed_file | |
| def main(): | |
| st.title("Image to 3D Converter") | |
| st.write("Upload an image to convert it to a 3D model") | |
| # Initialize processors | |
| image_processor = ImageProcessor() | |
| model_generator = ModelGenerator() | |
| # File uploader | |
| uploaded_file = st.file_uploader("Choose an image file", type=['png', 'jpg', 'jpeg']) | |
| if uploaded_file is not None: | |
| if allowed_file(uploaded_file.name): | |
| # Read and display the uploaded image | |
| image = Image.open(uploaded_file) | |
| st.image(image, caption="Uploaded Image", use_column_width=True) | |
| # Convert PIL Image to numpy array | |
| image_np = np.array(image) | |
| # Process button | |
| if st.button("Convert to 3D"): | |
| with st.spinner("Processing..."): | |
| # Generate depth map | |
| depth_map = image_processor.generate_depth_map(image_np) | |
| # Display depth map | |
| st.image(depth_map, caption="Generated Depth Map", use_column_width=True) | |
| # Generate 3D model | |
| points = model_generator.depth_to_points(depth_map, scale=50.0) | |
| mesh = model_generator.generate_mesh(points) | |
| # Create output directory | |
| output_dir = create_output_directory() | |
| output_file = os.path.join(output_dir, "output_model.obj") | |
| # Save the mesh | |
| model_generator.save_mesh(mesh, output_file) | |
| # Provide download link | |
| with open(output_file, "rb") as file: | |
| st.download_button( | |
| label="Download 3D Model", | |
| data=file, | |
| file_name="3d_model.obj", | |
| mime="application/octet-stream" | |
| ) | |
| st.success("3D model generated successfully!") | |
| else: | |
| st.error("Please upload an image file (PNG, JPG, or JPEG)") | |
| if __name__ == "__main__": | |
| main() | |