genforall / app.py
sudharshan106's picture
Update app.py
622c81b
import streamlit as st
from PIL import Image
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
from transformers import DPTFeatureExtractor, DPTForDepthEstimation
import torch
import numpy as np
import os
from streamlit_drawable_canvas import st_canvas
from io import StringIO
from diffusers import StableDiffusionInpaintPipeline, StableDiffusionDepth2ImgPipeline
realtime_update = st.sidebar.button("Load the model")
selected_choice = st.sidebar.selectbox("Task", ("Generative", "Captured", "Drawing"))
if selected_choice == "Generative":
if realtime_update:
scheduler_text2image_base = EulerDiscreteScheduler.from_pretrained("stabilityai/stable-diffusion-2-base", subfolder="scheduler")
text2image = StableDiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-base", scheduler=scheduler_text2image_base, torch_dtype=torch.float32)
text2image = text2image.to("cuda" if torch.cuda.is_available() else "cpu")
col1, col2 = st.columns(2)
with col1:
stroke_width = st.sidebar.slider("Stroke width: ", 1, 25, 3)
initial_prompt = st.text_input('Write your prompt')
img = text2image(initial_prompt, num_inference_steps=25).images[0]
# st.image(img, caption=initial_prompt)
canvas_result = st_canvas(
fill_color="rgba(255, 165, 0, 0.9)", # Fixed fill color with some opacity
stroke_width=stroke_width,
stroke_color="#FFF",
background_color="#000",
background_image=img,
update_streamlit=False,
height=360,
width = 360,
drawing_mode="freedraw",
point_display_radius= 0,
key="canvas",
)
ok_button = st.button('inpaint')
# st.image(canvas_result.image_data, caption="mask 2")
with col2:
altered_prompt = st.text_input('Write your altered prompt')
if ok_button:
pipe2 = StableDiffusionInpaintPipeline.from_pretrained(
"stabilityai/stable-diffusion-2-inpainting",
torch_dtype=torch.float32,
)
pipe2.to("cpu")
image2 = pipe2(prompt=altered_prompt, image=img, mask_image=canvas_result.image_data, width=360, height=360,num_inference_steps=20).images[0]
st.image(image2, caption=altered_prompt)
elif selected_choice=="Captured":
uploaded_file = st.file_uploader("Choose an Image", type=["jpg", "jpeg", "png"])
col1, col2 = st.columns(2)
if uploaded_file is not None:
with col1:
image_file = Image.open(uploaded_file)
image_file = image_file.resize((360,360), Image.LANCZOS)
st.image(image_file)
prompt = st.text_input("write prompt for depth to image")
depth2image = StableDiffusionDepth2ImgPipeline.from_pretrained(
"stabilityai/stable-diffusion-2-depth",
torch_dtype=torch.float32,
).to("cpu")
image = depth2image(prompt=prompt, image=image_file,
strength=0.8,num_inference_steps=10).images[0]
if st.button("Get Variations"):
with col2:
st.image(image)