moray1234's picture
update application file
6996904
raw
history blame
1.96 kB
import streamlit as st
from transformers import MobileViTFeatureExtractor, MobileViTForSemanticSegmentation
from PIL import Image
import numpy as np
import cv2
import torch
# Function to apply Gaussian Blur
def apply_gaussian_blur(image, sigma=15):
image_cv = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)
blurred = cv2.GaussianBlur(image_cv, (0, 0), sigma)
return Image.fromarray(cv2.cvtColor(blurred, cv2.COLOR_BGR2RGB))
# Function to load and process image for segmentation
def segment_image(image):
feature_extractor = MobileViTFeatureExtractor.from_pretrained("apple/mobilevit-small")
model = MobileViTForSemanticSegmentation.from_pretrained("apple/mobilevit-small")
inputs = feature_extractor(images=image, return_tensors="pt")
outputs = model(**inputs)
# Get segmentation mask
logits = outputs.logits
upsampled_logits = torch.nn.functional.interpolate(
logits, size=image.size[::-1], mode="bilinear", align_corners=False
)
segmentation = upsampled_logits.argmax(dim=1).squeeze().detach().cpu().numpy()
return segmentation
# Streamlit interface
st.title("Image Segmentation and Blur Effects")
st.write("Upload an image to apply segmentation, Gaussian blur, and depth-based blur.")
uploaded_file = st.file_uploader("Upload an Image (PNG, JPG, JPEG)", type=["png", "jpg", "jpeg"])
if uploaded_file:
image = Image.open(uploaded_file)
st.image(image, caption="Uploaded Image", use_column_width=True)
# Apply Gaussian Blur
sigma = st.slider("Gaussian Blur Intensity", 5, 50, 15)
blurred_image = apply_gaussian_blur(image, sigma)
st.image(blurred_image, caption="Gaussian Blurred Image", use_column_width=True)
# Perform segmentation
if st.button("Perform Segmentation"):
st.write("Segmenting the image...")
segmentation = segment_image(image)
st.image(segmentation, caption="Segmentation Mask", use_column_width=True)