rkoushikroy2's picture
Add application file
9484fc5
# Portrait Photo Generator App
# Imports
from PIL import Image, ImageFilter
import numpy as np
from transformers import pipeline
import gradio as gr
import os
model = pipeline("image-segmentation", model="facebook/detr-resnet-50-panoptic")
pred = []
def img_resize(image):
width = 1280
width_percent = (width / float(image.size[0]))
height = int((float(image.size[1]) * float(width_percent)))
return image.resize((width, height))
def image_objects(image):
global pred
image = img_resize(image)
pred = model(image)
pred_object_list = [str(i)+'_'+x['label'] for i, x in enumerate(pred)]
return gr.Dropdown.update(choices = pred_object_list, interactive = True)
def blurr_object(image, object, blur_strength):
image = img_resize(image)
object_number = int(object.split('_')[0])
mask_array = np.asarray(pred[object_number]['mask'])/255
image_array = np.asarray(image)
mask_array_three_channel = np.zeros_like(image_array)
mask_array_three_channel[:,:,0] = mask_array
mask_array_three_channel[:,:,1] = mask_array
mask_array_three_channel[:,:,2] = mask_array
segmented_image = image_array*mask_array_three_channel
blur_image = np.asarray(image.filter(ImageFilter.GaussianBlur(radius=blur_strength)))
mask_array_three_channel_invert = 1-mask_array_three_channel
blur_image_reverse_mask = blur_image*mask_array_three_channel_invert
blurred_output_image = Image.fromarray((blur_image_reverse_mask).astype(np.uint8)+segmented_image.astype(np.uint8))
for _ in range(int(blur_strength//2.5)):
blurred_output_image = blurred_output_image.filter(ImageFilter.SMOOTH_MORE)
return blurred_output_image
app = gr.Blocks()
with app:
gr.Markdown(
"""
## Portrait Photo Generator
- Create stunning portrait photos by blurring the background of your selected object.
- Adjust the blurring strength using the slider.
""")
with gr.Row():
with gr.Column():
gr.Markdown(
"""
### Input Image
""")
image_input = gr.Image(type="pil")
with gr.Column():
with gr.Row():
gr.Markdown(
"""
### Found Objects
""")
with gr.Row():
blur_slider = gr.Slider(minimum=0.5, maximum=10, value=3, label="Adject Blur Strength")
with gr.Row():
object_output = gr.Dropdown(label="Select Object From Dropdown")
with gr.Row():
with gr.Column():
gr.Markdown(
"""
### Blurred Image Output
""")
image_output = gr.Image()
with gr.Column():
gr.Markdown(
"""
### Example Images
""")
gr.Examples(
examples=[
"test_images/dog_horse_cowboy.jpg",
"test_images/woman_and_dog.jpg",
"test_images/family_in_sofa.jpg",
"test_images/group_of_friends.jpg",
"test_images/people_group.jpg"
],
fn=image_objects,
inputs=image_input,
outputs=object_output)
image_input.change(fn=image_objects,
inputs=image_input,
outputs=object_output
)
object_output.change(fn=blurr_object,
inputs=[image_input, object_output, blur_slider],
outputs=image_output)
blur_slider.change(fn=blurr_object,
inputs=[image_input, object_output, blur_slider],
outputs=image_output)
app.launch()