# 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) pred = model(image) pred_object_list = [str(i)+'_'+x['label'] for i, x in enumerate(pred)] 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,gr.Dropdown.update(choices = pred_object_list, interactive = True)) app = gr.Blocks() with app: gr.Markdown( """ ## Image Dissector """) 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(get_seg, inputs=[image_input], outputs=[gal1,object_output]) #image_input.change(fn=image_objects,inputs=image_input,outputs=object_output) app.launch()