Astridkraft commited on
Commit
9b45c63
·
verified ·
1 Parent(s): 160993b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -14
app.py CHANGED
@@ -185,17 +185,14 @@ def create_face_mask(image, bbox_coords, mode):
185
  - padding_info: Dictionary mit Skalierungsinfo für späteres Compositing
186
  """
187
 
188
- # Herunterskalierung von Bild und BBox/SAM-Maske auf 512x512 für ControlnetInpaint-Pipeline
189
- def scale_image_and_mask_together(image, mask, target_size=512, bbox_coords=None, mode=None):
190
- if image is None or mask is None:
191
  raise ValueError("Bild oder Maske ist None")
192
-
193
- # MAX SIZE CHECK HINZUFÜGEN
194
- if image.width > MAX_IMAGE_SIZE or image.height > MAX_IMAGE_SIZE:
195
- raise ValueError(f"Bild zu groß! Maximal {MAX_IMAGE_SIZE}×{MAX_IMAGE_SIZE}")
196
-
197
- if image.size != mask.size:
198
- raise ValueError(f"Bild und Maske haben unterschiedliche Größen: {image.size} vs {mask.size}") #Stoppt Programm sofort mit Fehlermeldung!
199
 
200
  #Variablen für Bildmaße
201
  original_width, original_height = image.size
@@ -210,14 +207,16 @@ def scale_image_and_mask_together(image, mask, target_size=512, bbox_coords=None
210
 
211
  # Skaliere Bild und Maske getrennt voneinander aber proportional
212
  scaled_image = image.resize((new_width, new_height), Image.Resampling.LANCZOS)
213
- scaled_mask = mask.resize((new_width, new_height), Image.Resampling.NEAREST)
 
214
 
215
  # Auf Zielgröße padden (zentriert)
216
  #Image.new("RGB", (target_size, target_size), (0, 0, 0)) erstellt ein neues, leeres, schwarzes Bild in der Ziel-Verarbeitungsgröße des Modells (512×512 für SD 1.5 oder 1024×1024 für SDXL)
217
  # in das später das Bild eingefügt wird
218
  padded_image = Image.new("RGB", (target_size, target_size), (0, 0, 0))
219
  #Damit wird ein 512x512 Graustufenbild erstellt in das später die BBox eingefügt wird
220
- padded_mask = Image.new("L", (target_size, target_size), 0)
 
221
 
222
  # Zentrierte Position berechnen
223
  # das ist der Padding-Bereich bei nicht quadratischen 512x512 Bildern damit daraus 512x512-Bilder werden
@@ -229,7 +228,8 @@ def scale_image_and_mask_together(image, mask, target_size=512, bbox_coords=None
229
  padded_image.paste(scaled_image, (x_offset, y_offset))
230
  # mit Hilfe der Offsets wird nun die herunterskalierte BBox (entweder als Rechteck oder als SAM-Maske)
231
  # in das Graustufenbild eingefügt. Das Padding ergibt sich aus dem Graustufenbild!
232
- padded_mask.paste(scaled_mask, (x_offset, y_offset))
 
233
 
234
  # hiermit wird die (transformierte BBox)= skalierte BBox + Padding berechnet.
235
  scaled_bbox = None
@@ -261,8 +261,9 @@ def scale_image_and_mask_together(image, mask, target_size=512, bbox_coords=None
261
 
262
  print(f"📦 Padding hinzugefügt: Offsets ({x_offset}, {y_offset})")
263
  print(f"BBox gespeicher: {bbox_coords}, Modus:{mode}")
 
264
 
265
- return padded_image, padded_mask, padding_info
266
 
267
 
268
 
 
185
  - padding_info: Dictionary mit Skalierungsinfo für späteres Compositing
186
  """
187
 
188
+ # Herunterskalierung von Bild und BBox/SAM-Maske und SAM-Maske-Binär auf 512x512 für ControlnetInpaint-Pipeline
189
+ def scale_image_and_mask_together(image, mask_inpaint, mask_composite, target_size=512, bbox_coords=None, mode=None):
190
+ if image is None or mask_inpaint is None or mask_composite is None:
191
  raise ValueError("Bild oder Maske ist None")
192
+
193
+ if image.size != mask_inpaint.size or image.size != mask_composite.size:
194
+ raise ValueError("Bild und Masken haben unterschiedliche Größen: {image.size} vs {mask_inpaint.size}") #Stoppt Programm sofort mit Fehlermeldung!
195
+
 
 
 
196
 
197
  #Variablen für Bildmaße
198
  original_width, original_height = image.size
 
207
 
208
  # Skaliere Bild und Maske getrennt voneinander aber proportional
209
  scaled_image = image.resize((new_width, new_height), Image.Resampling.LANCZOS)
210
+ scaled_mask_inpaint = mask_inpaint.resize((new_width, new_height), Image.Resampling.NEAREST)
211
+ scaled_mask_composite = mask_composite.resize((new_width, new_height), Image.Resampling.NEAREST)
212
 
213
  # Auf Zielgröße padden (zentriert)
214
  #Image.new("RGB", (target_size, target_size), (0, 0, 0)) erstellt ein neues, leeres, schwarzes Bild in der Ziel-Verarbeitungsgröße des Modells (512×512 für SD 1.5 oder 1024×1024 für SDXL)
215
  # in das später das Bild eingefügt wird
216
  padded_image = Image.new("RGB", (target_size, target_size), (0, 0, 0))
217
  #Damit wird ein 512x512 Graustufenbild erstellt in das später die BBox eingefügt wird
218
+ padded_mask_inpaint = Image.new("L", (target_size, target_size), 0)
219
+ padded_mask_composite = Image.new("L", (target_size, target_size), 0)
220
 
221
  # Zentrierte Position berechnen
222
  # das ist der Padding-Bereich bei nicht quadratischen 512x512 Bildern damit daraus 512x512-Bilder werden
 
228
  padded_image.paste(scaled_image, (x_offset, y_offset))
229
  # mit Hilfe der Offsets wird nun die herunterskalierte BBox (entweder als Rechteck oder als SAM-Maske)
230
  # in das Graustufenbild eingefügt. Das Padding ergibt sich aus dem Graustufenbild!
231
+ padded_mask_inpaint.paste(scaled_mask, (x_offset, y_offset))
232
+ padded_mask_composite.paste(scaled_mask_composite, (x_offset, y_offset))
233
 
234
  # hiermit wird die (transformierte BBox)= skalierte BBox + Padding berechnet.
235
  scaled_bbox = None
 
261
 
262
  print(f"📦 Padding hinzugefügt: Offsets ({x_offset}, {y_offset})")
263
  print(f"BBox gespeicher: {bbox_coords}, Modus:{mode}")
264
+ print(f"✅ 1 Bild + 2 Masken skaliert. Inpaint-Maske binär: {np.unique(np.array(padded_mask_inpaint))}")
265
 
266
+ return padded_image, padded_mask_inpaint, padded_mask_composite, padding_info
267
 
268
 
269