DegMaTsu commited on
Commit
f4d9286
·
verified ·
1 Parent(s): d218c4d

Upload reactor_swapper.py

Browse files
custom_nodes/comfyui-reactor-node/scripts/reactor_swapper.py CHANGED
@@ -304,10 +304,12 @@ def run_hyperswap(session, source_face, target_face, target_img):
304
 
305
  # Вычисляем аффинную матрицу
306
  M = get_affine_transform(target_landmarks_5.astype(np.float32), std_landmarks_256)
307
- M_inv = cv2.invertAffineTransform(M) # Обратная для paste
308
  logger.debug("Affine Matrix M (used for cropping):\n%s", M)
309
- logger.debug("Inverse Affine Matrix M_inv (used for paste):\n%s", M_inv)
310
 
 
 
 
 
311
  # Применяем аффинное преобразование с новой матрицей M
312
  crop = cv2.warpAffine(target_img, M, (256, 256), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REFLECT)
313
 
@@ -338,6 +340,7 @@ def run_hyperswap(session, source_face, target_face, target_img):
338
 
339
  # --- CPU FLOAT NORMALIZATION FIX ---
340
  # предотвращает появление "синей кожи" и "шума" при работе на CPU
 
341
  if isinstance(output, np.ndarray):
342
  # устранение NaN и бесконечностей
343
  output = np.nan_to_num(output, nan=0.0, posinf=255.0, neginf=0.0)
@@ -359,7 +362,7 @@ def run_hyperswap(session, source_face, target_face, target_img):
359
  # (ваш код без изменений, но без старой денормализации)
360
  output = output.transpose(1, 2, 0) # CHW -> HWC
361
  output = output[:, :, ::-1] # RGB -> BGR (Убедитесь, что это BGR, если вход был BGR)
362
- logger.debug("Output after denormalization: Min: %s | Max: %s | NaN count: %s", output.min(), output.max(), np.isnan(output).sum())
363
 
364
  # Визуализация после денормализации
365
  #### Что проверить:
@@ -368,9 +371,8 @@ def run_hyperswap(session, source_face, target_face, target_img):
368
  logger.debug("Output after denormalization: Min: %s | Max: %s", output.min(), output.max())
369
  # cv2.imshow("Output After Denormalization", output)
370
  # cv2.waitKey(1)
371
-
372
- # 7. Возвращаем результат 256x256 И обратную матрицу M_inv
373
- return output, M_inv
374
 
375
  def sort_by_order(face, order: str):
376
  if order == "left-right":
 
304
 
305
  # Вычисляем аффинную матрицу
306
  M = get_affine_transform(target_landmarks_5.astype(np.float32), std_landmarks_256)
 
307
  logger.debug("Affine Matrix M (used for cropping):\n%s", M)
 
308
 
309
+ #### Что проверить:
310
+ # Матрица `M` не должна содержать `NaN` или бесконечности.
311
+ # Если матрица нулевая или искаженная — проблема в точках `target_landmarks_5`.
312
+
313
  # Применяем аффинное преобразование с новой матрицей M
314
  crop = cv2.warpAffine(target_img, M, (256, 256), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REFLECT)
315
 
 
340
 
341
  # --- CPU FLOAT NORMALIZATION FIX ---
342
  # предотвращает появление "синей кожи" и "шума" при работе на CPU
343
+ # (адаптировано из патча patch_cpu_fix.diff)
344
  if isinstance(output, np.ndarray):
345
  # устранение NaN и бесконечностей
346
  output = np.nan_to_num(output, nan=0.0, posinf=255.0, neginf=0.0)
 
362
  # (ваш код без изменений, но без старой денормализации)
363
  output = output.transpose(1, 2, 0) # CHW -> HWC
364
  output = output[:, :, ::-1] # RGB -> BGR (Убедитесь, что это BGR, если вход был BGR)
365
+ logger.debug("Output after denormalization: Min: %s | Max: %s", output.min(), output.max())
366
 
367
  # Визуализация после денормализации
368
  #### Что проверить:
 
371
  logger.debug("Output after denormalization: Min: %s | Max: %s", output.min(), output.max())
372
  # cv2.imshow("Output After Denormalization", output)
373
  # cv2.waitKey(1)
374
+
375
+ return output, M # Возвращаем лицо (256x256) и матрицу M
 
376
 
377
  def sort_by_order(face, order: str):
378
  if order == "left-right":