DepthPainter / app.py
shukdevdatta123's picture
Create app.py
2722a13 verified
raw
history blame
2.32 kB
import streamlit as st
import requests
from PIL import Image
import torch
from transformers import DepthProImageProcessorFast, DepthProForDepthEstimation
import numpy as np
import io
# Check if CUDA is available
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# Load model and processor
image_processor = DepthProImageProcessorFast.from_pretrained("apple/DepthPro-hf")
model = DepthProForDepthEstimation.from_pretrained("apple/DepthPro-hf").to(device)
# Streamlit App UI
st.title("Interactive Depth-based AR Painting App")
# Upload image through Streamlit UI
uploaded_file = st.file_uploader("Upload an Image", type=["jpg", "jpeg", "png"])
if uploaded_file is not None:
image = Image.open(uploaded_file)
st.image(image, caption="Uploaded Image", use_column_width=True)
# Process image with DepthPro for depth estimation
inputs = image_processor(images=image, return_tensors="pt").to(device)
with torch.no_grad():
outputs = model(**inputs)
# Post-process depth output
post_processed_output = image_processor.post_process_depth_estimation(
outputs, target_sizes=[(image.height, image.width)],
)
depth = post_processed_output[0]["predicted_depth"]
depth = (depth - depth.min()) / (depth.max() - depth.min())
depth = depth * 255.
depth = depth.detach().cpu().numpy()
depth_image = Image.fromarray(depth.astype("uint8"))
st.subheader("Depth Map")
st.image(depth_image, caption="Estimated Depth Map", use_column_width=True)
# Colorize the depth map to make it more visible
colormap = depth_image.convert("RGB")
st.subheader("Colorized Depth Map")
st.image(colormap, caption="Colorized Depth Map", use_column_width=True)
# Option to save depth image
if st.button('Save Depth Image'):
depth_image.save('depth_image.png')
st.success("Depth image saved successfully!")
# Option for interactive painting (Placeholder)
st.subheader("Interactive Depth-based Painting (Demo Placeholder)")
st.write("This feature will allow users to paint on surfaces based on depth. For now, we can show the depth and its effects.")
# Placeholder for future interactive painting functionality.
# This could be extended with AR-based libraries or Unity integration in a full-scale app.