Spaces:
Runtime error
Runtime error
| # 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() |