From 2c43d52facd2185565729d525f2e39941794b97b Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Fri, 1 Nov 2024 10:11:27 -0400 Subject: [PATCH] detailer min/max size as fractions of image size Signed-off-by: Vladimir Mandic --- CHANGELOG.md | 1 + TODO.md | 2 +- modules/postprocess/yolo.py | 10 +++++++--- modules/shared.py | 4 ++-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8e6c23f3..de9f2c0c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ - Repo: move screenshots to GH pages - Update requirements - Fixes: + - detailer min/max size as fractions of image size - ipadapter load on-demand - ipadapter face use correct yolo model - fix legacy extensions access to shared objects diff --git a/TODO.md b/TODO.md index 5726e67da..2f3f90852 100644 --- a/TODO.md +++ b/TODO.md @@ -6,7 +6,7 @@ Main ToDo list can be found at [GitHub projects](https://github.com/users/vladma - async lowvram: - fp8: -- ipadapter-negative: https://github.com/huggingface/diffusers/discussions/7167 +- ipadapter-negative: - include reference styles ### Missing diff --git a/modules/postprocess/yolo.py b/modules/postprocess/yolo.py index 37944ac7c..44c7db20c 100644 --- a/modules/postprocess/yolo.py +++ b/modules/postprocess/yolo.py @@ -128,7 +128,9 @@ class YoloRestorer(Detailer): mask_image = None w, h = box[2] - box[0], box[3] - box[1] size = w * h / (image.width * image.height) - if (min(w, h) > shared.opts.detailer_min_size if shared.opts.detailer_min_size > 0 else True) and (max(w, h) < shared.opts.detailer_max_size if shared.opts.detailer_max_size > 0 else True): + min_size = (shared.opts.detailer_min_size if shared.opts.detailer_min_size > 0 else 0) * min(w, h) + max_size = (shared.opts.detailer_max_size if shared.opts.detailer_max_size > 0 else 1) * max(w, h) + if (min(w, h) > min_size) and (max(w, h) < max_size): if mask: mask_image = image.copy() mask_image = Image.new('L', image.size, 0) @@ -328,8 +330,10 @@ class YoloRestorer(Detailer): min_confidence = gr.Slider(label="Min confidence", elem_id=f"{tab}_detailer_conf", value=shared.opts.detailer_conf, minimum=0.0, maximum=1.0, step=0.05) iou = gr.Slider(label="Max overlap", elem_id=f"{tab}_detailer_iou", value=shared.opts.detailer_iou, minimum=0, maximum=1.0, step=0.05) with gr.Row(): - min_size = gr.Slider(label="Min size", elem_id=f"{tab}_detailer_min_size", value=shared.opts.detailer_min_size, minimum=0, maximum=1024, step=1) - max_size = gr.Slider(label="Max size", elem_id=f"{tab}_detailer_max_size", value=shared.opts.detailer_max_size, minimum=0, maximum=1024, step=1) + min_size = shared.opts.detailer_min_size if shared.opts.detailer_min_size < 1 else 0.0 + min_size = gr.Slider(label="Min size", elem_id=f"{tab}_detailer_min_size", value=min_size, minimum=0.1, maximum=1.0, step=0.05) + max_size = shared.opts.detailer_min_size if shared.opts.detailer_min_size < 1 and shared.opts.detailer_min_size > 0 else 1.0 + max_size = gr.Slider(label="Max size", elem_id=f"{tab}_detailer_max_size", value=max_size, minimum=0.1, maximum=1.0, step=0.05) detailers.change(fn=ui_settings_change, inputs=[detailers, classes, strength, padding, blur, min_confidence, max_detected, min_size, max_size, iou], outputs=[]) classes.change(fn=ui_settings_change, inputs=[detailers, classes, strength, padding, blur, min_confidence, max_detected, min_size, max_size, iou], outputs=[]) strength.change(fn=ui_settings_change, inputs=[detailers, classes, strength, padding, blur, min_confidence, max_detected, min_size, max_size, iou], outputs=[]) diff --git a/modules/shared.py b/modules/shared.py index 7d575d33e..342b5222c 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -821,8 +821,8 @@ options_templates.update(options_section(('postprocessing', "Postprocessing"), { "detailer_conf": OptionInfo(0.6, "Min confidence", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.05, "visible": False}), "detailer_max": OptionInfo(2, "Max detected", gr.Slider, {"minimum": 1, "maximum": 10, "step": 1, "visible": False}), "detailer_iou": OptionInfo(0.5, "Max overlap", gr.Slider, {"minimum": 0, "maximum": 1.0, "step": 0.05, "visible": False}), - "detailer_min_size": OptionInfo(0, "Min object size", gr.Slider, {"minimum": 0, "maximum": 1024, "step": 1, "visible": False}), - "detailer_max_size": OptionInfo(0, "Max object size", gr.Slider, {"minimum": 0, "maximum": 1024, "step": 1, "visible": False}), + "detailer_min_size": OptionInfo(0.0, "Min object size", gr.Slider, {"minimum": 0.1, "maximum": 1, "step": 0.05, "visible": False}), + "detailer_max_size": OptionInfo(1.0, "Max object size", gr.Slider, {"minimum": 0.1, "maximum": 1, "step": 0.05, "visible": False}), "detailer_padding": OptionInfo(20, "Item padding", gr.Slider, {"minimum": 0, "maximum": 100, "step": 1, "visible": False}), "detailer_blur": OptionInfo(10, "Item edge blur", gr.Slider, {"minimum": 0, "maximum": 100, "step": 1, "visible": False}), "detailer_strength": OptionInfo(0.5, "Detailer strength", gr.Slider, {"minimum": 0, "maximum": 1, "step": 0.01, "visible": False}),