VikramSingh178 commited on
Commit
6b857b8
1 Parent(s): da7cb1d

chore: Resize base image and mask in generate_outpainting function

Browse files
Files changed (3) hide show
  1. ui/__init__.py +0 -0
  2. ui/ui.py +23 -8
  3. ui/utils.py +0 -27
ui/__init__.py ADDED
File without changes
ui/ui.py CHANGED
@@ -64,19 +64,23 @@ def process_masked_image(img):
64
 
65
  return base_image, mask
66
 
67
- def generate_outpainting(prompt, negative_prompt, num_inference_steps, strength, guidance_scale, mode, num_images, masked_image):
68
  base_image, mask = process_masked_image(masked_image)
69
 
70
  if base_image is None or mask is None:
71
  return None, None
72
 
73
- # Convert the images to bytes
 
 
 
 
74
  img_byte_arr = BytesIO()
75
- base_image.save(img_byte_arr, format='PNG')
76
  img_byte_arr = img_byte_arr.getvalue()
77
 
78
  mask_byte_arr = BytesIO()
79
- mask.save(mask_byte_arr, format='PNG')
80
  mask_byte_arr = mask_byte_arr.getvalue()
81
 
82
  # Prepare the files for multipart/form-data
@@ -110,7 +114,7 @@ def generate_outpainting(prompt, negative_prompt, num_inference_steps, strength,
110
  response_data = response.json()
111
  url = response_data['url']
112
  outpainted_image = load_image(url)
113
- return mask, outpainted_image
114
  except requests.exceptions.RequestException as e:
115
  print(f"Error in Kandinsky Inpainting API request: {e}")
116
  return None, None
@@ -121,6 +125,13 @@ def generate_mask_preview(img):
121
  return None
122
  return mask
123
 
 
 
 
 
 
 
 
124
  with gr.Blocks(theme='VikramSingh178/Webui-Theme') as demo:
125
  with gr.Tab("SdxL-Lora"):
126
  with gr.Row():
@@ -151,15 +162,19 @@ with gr.Blocks(theme='VikramSingh178/Webui-Theme') as demo:
151
  guidance_scale = gr.Slider(minimum=1.0, maximum=10.0, step=0.1, value=7.5, label="Guidance Scale")
152
  num_images= gr.Slider(minimum=1, maximum=10, step=1, value=1, label="Number of Images")
153
  mode_kandinsky = gr.Dropdown(choices=["s3_json", "b64_json"], value="s3_json", label="Mode")
 
 
 
154
  generate_button = gr.Button("Generate Inpainting", variant='primary')
155
- generate_mask_button_painting = gr.Button("Generate Mask", variant='secondary')
156
 
157
  with gr.Column(scale=1):
158
  mask_preview= gr.Image(label="Mask Preview", show_download_button=True, container=True)
159
  outpainted_image_preview = gr.Image(label="Outpainted Image (Kandinsky)", show_download_button=True, show_share_button=True, container=True)
 
160
  generate_mask_button_painting.click(generate_mask_preview, inputs=masked_image, outputs=[mask_preview])
161
  generate_button.click(generate_outpainting,
162
- inputs=[prompt, negative_prompt, num_inference_steps, strength, guidance_scale, mode_kandinsky, num_images, masked_image],
163
- outputs=[mask_preview, outpainted_image_preview])
164
 
165
  demo.launch()
 
64
 
65
  return base_image, mask
66
 
67
+ def generate_outpainting(prompt, negative_prompt, num_inference_steps, strength, guidance_scale, mode, num_images, masked_image, width, height):
68
  base_image, mask = process_masked_image(masked_image)
69
 
70
  if base_image is None or mask is None:
71
  return None, None
72
 
73
+ # Resize base image and mask
74
+ base_image_resized = base_image.resize((width, height))
75
+ mask_resized = mask.resize((width, height))
76
+
77
+ # Convert the resized images to bytes
78
  img_byte_arr = BytesIO()
79
+ base_image_resized.save(img_byte_arr, format='PNG')
80
  img_byte_arr = img_byte_arr.getvalue()
81
 
82
  mask_byte_arr = BytesIO()
83
+ mask_resized.save(mask_byte_arr, format='PNG')
84
  mask_byte_arr = mask_byte_arr.getvalue()
85
 
86
  # Prepare the files for multipart/form-data
 
114
  response_data = response.json()
115
  url = response_data['url']
116
  outpainted_image = load_image(url)
117
+ return mask_resized, outpainted_image
118
  except requests.exceptions.RequestException as e:
119
  print(f"Error in Kandinsky Inpainting API request: {e}")
120
  return None, None
 
125
  return None
126
  return mask
127
 
128
+ def resize_image(img, width, height):
129
+ if img is None:
130
+ return None
131
+ resized_img = img.resize((width, height))
132
+ return resized_img
133
+
134
+ # Gradio interface setup
135
  with gr.Blocks(theme='VikramSingh178/Webui-Theme') as demo:
136
  with gr.Tab("SdxL-Lora"):
137
  with gr.Row():
 
162
  guidance_scale = gr.Slider(minimum=1.0, maximum=10.0, step=0.1, value=7.5, label="Guidance Scale")
163
  num_images= gr.Slider(minimum=1, maximum=10, step=1, value=1, label="Number of Images")
164
  mode_kandinsky = gr.Dropdown(choices=["s3_json", "b64_json"], value="s3_json", label="Mode")
165
+ width_slider = gr.Slider(minimum=512, maximum=1024, step=1, value=800, label="Image Width")
166
+ height_slider = gr.Slider(minimum=512, maximum=1024, step=1, value=800, label="Image Height")
167
+ resize_button = gr.Button("Resize Image", variant='secondary')
168
  generate_button = gr.Button("Generate Inpainting", variant='primary')
169
+ generate_mask_button_painting = gr.Button("Generate Mask", variant='primary')
170
 
171
  with gr.Column(scale=1):
172
  mask_preview= gr.Image(label="Mask Preview", show_download_button=True, container=True)
173
  outpainted_image_preview = gr.Image(label="Outpainted Image (Kandinsky)", show_download_button=True, show_share_button=True, container=True)
174
+ resize_button.click(resize_image, inputs=[masked_image, width_slider, height_slider], outputs=[masked_image])
175
  generate_mask_button_painting.click(generate_mask_preview, inputs=masked_image, outputs=[mask_preview])
176
  generate_button.click(generate_outpainting,
177
+ inputs=[prompt, negative_prompt, num_inference_steps, strength, guidance_scale, mode_kandinsky, num_images, masked_image, width_slider, height_slider],
178
+ outputs=[mask_preview, outpainted_image_preview])
179
 
180
  demo.launch()
ui/utils.py DELETED
@@ -1,27 +0,0 @@
1
- from scripts.api_utils import ImageAugmentation
2
- from PIL import Image
3
-
4
-
5
-
6
-
7
- def augment_image(image_path, target_width, target_height, roi_scale, segmentation_model_name, detection_model_name):
8
- """
9
- Augment an image by extending its dimensions and generating masks.
10
-
11
- Args:
12
- image_path (str): Path to the image file.
13
- target_width (int): Target width for augmentation.
14
- target_height (int): Target height for augmentation.
15
- roi_scale (float): Scale factor for region of interest.
16
- segmentation_model_name (str): Name of the segmentation model.
17
- detection_model_name (str): Name of the detection model.
18
-
19
- Returns:
20
- Tuple[Image.Image, Image.Image]: Augmented image and inverted mask.
21
- """
22
- image = Image.open(image_path)
23
- image_augmentation = ImageAugmentation(target_width, target_height, roi_scale)
24
- image = image_augmentation.extend_image(image)
25
- mask = image_augmentation.generate_mask_from_bbox(image, segmentation_model_name, detection_model_name)
26
- inverted_mask = image_augmentation.invert_mask(mask)
27
- return image, inverted_mask