postprocessing_focal_crop.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from modules import scripts_postprocessing, ui_components, errors
  2. import gradio as gr
  3. from modules.textual_inversion import autocrop
  4. class ScriptPostprocessingFocalCrop(scripts_postprocessing.ScriptPostprocessing):
  5. name = "Auto focal point crop"
  6. order = 4010
  7. def ui(self):
  8. with ui_components.InputAccordion(False, label="Auto focal point crop") as enable:
  9. face_weight = gr.Slider(label='Focal point face weight', value=0.9, minimum=0.0, maximum=1.0, step=0.05, elem_id=self.elem_id_suffix("postprocess_focal_crop_face_weight"))
  10. entropy_weight = gr.Slider(label='Focal point entropy weight', value=0.15, minimum=0.0, maximum=1.0, step=0.05, elem_id=self.elem_id_suffix("postprocess_focal_crop_entropy_weight"))
  11. edges_weight = gr.Slider(label='Focal point edges weight', value=0.5, minimum=0.0, maximum=1.0, step=0.05, elem_id=self.elem_id_suffix("postprocess_focal_crop_edges_weight"))
  12. debug = gr.Checkbox(label='Create debug image', elem_id=self.elem_id_suffix("train_process_focal_crop_debug"))
  13. return {
  14. "enable": enable,
  15. "face_weight": face_weight,
  16. "entropy_weight": entropy_weight,
  17. "edges_weight": edges_weight,
  18. "debug": debug,
  19. }
  20. def process(self, pp: scripts_postprocessing.PostprocessedImage, enable, face_weight, entropy_weight, edges_weight, debug):
  21. if not enable:
  22. return
  23. if not pp.shared.target_width or not pp.shared.target_height:
  24. return
  25. dnn_model_path = None
  26. try:
  27. dnn_model_path = autocrop.download_and_cache_models()
  28. except Exception:
  29. errors.report("Unable to load face detection model for auto crop selection. Falling back to lower quality haar method.", exc_info=True)
  30. autocrop_settings = autocrop.Settings(
  31. crop_width=pp.shared.target_width,
  32. crop_height=pp.shared.target_height,
  33. face_points_weight=face_weight,
  34. entropy_points_weight=entropy_weight,
  35. corner_points_weight=edges_weight,
  36. annotate_image=debug,
  37. dnn_model_path=dnn_model_path,
  38. )
  39. result, *others = autocrop.crop_image(pp.image, autocrop_settings)
  40. pp.image = result
  41. pp.extra_images = [pp.create_copy(x, nametags=["focal-crop-debug"], disable_processing=True) for x in others]