shrisdiablo's picture
requirements.txt
1521950 verified
import streamlit as st
from rembg import remove
from PIL import Image
import numpy as np
import requests
from io import BytesIO
def process_image(image):
output = remove(image)
input_rgb = np.array(image)[:, :, 0:3]
output_rgba = np.array(output)
alpha = output_rgba[:, :, 3]
alpha3 = np.dstack((alpha, alpha, alpha))
background_rgb = input_rgb.astype(float) * (1 - alpha3.astype(float) / 255)
background_rgb = background_rgb.astype(np.uint8)
background = Image.fromarray(background_rgb)
return output, background
def display_images(image):
img1, img2 = process_image(image)
col3, col4 = st.columns(2)
with col3:
st.image(img1, caption='Foreground Extraction', use_column_width=True)
with col4:
st.image(img2, caption='Background Extraction', use_column_width=True)
def main():
st.title("Foreground & Background Extraction")
images = {
"Sample 1": "https://images2.alphacoders.com/931/931778.jpg",
"Sample 2": "https://64.media.tumblr.com/862739618bd130769be6efed4d2b8841/63e31bdeb0842a99-ee/s1280x1920/49eb215c37a2235c915ded605f0ebcb81962af6c.jpg"
}
col1, col2 = st.columns(2)
sample_keys = list(images.keys())
with col1:
st.image(f"{images.get(sample_keys[0])}", caption=f"{sample_keys[0]}", width = 300)
with col2:
st.image(f"{images.get(sample_keys[1])}", caption=f"{sample_keys[1]}", width = 150)
option = st.radio(
"Choose an option:",
("Upload an Image", f"{sample_keys[0]}", f"{sample_keys[1]}")
)
if option in images:
# sample_image = Image.open(images[option])
response = requests.get(images[option])
sample_image = Image.open(BytesIO(response.content))
st.image(sample_image, caption=f'{option}', use_column_width=True)
display_images(sample_image)
elif option == "Upload an Image":
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])
if uploaded_file is not None:
original_image = Image.open(uploaded_file)
st.image(original_image, caption='Uploaded Image', use_column_width=True)
display_images(original_image)
if __name__ == "__main__":
main()