File size: 2,513 Bytes
6d580b8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9c9afb9
6d580b8
 
 
 
bcfb055
 
 
 
 
35d2c61
51cca02
32767fa
9c9afb9
35d2c61
 
 
 
 
 
 
 
 
bcfb055
 
 
 
8c84c61
6d580b8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50a090f
6d580b8
 
 
 
18ca939
40329b6
50a090f
6d580b8
bcfb055
 
 
6d580b8
 
 
 
 
 
 
bcfb055
6d580b8
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# 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 get_seg(image, object):
    image = img_resize(image)

    #blur_image_reverse_mask = blur_image*mask_array_three_channel_invert
    seg_box=[]
    for i in range(len(pred)):
        #object_number = int(object.split('_')[0])
        mask_array = np.asarray(pred[i]['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
        seg_out=segmented_image.astype(np.uint8)
        seg_box.append(seg_out)  

    return(seg_box)



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.Row():
        with gr.Column():
                object_output = gr.Dropdown(label="Select Object From Dropdown")
    
    with gr.Row():
        with gr.Column():
            seg_btn = gr.Button(label="Run")
            gal1=gr.Gallery(type="filepath").style(grid=4)

    seg_btn.click(get_seg, inputs=[image_input,object_output], outputs=gal1)

    
    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])

app.launch()