From 84d168e3f0020b7ce44aaa46d3e4336721a1b8fc Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Tue, 26 Sep 2023 12:31:12 +0800 Subject: [PATCH 01/19] dev(narugo): add eyes detections --- docs/source/api_doc/detect/eye.rst | 14 ++++ .../detect/eye_detect_benchmark.plot.py | 37 +++++++++ .../api_doc/detect/eye_detect_demo.plot.py | 19 +++++ docs/source/api_doc/detect/index.rst | 1 + imgutils/detect/__init__.py | 1 + imgutils/detect/eye.py | 76 +++++++++++++++++++ requirements-doc.txt | 2 +- test/detect/test_censor.py | 2 +- test/detect/test_eye.py | 32 ++++++++ test/detect/test_halfbody.py | 2 +- 10 files changed, 183 insertions(+), 3 deletions(-) create mode 100644 docs/source/api_doc/detect/eye.rst create mode 100644 docs/source/api_doc/detect/eye_detect_benchmark.plot.py create mode 100644 docs/source/api_doc/detect/eye_detect_demo.plot.py create mode 100644 imgutils/detect/eye.py create mode 100644 test/detect/test_eye.py diff --git a/docs/source/api_doc/detect/eye.rst b/docs/source/api_doc/detect/eye.rst new file mode 100644 index 00000000000..98f39be8362 --- /dev/null +++ b/docs/source/api_doc/detect/eye.rst @@ -0,0 +1,14 @@ +imgutils.detect.eye +========================== + +.. currentmodule:: imgutils.detect.eye + +.. automodule:: imgutils.detect.eye + + +detect_eyes +------------------------------ + +.. autofunction:: detect_eyes + + diff --git a/docs/source/api_doc/detect/eye_detect_benchmark.plot.py b/docs/source/api_doc/detect/eye_detect_benchmark.plot.py new file mode 100644 index 00000000000..f4c31266ad7 --- /dev/null +++ b/docs/source/api_doc/detect/eye_detect_benchmark.plot.py @@ -0,0 +1,37 @@ +import random + +from benchmark import BaseBenchmark, create_plot_cli +from imgutils.detect import detect_eyes + + +class EyeDetectBenchmark(BaseBenchmark): + def __init__(self, level, version): + BaseBenchmark.__init__(self) + self.level = level + self.version = version + + def load(self): + from imgutils.detect.eye import _open_eye_detect_model + _ = _open_eye_detect_model(level=self.level, version=self.version) + + def unload(self): + from imgutils.detect.eye import _open_eye_detect_model + _open_eye_detect_model.cache_clear() + + def run(self): + image_file = random.choice(self.all_images) + _ = detect_eyes(image_file, level=self.level, version=self.version) + + +if __name__ == '__main__': + create_plot_cli( + [ + ('eye v1.0 (yolov8s)', EyeDetectBenchmark('s', 'v1.0')), + ('eye v1.0 (yolov8n)', EyeDetectBenchmark('n', 'v1.0')), + ('eye v0.8 (yolov8s)', EyeDetectBenchmark('s', 'v0.8')), + ('eye v0.7 (yolov8s)', EyeDetectBenchmark('s', 'v0.7')), + ], + title='Benchmark for Anime Eyes Detections', + run_times=10, + try_times=20, + )() diff --git a/docs/source/api_doc/detect/eye_detect_demo.plot.py b/docs/source/api_doc/detect/eye_detect_demo.plot.py new file mode 100644 index 00000000000..643d2007527 --- /dev/null +++ b/docs/source/api_doc/detect/eye_detect_demo.plot.py @@ -0,0 +1,19 @@ +from imgutils.detect import detect_eyes +from imgutils.detect.eye import _LABELS +from imgutils.detect.visual import detection_visualize +from plot import image_plot + + +def _detect(img, **kwargs): + return detection_visualize(img, detect_eyes(img, **kwargs), _LABELS) + + +if __name__ == '__main__': + image_plot( + (_detect('nian.png'), 'large scale'), + (_detect('two_bikini_girls.png'), 'closed heads'), + (_detect('genshin_post.jpg'), 'multiple'), + (_detect('mostima_post.jpg'), 'anime style'), + columns=2, + figsize=(12, 9), + ) diff --git a/docs/source/api_doc/detect/index.rst b/docs/source/api_doc/detect/index.rst index 4e8c53e77c5..d681957a459 100644 --- a/docs/source/api_doc/detect/index.rst +++ b/docs/source/api_doc/detect/index.rst @@ -10,6 +10,7 @@ imgutils.detect :maxdepth: 3 censor + eye face halfbody hand diff --git a/imgutils/detect/__init__.py b/imgutils/detect/__init__.py index fe37f41116b..09973dedfaf 100644 --- a/imgutils/detect/__init__.py +++ b/imgutils/detect/__init__.py @@ -9,6 +9,7 @@ :align: center """ from .censor import detect_censors +from .eye import detect_eyes from .face import detect_faces from .halfbody import detect_halfbody from .hand import detect_hands diff --git a/imgutils/detect/eye.py b/imgutils/detect/eye.py new file mode 100644 index 00000000000..c00771f461a --- /dev/null +++ b/imgutils/detect/eye.py @@ -0,0 +1,76 @@ +""" +Overview: + Detect eyes in anime images. + + Trained on dataset `deepghs/anime_eye_detection `_ with YOLOv8. + + .. image:: eye_detect_demo.plot.py.svg + :align: center + + This is an overall benchmark of all the eye detect models: + + .. image:: eye_detect_benchmark.plot.py.svg + :align: center + +""" +from functools import lru_cache +from typing import List, Tuple + +from huggingface_hub import hf_hub_download + +from ._yolo import _image_preprocess, _data_postprocess +from ..data import ImageTyping, load_image, rgb_encode +from ..utils import open_onnx_model + + +@lru_cache() +def _open_eye_detect_model(level: str = 's', version: str = 'v1.0'): + return open_onnx_model(hf_hub_download( + f'deepghs/anime_eye_detection', + f'eye_detect_{version}_{level}/model.onnx' + )) + + +_LABELS = ["eye"] + + +def detect_eyes(image: ImageTyping, level: str = 's', version: str = 'v1.0', max_infer_size=640, + conf_threshold: float = 0.3, iou_threshold: float = 0.3) \ + -> List[Tuple[Tuple[int, int, int, int], str, float]]: + """ + Overview: + Detect human eyes in anime images. + + :param image: Image to detect. + :param level: The model level being used can be either `s` or `n`. + The `n` model runs faster with smaller system overhead, while the `s` model achieves higher accuracy. + The default value is `s`. + :param version: Version of model, default is ``v1.0``. + :param max_infer_size: The maximum image size used for model inference, if the image size exceeds this limit, + the image will be resized and used for inference. The default value is `640` pixels. + :param conf_threshold: The confidence threshold, only detection results with confidence scores above + this threshold will be returned. The default value is `0.3`. + :param iou_threshold: The detection area coverage overlap threshold, areas with overlaps above this threshold + will be discarded. The default value is `0.3`. + :return: The detection results list, each item includes the detected area `(x0, y0, x1, y1)`, + the target type (always `eye`) and the target confidence score. + + Examples:: + >>> from imgutils.detect import detect_eyes, detection_visualize + >>> + >>> image = 'squat.jpg' + >>> result = detect_eyes(image) # detect it + >>> result + [((127, 21, 629, 637), 'eye', 0.9040350914001465)] + >>> + >>> # visualize it + >>> from matplotlib import pyplot as plt + >>> plt.imshow(detection_visualize(image, result)) + >>> plt.show() + """ + image = load_image(image, mode='RGB') + new_image, old_size, new_size = _image_preprocess(image, max_infer_size) + + data = rgb_encode(new_image)[None, ...] + output, = _open_eye_detect_model(level, version).run(['output0'], {'images': data}) + return _data_postprocess(output[0], conf_threshold, iou_threshold, old_size, new_size, _LABELS) diff --git a/requirements-doc.txt b/requirements-doc.txt index 38f526368de..c48f1aaacb3 100644 --- a/requirements-doc.txt +++ b/requirements-doc.txt @@ -1,7 +1,7 @@ Jinja2~=3.0.0 sphinx~=3.2.0 sphinx_rtd_theme~=0.4.3 -enum_tools +enum_tools~=0.9.0 sphinx-toolbox plantumlcli>=0.0.2 packaging diff --git a/test/detect/test_censor.py b/test/detect/test_censor.py index d711c160ccb..5025ea15e10 100644 --- a/test/detect/test_censor.py +++ b/test/detect/test_censor.py @@ -13,7 +13,7 @@ def _release_model_after_run(): @pytest.mark.unittest -class TestDetectHead: +class TestDetectCensor: def test_detect_censors(self): detections = detect_censors(get_testfile('nude_girl.png')) assert len(detections) == 3 diff --git a/test/detect/test_eye.py b/test/detect/test_eye.py new file mode 100644 index 00000000000..85c88dd7424 --- /dev/null +++ b/test/detect/test_eye.py @@ -0,0 +1,32 @@ +import pytest + +from imgutils.detect.eye import _open_eye_detect_model, detect_eyes +from test.testings import get_testfile + + +@pytest.fixture(scope='module', autouse=True) +def _release_model_after_run(): + try: + yield + finally: + _open_eye_detect_model.cache_clear() + + +@pytest.mark.unittest +class TestDetectEyes: + def test_detect_eye(self): + detections = detect_eyes(get_testfile('nude_girl.png')) + assert len(detections) == 2 + + values = [] + for bbox, label, score in detections: + assert label in {'eye'} + values.append((bbox, int(score * 1000) / 1000)) + + assert values == pytest.approx([ + ((350, 160, 382, 173), 0.788), + ((294, 170, 319, 181), 0.756), + ]) + + def test_detect_eye_none(self): + assert detect_eyes(get_testfile('png_full.png')) == [] diff --git a/test/detect/test_halfbody.py b/test/detect/test_halfbody.py index e10091ebd10..2371b80e0eb 100644 --- a/test/detect/test_halfbody.py +++ b/test/detect/test_halfbody.py @@ -13,7 +13,7 @@ def _release_model_after_run(): @pytest.mark.unittest -class TestDetectHead: +class TestDetectHalfBody: def test_detect_halfbody(self): detections = detect_halfbody(get_testfile('nude_girl.png')) assert len(detections) == 1 From d69e5d04f6303a12bab0a21293912a55ecb7eb14 Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Tue, 26 Sep 2023 04:37:41 +0000 Subject: [PATCH 02/19] dev(narugo): auto sync Tue, 26 Sep 2023 04:37:41 +0000 --- .../detect/eye_detect_benchmark.plot.py.svg | 2546 +++++++++++++++++ .../detect/eye_detect_demo.plot.py.svg | 524 ++++ 2 files changed, 3070 insertions(+) create mode 100644 docs/source/api_doc/detect/eye_detect_benchmark.plot.py.svg create mode 100644 docs/source/api_doc/detect/eye_detect_demo.plot.py.svg diff --git a/docs/source/api_doc/detect/eye_detect_benchmark.plot.py.svg b/docs/source/api_doc/detect/eye_detect_benchmark.plot.py.svg new file mode 100644 index 00000000000..1679499c798 --- /dev/null +++ b/docs/source/api_doc/detect/eye_detect_benchmark.plot.py.svg @@ -0,0 +1,2546 @@ + + + + + + + + 2023-09-26T04:37:15.815012 + image/svg+xml + + + Matplotlib v3.7.3, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/source/api_doc/detect/eye_detect_demo.plot.py.svg b/docs/source/api_doc/detect/eye_detect_demo.plot.py.svg new file mode 100644 index 00000000000..880f27cba64 --- /dev/null +++ b/docs/source/api_doc/detect/eye_detect_demo.plot.py.svg @@ -0,0 +1,524 @@ + + + + + + + + 2023-09-26T04:37:20.952582 + image/svg+xml + + + Matplotlib v3.7.3, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From ca6c9381c5172731a1ba9011f8473e22068a462c Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Tue, 26 Sep 2023 12:40:21 +0800 Subject: [PATCH 03/19] dev(narugo): use another image --- .../api_doc/detect/eye_detect_demo.plot.py | 6 +- .../detect/eye_detect_demo.plot.py.svg | 524 ------------------ 2 files changed, 3 insertions(+), 527 deletions(-) delete mode 100644 docs/source/api_doc/detect/eye_detect_demo.plot.py.svg diff --git a/docs/source/api_doc/detect/eye_detect_demo.plot.py b/docs/source/api_doc/detect/eye_detect_demo.plot.py index 643d2007527..675eac261cf 100644 --- a/docs/source/api_doc/detect/eye_detect_demo.plot.py +++ b/docs/source/api_doc/detect/eye_detect_demo.plot.py @@ -12,8 +12,8 @@ def _detect(img, **kwargs): image_plot( (_detect('nian.png'), 'large scale'), (_detect('two_bikini_girls.png'), 'closed heads'), - (_detect('genshin_post.jpg'), 'multiple'), - (_detect('mostima_post.jpg'), 'anime style'), + (_detect('halfbody/squat.jpg'), 'pose'), + (_detect('mostima_post.jpg'), 'multiple'), columns=2, - figsize=(12, 9), + figsize=(10, 9), ) diff --git a/docs/source/api_doc/detect/eye_detect_demo.plot.py.svg b/docs/source/api_doc/detect/eye_detect_demo.plot.py.svg deleted file mode 100644 index 880f27cba64..00000000000 --- a/docs/source/api_doc/detect/eye_detect_demo.plot.py.svg +++ /dev/null @@ -1,524 +0,0 @@ - - - - - - - - 2023-09-26T04:37:20.952582 - image/svg+xml - - - Matplotlib v3.7.3, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 2a178fe7a2a8651d03ef546c72add48262f6eb21 Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Tue, 26 Sep 2023 04:52:14 +0000 Subject: [PATCH 04/19] dev(narugo): auto sync Tue, 26 Sep 2023 04:52:14 +0000 --- .../detect/eye_detect_demo.plot.py.svg | 481 ++++++++++++++++++ 1 file changed, 481 insertions(+) create mode 100644 docs/source/api_doc/detect/eye_detect_demo.plot.py.svg diff --git a/docs/source/api_doc/detect/eye_detect_demo.plot.py.svg b/docs/source/api_doc/detect/eye_detect_demo.plot.py.svg new file mode 100644 index 00000000000..67ec6b3cf6e --- /dev/null +++ b/docs/source/api_doc/detect/eye_detect_demo.plot.py.svg @@ -0,0 +1,481 @@ + + + + + + + + 2023-09-26T04:51:53.668506 + image/svg+xml + + + Matplotlib v3.7.3, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 49d74314f97bfe64e559cf1680ef5f39f6b956d9 Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Tue, 26 Sep 2023 13:58:01 +0800 Subject: [PATCH 05/19] dev(narugo): fix examples --- imgutils/detect/eye.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imgutils/detect/eye.py b/imgutils/detect/eye.py index c00771f461a..ace44fc87b0 100644 --- a/imgutils/detect/eye.py +++ b/imgutils/detect/eye.py @@ -61,7 +61,7 @@ def detect_eyes(image: ImageTyping, level: str = 's', version: str = 'v1.0', max >>> image = 'squat.jpg' >>> result = detect_eyes(image) # detect it >>> result - [((127, 21, 629, 637), 'eye', 0.9040350914001465)] + [((297, 239, 341, 271), 'eye', 0.7760562896728516), ((230, 289, 263, 308), 'eye', 0.7682342529296875)] >>> >>> # visualize it >>> from matplotlib import pyplot as plt From 17df867e7f45dbc6e154f00851a6f61e6e680e71 Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Tue, 26 Sep 2023 14:11:02 +0800 Subject: [PATCH 06/19] dev(narugo): use version v0.2.6 --- imgutils/config/meta.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imgutils/config/meta.py b/imgutils/config/meta.py index db12b9657c2..738abbf969a 100644 --- a/imgutils/config/meta.py +++ b/imgutils/config/meta.py @@ -7,7 +7,7 @@ __TITLE__ = 'imgutils' #: Version of this project. -__VERSION__ = '0.2.5' +__VERSION__ = '0.2.6' #: Short description of the project, will be included in ``setup.py``. __DESCRIPTION__ = 'A convenient and user-friendly anime-style image data processing library that integrates ' \ From 0f6f9816c396e8446a5c6fa7e2445a00e8b2ba2c Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Fri, 29 Sep 2023 12:57:27 +0800 Subject: [PATCH 07/19] dev(narugo): use both --- imgutils/utils/onnxruntime.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/imgutils/utils/onnxruntime.py b/imgutils/utils/onnxruntime.py index 455ee892afe..22a37a11b9d 100644 --- a/imgutils/utils/onnxruntime.py +++ b/imgutils/utils/onnxruntime.py @@ -63,14 +63,18 @@ def get_onnx_provider(provider: Optional[str] = None): f'but unsupported provider {provider!r} found.') -def _open_onnx_model(ckpt: str, provider: str) -> InferenceSession: +def _open_onnx_model(ckpt: str, provider: str, use_cpu: bool = True) -> InferenceSession: options = SessionOptions() options.graph_optimization_level = GraphOptimizationLevel.ORT_ENABLE_ALL if provider == "CPUExecutionProvider": options.intra_op_num_threads = os.cpu_count() + providers = [provider] + if use_cpu and "CPUExecutionProvider" not in providers: + providers.append("CPUExecutionProvider") + logging.info(f'Model {ckpt!r} loaded with provider {provider!r}') - return InferenceSession(ckpt, options, [provider]) + return InferenceSession(ckpt, options, providers=providers) def open_onnx_model(ckpt: str, mode: str = None) -> InferenceSession: From 2c7cf25db06b1f858e849752198f1fba11a0f936 Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Sun, 8 Oct 2023 17:21:02 +0800 Subject: [PATCH 08/19] dev(narugo): add overlap dropping for tags --- docs/source/api_doc/tagging/index.rst | 1 + docs/source/api_doc/tagging/overlap.rst | 22 +++++++ imgutils/tagging/__init__.py | 1 + imgutils/tagging/deepdanbooru.py | 8 ++- imgutils/tagging/mldanbooru.py | 10 ++- imgutils/tagging/overlap.py | 81 +++++++++++++++++++++++++ imgutils/tagging/wd14.py | 6 +- test/tagging/test_deepdanbooru.py | 44 ++++++++++++++ test/tagging/test_mldanbooru.py | 39 ++++++++++++ test/tagging/test_overlap.py | 42 +++++++++++++ test/tagging/test_wd14.py | 48 +++++++++++++++ 11 files changed, 297 insertions(+), 5 deletions(-) create mode 100644 docs/source/api_doc/tagging/overlap.rst create mode 100644 imgutils/tagging/overlap.py create mode 100644 test/tagging/test_overlap.py diff --git a/docs/source/api_doc/tagging/index.rst b/docs/source/api_doc/tagging/index.rst index 7a67a0e87c7..989a0928135 100644 --- a/docs/source/api_doc/tagging/index.rst +++ b/docs/source/api_doc/tagging/index.rst @@ -13,3 +13,4 @@ imgutils.tagging wd14 deepdanbooru format + overlap diff --git a/docs/source/api_doc/tagging/overlap.rst b/docs/source/api_doc/tagging/overlap.rst new file mode 100644 index 00000000000..f62b0a44daf --- /dev/null +++ b/docs/source/api_doc/tagging/overlap.rst @@ -0,0 +1,22 @@ +imgutils.tagging.overlap +==================================== + +.. currentmodule:: imgutils.tagging.overlap + +.. automodule:: imgutils.tagging.overlap + + +drop_overlap_tags +---------------------------------- + +.. autofunction:: drop_overlap_tags + + + +drop_overlaps_for_dict +---------------------------------- + +.. autofunction:: drop_overlaps_for_dict + + + diff --git a/imgutils/tagging/__init__.py b/imgutils/tagging/__init__.py index ca1f028d67b..997e7e4f596 100644 --- a/imgutils/tagging/__init__.py +++ b/imgutils/tagging/__init__.py @@ -11,4 +11,5 @@ from .deepdanbooru import get_deepdanbooru_tags from .format import tags_to_text from .mldanbooru import get_mldanbooru_tags +from .overlap import drop_overlap_tags, drop_overlaps_for_dict from .wd14 import get_wd14_tags diff --git a/imgutils/tagging/deepdanbooru.py b/imgutils/tagging/deepdanbooru.py index 5c8c7a69029..87e4b2373e5 100644 --- a/imgutils/tagging/deepdanbooru.py +++ b/imgutils/tagging/deepdanbooru.py @@ -16,6 +16,7 @@ from PIL import Image from huggingface_hub import hf_hub_download +from .overlap import drop_overlaps_for_dict from ..data import ImageTyping, load_image from ..utils import open_onnx_model @@ -31,7 +32,7 @@ def _get_deepdanbooru_labels(): general_indexes = list(np.where(df["category"] == 0)[0]) character_indexes = list(np.where(df["category"] == 4)[0]) return tag_names, tag_real_names, \ - rating_indexes, general_indexes, character_indexes + rating_indexes, general_indexes, character_indexes @lru_cache() @@ -61,7 +62,8 @@ def _image_preprocess(image: Image.Image) -> np.ndarray: def get_deepdanbooru_tags(image: ImageTyping, use_real_name: bool = False, - general_threshold: float = 0.5, character_threshold: float = 0.5): + general_threshold: float = 0.5, character_threshold: float = 0.5, + drop_overlap: bool = False): """ Overview: Get tags for anime image based on ``deepdanbooru`` model. @@ -120,6 +122,8 @@ def get_deepdanbooru_tags(image: ImageTyping, use_real_name: bool = False, general_names = [labels[i] for i in general_indexes] general_res = [x for x in general_names if x[1] > general_threshold] general_res = dict(general_res) + if drop_overlap: + general_res = drop_overlaps_for_dict(general_res) # Everything else is characters: pick anywhere prediction confidence > threshold character_names = [labels[i] for i in character_indexes] diff --git a/imgutils/tagging/mldanbooru.py b/imgutils/tagging/mldanbooru.py index 7b1f28b81a6..aa6e547dd2d 100644 --- a/imgutils/tagging/mldanbooru.py +++ b/imgutils/tagging/mldanbooru.py @@ -11,6 +11,7 @@ from PIL import Image from huggingface_hub import hf_hub_download +from .overlap import drop_overlaps_for_dict from ..data import load_image, ImageTyping from ..utils import open_onnx_model @@ -57,7 +58,8 @@ def _get_mldanbooru_labels(use_real_name: bool = False) -> Tuple[List[str], List def get_mldanbooru_tags(image: ImageTyping, use_real_name: bool = False, - threshold: float = 0.7, size: int = 448, keep_ratio: bool = False): + threshold: float = 0.7, size: int = 448, keep_ratio: bool = False, + drop_overlap: bool = False): """ Overview: Tagging image with ML-Danbooru, similar to @@ -103,4 +105,8 @@ def get_mldanbooru_tags(image: ImageTyping, use_real_name: bool = False, output = (1 / (1 + np.exp(-native_output))).reshape(-1) tags = _get_mldanbooru_labels(use_real_name) pairs = sorted([(tags[i], ratio) for i, ratio in enumerate(output)], key=lambda x: (-x[1], x[0])) - return {tag: float(ratio) for tag, ratio in pairs if ratio >= threshold} + + general_tags = {tag: float(ratio) for tag, ratio in pairs if ratio >= threshold} + if drop_overlap: + general_tags = drop_overlaps_for_dict(general_tags) + return general_tags diff --git a/imgutils/tagging/overlap.py b/imgutils/tagging/overlap.py new file mode 100644 index 00000000000..6510ff98fc7 --- /dev/null +++ b/imgutils/tagging/overlap.py @@ -0,0 +1,81 @@ +import json +from functools import lru_cache +from typing import Mapping, List + +from huggingface_hub import hf_hub_download + + +@lru_cache() +def _get_overlap_tags() -> Mapping[str, List[str]]: + """ + Retrieve the overlap tag information from the specified Hugging Face Hub repository. + + This function downloads a JSON file containing tag overlap information and parses it into a dictionary. + + :return: A dictionary where keys are tags and values are lists of overlapping tags. + :rtype: Mapping[str, List[str]] + """ + json_file = hf_hub_download( + 'alea31415/tag_filtering', + 'overlap_tags.json', + repo_type='dataset', + ) + with open(json_file, 'r') as file: + data = json.load(file) + + return { + entry['query']: entry['has_overlap'] + for entry in data if 'has_overlap' in entry and entry['has_overlap'] + } + + +def drop_overlap_tags(tags: List[str]) -> List[str]: + """ + Drop overlapping tags from the given list of tags. + + This function removes tags that have overlaps with other tags based on precomputed overlap information. + + :param tags: A list of tags. + :type tags: List[str] + :return: A list of tags without overlaps. + :rtype: List[str] + """ + overlap_tags_dict = _get_overlap_tags() + result_tags = [] + tags_underscore = [tag.replace(' ', '_') for tag in tags] + + for tag, tag_ in zip(tags, tags_underscore): + + to_remove = False + + # Case 1: If the tag is a key and some of the associated values are in tags + if tag_ in overlap_tags_dict: + overlap_values = set(val for val in overlap_tags_dict[tag_]) + if overlap_values.intersection(set(tags_underscore)): + to_remove = True + + # Checking superword condition separately + for tag_another in tags: + if tag in tag_another and tag != tag_another: + to_remove = True + break + + if not to_remove: + result_tags.append(tag) + + return result_tags + + +def drop_overlaps_for_dict(tags: Mapping[str, float]) -> Mapping[str, float]: + """ + Drop overlapping tags from the given dictionary of tags with confidence scores. + + This function removes tags that have overlaps with other tags based on precomputed overlap information. + + :param tags: A dictionary where keys are tags and values are confidence scores. + :type tags: Mapping[str, float] + :return: A dictionary with non-overlapping tags and their corresponding confidence scores. + :rtype: Mapping[str, float] + """ + key_set = set(drop_overlap_tags(list(tags.keys()))) + return {tag: confidence for tag, confidence in tags.items() if tag in key_set} diff --git a/imgutils/tagging/wd14.py b/imgutils/tagging/wd14.py index c24f16e1326..32ce1ff7f7c 100644 --- a/imgutils/tagging/wd14.py +++ b/imgutils/tagging/wd14.py @@ -11,6 +11,7 @@ import numpy as np import pandas as pd +from .overlap import drop_overlaps_for_dict from ..data import load_image, ImageTyping from ..utils import open_onnx_model @@ -83,7 +84,8 @@ def _get_wd14_labels() -> Tuple[List[str], List[int], List[int], List[int]]: def get_wd14_tags(image: ImageTyping, model_name: str = "ConvNextV2", - general_threshold: float = 0.35, character_threshold: float = 0.85): + general_threshold: float = 0.35, character_threshold: float = 0.85, + drop_overlap: bool = False): """ Overview: Tagging image by wd14 v2 model. Similar to @@ -148,6 +150,8 @@ def get_wd14_tags(image: ImageTyping, model_name: str = "ConvNextV2", general_names = [labels[i] for i in general_indexes] general_res = [x for x in general_names if x[1] > general_threshold] general_res = dict(general_res) + if drop_overlap: + general_res = drop_overlaps_for_dict(general_res) # Everything else is characters: pick anywhere prediction confidence > threshold character_names = [labels[i] for i in character_indexes] diff --git a/test/tagging/test_deepdanbooru.py b/test/tagging/test_deepdanbooru.py index 168448f88f8..a5c3c007284 100644 --- a/test/tagging/test_deepdanbooru.py +++ b/test/tagging/test_deepdanbooru.py @@ -27,3 +27,47 @@ def test_get_deepdanbooru_tags(self, _release_model_after_run): assert tags['1girl'] >= 0.85 assert tags['ring'] > 0.8 assert chars['hu_tao_(genshin_impact)'] >= 0.7 + + def test_get_danbooru_tags_sample(self): + rating, tags, chars = get_deepdanbooru_tags(get_testfile('nude_girl.png')) + assert rating == pytest.approx({ + 'rating:safe': 8.940696716308594e-06, + 'rating:questionable': 0.012878596782684326, + 'rating:explicit': 0.992286205291748, + }, abs=1e-3) + assert tags == pytest.approx({ + '1girl': 0.9923416376113892, 'armpits': 0.9226008653640747, 'arms_behind_head': 0.5620371699333191, + 'arms_up': 0.7268614172935486, 'bangs': 0.7465004920959473, 'black_border': 0.9081975221633911, + 'blush': 0.9306209683418274, 'breasts': 0.9972158670425415, + 'eyebrows_visible_through_hair': 0.6717097163200378, 'hair_between_eyes': 0.7044132947921753, + 'hair_intakes': 0.6295598745346069, 'horns': 0.9387356042861938, 'letterboxed': 1.0, + 'long_hair': 0.9871174693107605, 'looking_at_viewer': 0.8953969478607178, + 'medium_breasts': 0.90318363904953, 'navel': 0.9425054788589478, 'nipples': 0.9989081621170044, + 'nude': 0.9452821016311646, 'pillarboxed': 0.9854832887649536, 'purple_eyes': 0.8120401501655579, + 'pussy': 0.9943721294403076, 'pussy_juice': 0.8238061666488647, 'red_hair': 0.9203640222549438, + 'smile': 0.6659414172172546, 'solo': 0.9483305811882019, 'spread_legs': 0.7633067965507507, + 'stomach': 0.5396291017532349, 'sweat': 0.7880321145057678, 'thighs': 0.7451953291893005, + 'uncensored': 0.9594683647155762, 'very_long_hair': 0.740706205368042, + }, abs=1e-3) + assert chars == pytest.approx({'surtr_(arknights)': 0.9373699426651001}, abs=1e-3) + + def test_get_danbooru_tags_drop_overlap(self): + rating, tags, chars = get_deepdanbooru_tags(get_testfile('nude_girl.png'), drop_overlap=True) + assert rating == pytest.approx({ + 'rating:safe': 8.940696716308594e-06, + 'rating:questionable': 0.012878596782684326, + 'rating:explicit': 0.992286205291748, + }, abs=1e-3) + assert tags == pytest.approx({ + '1girl': 0.9923416376113892, 'armpits': 0.9226007461547852, 'arms_behind_head': 0.5620364546775818, + 'arms_up': 0.7268615365028381, 'bangs': 0.7465004324913025, 'black_border': 0.9081975221633911, + 'blush': 0.9306209683418274, 'eyebrows_visible_through_hair': 0.6717095971107483, + 'hair_between_eyes': 0.7044129967689514, 'hair_intakes': 0.6295579671859741, 'horns': 0.938735842704773, + 'letterboxed': 1.0, 'looking_at_viewer': 0.8953973650932312, 'medium_breasts': 0.9031840562820435, + 'navel': 0.9425054788589478, 'nipples': 0.9989081621170044, 'nude': 0.9452821016311646, + 'pillarboxed': 0.9854832887649536, 'purple_eyes': 0.8120403289794922, 'pussy_juice': 0.8238056898117065, + 'red_hair': 0.9203639030456543, 'smile': 0.6659414172172546, 'solo': 0.948330819606781, + 'spread_legs': 0.7633066177368164, 'stomach': 0.5396295189857483, 'sweat': 0.7880324721336365, + 'thighs': 0.745195746421814, 'uncensored': 0.9594683647155762, 'very_long_hair': 0.7407056093215942 + }, abs=1e-3) + assert chars == pytest.approx({'surtr_(arknights)': 0.9373699426651001}, abs=1e-3) diff --git a/test/tagging/test_mldanbooru.py b/test/tagging/test_mldanbooru.py index c1331aa9470..88f74538135 100644 --- a/test/tagging/test_mldanbooru.py +++ b/test/tagging/test_mldanbooru.py @@ -22,3 +22,42 @@ def test_get_mldanbooru_tags(self, keep_ratio): tags = get_mldanbooru_tags(get_testfile('6125785.jpg'), keep_ratio=keep_ratio) assert tags['1girl'] >= 0.95 + + def test_get_mldanbooru_tags_sample(self): + tags = get_mldanbooru_tags(get_testfile('nude_girl.png')) + assert tags == pytest.approx({ + '1girl': 0.9999977350234985, 'breasts': 0.999940037727356, 'nipples': 0.999920129776001, + 'solo': 0.9993574023246765, 'pussy': 0.9993218183517456, 'horns': 0.9977452158927917, + 'nude': 0.995971143245697, 'purple_eyes': 0.9957809448242188, 'long_hair': 0.9929291605949402, + 'navel': 0.9814828038215637, 'armpits': 0.9808009266853333, 'spread_legs': 0.9767358303070068, + 'pussy_juice': 0.959962785243988, 'blush': 0.9482676386833191, 'uncensored': 0.9446588158607483, + 'looking_at_viewer': 0.9295657873153687, 'red_hair': 0.919776201248169, + 'medium_breasts': 0.9020175337791443, 'completely_nude': 0.8965569138526917, 'arms_up': 0.8882529139518738, + 'on_back': 0.8701885342597961, 'arms_behind_head': 0.8692260980606079, 'lying': 0.8653205037117004, + 'pillow': 0.8645844459533691, 'bangs': 0.8618668913841248, 'smile': 0.8531544804573059, + 'very_long_hair': 0.8332053422927856, 'pointy_ears': 0.8194612264633179, 'stomach': 0.8194073438644409, + 'hair_intakes': 0.8191318511962891, 'on_bed': 0.8055890202522278, 'sweat': 0.7933878302574158, + 'thighs': 0.7835342884063721, 'hair_between_eyes': 0.7693091630935669, + 'eyebrows_visible_through_hair': 0.7672545313835144, 'closed_mouth': 0.7638942003250122, + 'breasts_apart': 0.7527053952217102, 'bed': 0.7515304088592529, 'slit_pupils': 0.7464283108711243, + 'barefoot': 0.7429600954055786, 'bed_sheet': 0.7186222076416016, 'fang': 0.7162102460861206, + 'clitoris': 0.7013473510742188, + }, abs=1e-3) + + def test_get_mldanbooru_tags_no_overlap(self): + tags = get_mldanbooru_tags(get_testfile('nude_girl.png'), drop_overlap=True) + assert tags == pytest.approx({ + '1girl': 0.9999977350234985, 'nipples': 0.999920129776001, 'solo': 0.9993574023246765, + 'horns': 0.9977452158927917, 'purple_eyes': 0.9957809448242188, 'navel': 0.9814828038215637, + 'armpits': 0.9808009266853333, 'spread_legs': 0.9767358303070068, 'pussy_juice': 0.959962785243988, + 'blush': 0.9482676386833191, 'uncensored': 0.9446586966514587, 'looking_at_viewer': 0.9295657873153687, + 'red_hair': 0.9197760820388794, 'medium_breasts': 0.9020175337791443, 'completely_nude': 0.8965569138526917, + 'arms_up': 0.8882529139518738, 'on_back': 0.8701885342597961, 'arms_behind_head': 0.8692260980606079, + 'pillow': 0.8645844459533691, 'bangs': 0.8618668913841248, 'smile': 0.8531544804573059, + 'very_long_hair': 0.8332052230834961, 'pointy_ears': 0.8194612264633179, 'stomach': 0.8194073438644409, + 'hair_intakes': 0.8191318511962891, 'on_bed': 0.8055890202522278, 'sweat': 0.793387770652771, + 'thighs': 0.7835341691970825, 'hair_between_eyes': 0.7693091034889221, + 'eyebrows_visible_through_hair': 0.7672545909881592, 'closed_mouth': 0.7638942003250122, + 'breasts_apart': 0.7527053356170654, 'slit_pupils': 0.7464284300804138, 'barefoot': 0.7429600358009338, + 'bed_sheet': 0.7186222672462463, 'fang': 0.7162103652954102, 'clitoris': 0.7013473510742188 + }, abs=1e-3) diff --git a/test/tagging/test_overlap.py b/test/tagging/test_overlap.py new file mode 100644 index 00000000000..6535fc7e840 --- /dev/null +++ b/test/tagging/test_overlap.py @@ -0,0 +1,42 @@ +import pytest + +from imgutils.tagging import drop_overlaps_for_dict, drop_overlap_tags + + +@pytest.fixture() +def complex_dict_tags(): + return { + '1girl': 0.998362123966217, 'solo': 0.9912548065185547, 'long_hair': 0.9401906728744507, + 'breasts': 0.983635425567627, 'looking_at_viewer': 0.9146994352340698, 'blush': 0.8892400860786438, + 'smile': 0.43393653631210327, 'bangs': 0.49712443351745605, 'large_breasts': 0.5196534395217896, + 'navel': 0.9653235077857971, 'hair_between_eyes': 0.5786703824996948, 'very_long_hair': 0.8142435550689697, + 'closed_mouth': 0.9369247555732727, 'nipples': 0.9660118222236633, 'purple_eyes': 0.9676010012626648, + 'collarbone': 0.588348925113678, 'nude': 0.9496222734451294, 'red_hair': 0.9200156331062317, + 'sweat': 0.8690457344055176, 'horns': 0.9711267948150635, 'pussy': 0.9868264198303223, + 'spread_legs': 0.9603149890899658, 'armpits': 0.9024748802185059, 'stomach': 0.6723923087120056, + 'arms_up': 0.9380699396133423, 'completely_nude': 0.9002960920333862, 'uncensored': 0.8612104058265686, + 'pussy_juice': 0.6021570563316345, 'feet_out_of_frame': 0.39779460430145264, 'on_bed': 0.610720157623291, + 'arms_behind_head': 0.44814401865005493, 'breasts_apart': 0.39798974990844727, 'clitoris': 0.5310801267623901, + } + + +@pytest.mark.unittest +class TestTaggingOverlap: + def test_drop_overlap_tags(self): + assert drop_overlap_tags(['1girl', 'solo', 'long_hair', 'very_long_hair', 'red_hair']) == \ + ['1girl', 'solo', 'very_long_hair', 'red_hair'] + + def test_drop_overlaps_for_dict_complex(self, complex_dict_tags): + assert drop_overlaps_for_dict(complex_dict_tags) == pytest.approx({ + '1girl': 0.998362123966217, 'solo': 0.9912548065185547, 'looking_at_viewer': 0.9146994352340698, + 'blush': 0.8892400860786438, 'smile': 0.43393653631210327, 'bangs': 0.49712443351745605, + 'large_breasts': 0.5196534395217896, 'navel': 0.9653235077857971, 'hair_between_eyes': 0.5786703824996948, + 'very_long_hair': 0.8142435550689697, 'closed_mouth': 0.9369247555732727, 'nipples': 0.9660118222236633, + 'purple_eyes': 0.9676010012626648, 'collarbone': 0.588348925113678, 'red_hair': 0.9200156331062317, + 'sweat': 0.8690457344055176, 'horns': 0.9711267948150635, 'spread_legs': 0.9603149890899658, + 'armpits': 0.9024748802185059, 'stomach': 0.6723923087120056, 'arms_up': 0.9380699396133423, + 'completely_nude': 0.9002960920333862, 'uncensored': 0.8612104058265686, 'pussy_juice': 0.6021570563316345, + 'feet_out_of_frame': 0.39779460430145264, 'on_bed': 0.610720157623291, + 'arms_behind_head': 0.44814401865005493, 'breasts_apart': 0.39798974990844727, + 'clitoris': 0.5310801267623901 + }) diff --git a/test/tagging/test_wd14.py b/test/tagging/test_wd14.py index 3318795a64b..39caee962a4 100644 --- a/test/tagging/test_wd14.py +++ b/test/tagging/test_wd14.py @@ -26,3 +26,51 @@ def test_get_wd14_tags(self): assert 0.35 <= rating['sensitive'] <= 0.45 assert tags['1girl'] >= 0.95 assert chars['hu_tao_(genshin_impact)'] >= 0.95 + + def test_wd14_tags_sample(self): + rating, tags, chars = get_wd14_tags(get_testfile('nude_girl.png')) + assert rating == pytest.approx({ + 'general': 0.0020540356636047363, + 'sensitive': 0.0080718994140625, + 'questionable': 0.003170192241668701, + 'explicit': 0.984081506729126, + }, abs=1e-3) + assert tags == pytest.approx({ + '1girl': 0.998362123966217, 'solo': 0.9912548065185547, 'long_hair': 0.9401906728744507, + 'breasts': 0.983635425567627, 'looking_at_viewer': 0.9146994352340698, 'blush': 0.8892400860786438, + 'smile': 0.43393653631210327, 'bangs': 0.49712443351745605, 'large_breasts': 0.5196534395217896, + 'navel': 0.9653235077857971, 'hair_between_eyes': 0.5786703824996948, 'very_long_hair': 0.8142435550689697, + 'closed_mouth': 0.9369247555732727, 'nipples': 0.9660118222236633, 'purple_eyes': 0.9676010012626648, + 'collarbone': 0.588348925113678, 'nude': 0.9496222734451294, 'red_hair': 0.9200156331062317, + 'sweat': 0.8690457344055176, 'horns': 0.9711267948150635, 'pussy': 0.9868264198303223, + 'spread_legs': 0.9603149890899658, 'armpits': 0.9024748802185059, 'stomach': 0.6723923087120056, + 'arms_up': 0.9380699396133423, 'completely_nude': 0.9002960920333862, 'uncensored': 0.8612104058265686, + 'pussy_juice': 0.6021570563316345, 'feet_out_of_frame': 0.39779460430145264, 'on_bed': 0.610720157623291, + 'arms_behind_head': 0.44814401865005493, 'breasts_apart': 0.39798974990844727, + 'clitoris': 0.5310801267623901 + }, abs=1e-3) + assert chars == pytest.approx({'surtr_(arknights)': 0.9942929744720459}, abs=1e-3) + + def test_wd14_tags_no_overlap(self): + rating, tags, chars = get_wd14_tags(get_testfile('nude_girl.png'), drop_overlap=True) + # print(tags) + assert rating == pytest.approx({ + 'general': 0.0020540356636047363, + 'sensitive': 0.0080718994140625, + 'questionable': 0.003170192241668701, + 'explicit': 0.984081506729126, + }, abs=1e-3) + assert tags == pytest.approx({ + '1girl': 0.998362123966217, 'solo': 0.9912548065185547, 'looking_at_viewer': 0.9146994352340698, + 'blush': 0.8892400860786438, 'smile': 0.43393653631210327, 'bangs': 0.49712443351745605, + 'large_breasts': 0.5196534395217896, 'navel': 0.9653235077857971, 'hair_between_eyes': 0.5786703824996948, + 'very_long_hair': 0.8142435550689697, 'closed_mouth': 0.9369247555732727, 'nipples': 0.9660118222236633, + 'purple_eyes': 0.9676010012626648, 'collarbone': 0.588348925113678, 'red_hair': 0.9200156331062317, + 'sweat': 0.8690457344055176, 'horns': 0.9711267948150635, 'spread_legs': 0.9603149890899658, + 'armpits': 0.9024748802185059, 'stomach': 0.6723923087120056, 'arms_up': 0.9380699396133423, + 'completely_nude': 0.9002960920333862, 'uncensored': 0.8612104058265686, 'pussy_juice': 0.6021570563316345, + 'feet_out_of_frame': 0.39779460430145264, 'on_bed': 0.610720157623291, + 'arms_behind_head': 0.44814401865005493, 'breasts_apart': 0.39798974990844727, + 'clitoris': 0.5310801267623901 + }, abs=1e-3) + assert chars == pytest.approx({'surtr_(arknights)': 0.9942929744720459}, abs=1e-3) From e1f712e42c5d59f13587f8291187f5de04b3469d Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Sun, 8 Oct 2023 17:29:52 +0800 Subject: [PATCH 09/19] dev(narugo): do password using --- .github/workflows/doc.yml | 4 ---- .github/workflows/export.yml | 2 -- .github/workflows/test.yml | 2 -- Makefile | 4 ++-- 4 files changed, 2 insertions(+), 10 deletions(-) diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 01f7fc824cc..8c563d64bb5 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -50,8 +50,6 @@ jobs: if: ${{ github.event_name == 'push' }} env: CI: 'true' - HF_NARUGO_USERNAME: ${{ secrets.HF_NARUGO_USERNAME }} - HF_NARUGO_PASSWORD: ${{ secrets.HF_NARUGO_PASSWORD }} with: shell: bash timeout_minutes: 20 @@ -122,8 +120,6 @@ jobs: uses: nick-fields/retry@v2 env: CI: 'true' - HF_NARUGO_USERNAME: ${{ secrets.HF_NARUGO_USERNAME }} - HF_NARUGO_PASSWORD: ${{ secrets.HF_NARUGO_PASSWORD }} with: shell: bash timeout_minutes: 20 diff --git a/.github/workflows/export.yml b/.github/workflows/export.yml index c99de51d347..021c9af9173 100644 --- a/.github/workflows/export.yml +++ b/.github/workflows/export.yml @@ -44,8 +44,6 @@ jobs: uses: nick-fields/retry@v2 env: CI: 'true' - HF_NARUGO_USERNAME: ${{ secrets.HF_NARUGO_USERNAME }} - HF_NARUGO_PASSWORD: ${{ secrets.HF_NARUGO_PASSWORD }} with: shell: bash timeout_minutes: 20 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 547e8740a45..eee99a49181 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -103,8 +103,6 @@ jobs: uses: nick-fields/retry@v2 env: CI: 'true' - HF_NARUGO_USERNAME: ${{ secrets.HF_NARUGO_USERNAME }} - HF_NARUGO_PASSWORD: ${{ secrets.HF_NARUGO_PASSWORD }} with: shell: bash timeout_minutes: 20 diff --git a/Makefile b/Makefile index 9b2aa145493..a8fab6ade5c 100644 --- a/Makefile +++ b/Makefile @@ -50,10 +50,10 @@ pdocs: dataset: mkdir -p ${DATASET_DIR} if [ ! -d ${DATASET_DIR}/chafen_arknights ]; then \ - git clone https://${HF_NARUGO_USERNAME}:${HF_NARUGO_PASSWORD}@huggingface.co/datasets/deepghs/chafen_arknights.git ${DATASET_DIR}/chafen_arknights; \ + git clone https://huggingface.co/datasets/deepghs/chafen_arknights.git ${DATASET_DIR}/chafen_arknights; \ fi if [ ! -d ${DATASET_DIR}/monochrome_danbooru ]; then \ - git clone https://${HF_NARUGO_USERNAME}:${HF_NARUGO_PASSWORD}@huggingface.co/datasets/deepghs/monochrome_danbooru.git ${DATASET_DIR}/monochrome_danbooru; \ + git clone https://huggingface.co/datasets/deepghs/monochrome_danbooru.git ${DATASET_DIR}/monochrome_danbooru; \ fi if [ ! -d ${DATASET_DIR}/images_test_v1 ]; then \ mkdir -p ${DATASET_DIR}/images_test_v1 && \ From cc28c6cf47ab1dd815aaab95ec6246559e006823 Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Sun, 8 Oct 2023 17:47:01 +0800 Subject: [PATCH 10/19] dev(narugo): release memory after tagging models are tested --- test/tagging/test_deepdanbooru.py | 4 ++-- test/tagging/test_mldanbooru.py | 2 +- test/tagging/test_wd14.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/tagging/test_deepdanbooru.py b/test/tagging/test_deepdanbooru.py index a5c3c007284..eb53be0fc2c 100644 --- a/test/tagging/test_deepdanbooru.py +++ b/test/tagging/test_deepdanbooru.py @@ -5,7 +5,7 @@ from test.testings import get_testfile -@pytest.fixture() +@pytest.fixture(autouse=True, scope='module') def _release_model_after_run(): try: yield @@ -15,7 +15,7 @@ def _release_model_after_run(): @pytest.mark.unittest class TestTaggingDeepdanbooru: - def test_get_deepdanbooru_tags(self, _release_model_after_run): + def test_get_deepdanbooru_tags(self): rating, tags, chars = get_deepdanbooru_tags(get_testfile('6124220.jpg')) assert rating['rating:safe'] > 0.9 assert tags['greyscale'] >= 0.8 diff --git a/test/tagging/test_mldanbooru.py b/test/tagging/test_mldanbooru.py index 88f74538135..ecfcde61015 100644 --- a/test/tagging/test_mldanbooru.py +++ b/test/tagging/test_mldanbooru.py @@ -5,7 +5,7 @@ from test.testings import get_testfile -@pytest.fixture() +@pytest.fixture(autouse=True, scope='module') def _release_model_after_run(): try: yield diff --git a/test/tagging/test_wd14.py b/test/tagging/test_wd14.py index 39caee962a4..897cf9e8729 100644 --- a/test/tagging/test_wd14.py +++ b/test/tagging/test_wd14.py @@ -5,7 +5,7 @@ from test.testings import get_testfile -@pytest.fixture() +@pytest.fixture(autouse=True, scope='module') def _release_model_after_run(): try: yield From 8f6e82713d9f6bdaeb54462f66818275935b7f80 Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Sun, 8 Oct 2023 17:48:47 +0800 Subject: [PATCH 11/19] dev(narugo): add docs for drop_overlap argument for tagging functions --- imgutils/tagging/deepdanbooru.py | 1 + imgutils/tagging/mldanbooru.py | 1 + imgutils/tagging/wd14.py | 1 + 3 files changed, 3 insertions(+) diff --git a/imgutils/tagging/deepdanbooru.py b/imgutils/tagging/deepdanbooru.py index 87e4b2373e5..afae2e4932b 100644 --- a/imgutils/tagging/deepdanbooru.py +++ b/imgutils/tagging/deepdanbooru.py @@ -75,6 +75,7 @@ def get_deepdanbooru_tags(image: ImageTyping, use_real_name: bool = False, The default value of ``False`` indicates the use of the original tag names. :param general_threshold: Threshold for default tags, default is ``0.35``. :param character_threshold: Threshold for character tags, default is ``0.85``. + :param drop_overlap: Drop overlap tags or not, default is ``False``. :return: Tagging results for levels, features and characters. Example: diff --git a/imgutils/tagging/mldanbooru.py b/imgutils/tagging/mldanbooru.py index aa6e547dd2d..de7741472fa 100644 --- a/imgutils/tagging/mldanbooru.py +++ b/imgutils/tagging/mldanbooru.py @@ -74,6 +74,7 @@ def get_mldanbooru_tags(image: ImageTyping, use_real_name: bool = False, :param size: Size when passing the resized image into model, default is ``448``. :param keep_ratio: Keep the original ratio between height and width when passing the image into model, default is ``False``. + :param drop_overlap: Drop overlap tags or not, default is ``False``. Example: Here are some images for example diff --git a/imgutils/tagging/wd14.py b/imgutils/tagging/wd14.py index 32ce1ff7f7c..63165919d33 100644 --- a/imgutils/tagging/wd14.py +++ b/imgutils/tagging/wd14.py @@ -96,6 +96,7 @@ def get_wd14_tags(image: ImageTyping, model_name: str = "ConvNextV2", ``SwinV2``, ``ConvNext``, ``ConvNextV2``, ``ViT`` or ``MOAT``, default is ``ConvNextV2``. :param general_threshold: Threshold for default tags, default is ``0.35``. :param character_threshold: Threshold for character tags, default is ``0.85``. + :param drop_overlap: Drop overlap tags or not, default is ``False``. :return: Tagging results for levels, features and characters. Example: From 5e9c1eed8bec79ff2fff7cbcb758eea2cb5a0385 Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Sun, 8 Oct 2023 18:31:18 +0800 Subject: [PATCH 12/19] dev(narugo): add examples --- imgutils/tagging/overlap.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/imgutils/tagging/overlap.py b/imgutils/tagging/overlap.py index 6510ff98fc7..47bddc7893c 100644 --- a/imgutils/tagging/overlap.py +++ b/imgutils/tagging/overlap.py @@ -39,6 +39,17 @@ def drop_overlap_tags(tags: List[str]) -> List[str]: :type tags: List[str] :return: A list of tags without overlaps. :rtype: List[str] + + Examples:: + >>> from imgutils.tagging import drop_overlap_tags + >>> + >>> tags = [ + ... '1girl', 'solo', + ... 'long_hair', 'very_long_hair', 'red_hair', + ... 'breasts', 'medium_breasts', + ... ] + >>> drop_overlap_tags(tags) + ['1girl', 'solo', 'very_long_hair', 'red_hair', 'medium_breasts'] """ overlap_tags_dict = _get_overlap_tags() result_tags = [] @@ -76,6 +87,27 @@ def drop_overlaps_for_dict(tags: Mapping[str, float]) -> Mapping[str, float]: :type tags: Mapping[str, float] :return: A dictionary with non-overlapping tags and their corresponding confidence scores. :rtype: Mapping[str, float] + + Examples:: + >>> from imgutils.tagging import drop_overlaps_for_dict + >>> + >>> tags = { + ... '1girl': 0.8849405313291128, + ... 'solo': 0.8548297594823425, + ... 'long_hair': 0.03910296474461261, + ... 'very_long_hair': 0.6615180440330748, + ... 'red_hair': 0.21552028866308015, + ... 'breasts': 0.3165260620737027, + ... 'medium_breasts': 0.47744464927382957, + ... } + >>> drop_overlaps_for_dict(tags) + { + '1girl': 0.8849405313291128, + 'solo': 0.8548297594823425, + 'very_long_hair': 0.6615180440330748, + 'red_hair': 0.21552028866308015, + 'medium_breasts': 0.47744464927382957 + } """ key_set = set(drop_overlap_tags(list(tags.keys()))) return {tag: confidence for tag, confidence in tags.items() if tag in key_set} From 4507d87ccd63c88abcbd0c0f8814c425323bd678 Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Mon, 9 Oct 2023 00:47:50 +0800 Subject: [PATCH 13/19] dev(narugo): add text detection --- docs/source/api_doc/detect/index.rst | 1 + docs/source/api_doc/detect/text.rst | 14 ++ docs/source/api_doc/detect/text/ml1.png | Bin 0 -> 33135 bytes docs/source/api_doc/detect/text/ml2.jpg | Bin 0 -> 76979 bytes .../detect/text_detect_benchmark.plot.py | 53 +++++++ .../api_doc/detect/text_detect_demo.plot.py | 17 +++ imgutils/detect/__init__.py | 1 + imgutils/detect/text.py | 139 ++++++++++++++++++ 8 files changed, 225 insertions(+) create mode 100644 docs/source/api_doc/detect/text.rst create mode 100644 docs/source/api_doc/detect/text/ml1.png create mode 100644 docs/source/api_doc/detect/text/ml2.jpg create mode 100644 docs/source/api_doc/detect/text_detect_benchmark.plot.py create mode 100644 docs/source/api_doc/detect/text_detect_demo.plot.py create mode 100644 imgutils/detect/text.py diff --git a/docs/source/api_doc/detect/index.rst b/docs/source/api_doc/detect/index.rst index d681957a459..48a1360957d 100644 --- a/docs/source/api_doc/detect/index.rst +++ b/docs/source/api_doc/detect/index.rst @@ -16,5 +16,6 @@ imgutils.detect hand head person + text visual diff --git a/docs/source/api_doc/detect/text.rst b/docs/source/api_doc/detect/text.rst new file mode 100644 index 00000000000..dd05bf7e97d --- /dev/null +++ b/docs/source/api_doc/detect/text.rst @@ -0,0 +1,14 @@ +imgutils.detect.text +========================== + +.. currentmodule:: imgutils.detect.text + +.. automodule:: imgutils.detect.text + + +detect_text +------------------------------ + +.. autofunction:: detect_text + + diff --git a/docs/source/api_doc/detect/text/ml1.png b/docs/source/api_doc/detect/text/ml1.png new file mode 100644 index 0000000000000000000000000000000000000000..7fbd587cecfb859024487e3ec336a5b1fa1d6b62 GIT binary patch literal 33135 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

dgok}XB-p_<`Pg#S!! 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. + + .. image:: text_detect_demo.plot.py.svg + :align: center + + This is an overall benchmark of all the text detect models: + + .. image:: text_detect_benchmark.plot.py.svg + :align: center + +""" +from functools import lru_cache +from typing import List, Tuple, Optional + +import cv2 +import numpy as np +from huggingface_hub import hf_hub_download + +from ..data import ImageTyping, load_image +from ..utils import open_onnx_model + +_DEFAULT_MODEL = 'dbnetpp_resnet50_fpnc_1200e_icdar2015' + + +@lru_cache() +def _open_text_detect_model(model: str): + """ + Get an ONNX session for the specified DBNET or DBNET++ model. + + This function downloads the ONNX model and opens it using the imgutils library. + + :param model: Model name for DBNET or DBNET++. + :type model: str + :return: ONNX session for the specified model. + """ + return open_onnx_model(hf_hub_download( + 'deepghs/text_detection', + f'{model}/end2end.onnx' + )) + + +def _get_heatmap_of_text(image: ImageTyping, model: str) -> np.ndarray: + """ + Get the heatmap of text regions from the given image using the specified model. + + :param image: Input image. + :type image: ImageTyping + :param model: Model name for DBNET or DBNET++. + :type model: str + :return: Heatmap of text regions. + :rtype: np.ndarray + """ + origin_width, origin_height = width, height = image.size + align = 32 + if width % align != 0: + width += (align - width % align) + if height % align != 0: + height += (align - height % align) + + input_ = np.array(image).transpose((2, 0, 1)).astype(np.float32) / 255.0 + input_ = np.pad(input_[None, ...], ((0, 0), (0, 0), (0, height - origin_height), (0, width - origin_width))) + + def _normalize(data, mean=(0.48145466, 0.4578275, 0.40821073), std=(0.26862954, 0.26130258, 0.27577711)): + mean, std = np.asarray(mean), np.asarray(std) + return (data - mean[None, :, None, None]) / std[None, :, None, None] + + ort = _open_text_detect_model(model) + + input_ = _normalize(input_).astype(np.float32) + output_, = ort.run(['output'], {'input': input_}) + heatmap = output_[0] + heatmap = heatmap[:origin_height, :origin_width] + + return heatmap + + +def _get_bounding_box_of_text(image: ImageTyping, model: str, threshold: float) \ + -> List[Tuple[Tuple[int, int, int, int], float]]: + """ + Get bounding boxes of detected text regions from the given image using the specified model and threshold. + + :param image: Input image. + :type image: ImageTyping + :param model: Model name for DBNET or DBNET++. + :type model: str + :param threshold: Confidence threshold for text detection. + :type threshold: float + :return: List of bounding boxes and their scores. + :rtype: List[Tuple[Tuple[int, int, int, int], float]] + """ + heatmap = _get_heatmap_of_text(image, model) + c_rets = cv2.findContours((heatmap * 255.0).astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) + contours = c_rets[0] if len(c_rets) == 2 else c_rets[1] + bboxes = [] + for c in contours: + x, y, w, h = cv2.boundingRect(c) + x0, y0, x1, y1 = x, y, x + w, y + h + score = heatmap[y0:y1, x0:x1].mean().item() + if score >= threshold: + bboxes.append(((x0, y0, x1, y1), score)) + + return bboxes + + +def detect_text(image: ImageTyping, model: str = _DEFAULT_MODEL, threshold: float = 0.05, + max_area_size: Optional[int] = 1200): + """ + Detect text regions in the given image using the specified model and threshold. + + :param image: Input image. + :type image: ImageTyping + :param model: Model name for DBNET or DBNET++. + :type model: str + :param threshold: Confidence threshold for text detection. + :type threshold: float + :param max_area_size: Max area size when doing inference. Default is ``1200``, which means if + the image's area is over 1200x1200, it will be resized. When assigned to ``None``, + it means do not resize in any case. + :type max_area_size: Optional[int] + :return: List of detected text bounding boxes, labels, and scores. + :rtype: List[Tuple[Tuple[int, int, int, int], str, float]] + """ + image = load_image(image) + if max_area_size is not None and image.width * image.height >= max_area_size ** 2: + r = ((image.width * image.height) / (max_area_size ** 2)) ** 0.5 + new_width, new_height = int(image.width / r), int(image.height / r) + image = image.resize((new_width, new_height)) + else: + r = 1.0 + + bboxes = [] + for (x0, y0, x1, y1), score in _get_bounding_box_of_text(image, model, threshold): + x0, y0, x1, y1 = int(x0 * r), int(y0 * r), int(x1 * r), int(y1 * r) + bboxes.append(((x0, y0, x1, y1), 'text', score)) + return bboxes From acd4905fed0a0739515b6dce3f252aec902be828 Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Mon, 9 Oct 2023 00:51:35 +0800 Subject: [PATCH 14/19] dev(narugo): add text detection --- docs/source/api_doc/detect/text_detect_demo.plot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/api_doc/detect/text_detect_demo.plot.py b/docs/source/api_doc/detect/text_detect_demo.plot.py index 710474436c2..6be505b8f5c 100644 --- a/docs/source/api_doc/detect/text_detect_demo.plot.py +++ b/docs/source/api_doc/detect/text_detect_demo.plot.py @@ -11,7 +11,7 @@ def _detect(img, **kwargs): if __name__ == '__main__': image_plot( (_detect('text/ml1.png'), 'Multiple Languages I'), - (_detect('text/ml2.png'), 'Multiple Languages II'), + (_detect('text/ml2.jpg'), 'Multiple Languages II'), columns=1, figsize=(8, 9), ) From b6fb3b27b68543e27f3624b86a0c8106a8ba4906 Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Mon, 9 Oct 2023 00:57:55 +0800 Subject: [PATCH 15/19] dev(narugo): add text detection --- docs/source/_libs/plot.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/source/_libs/plot.py b/docs/source/_libs/plot.py index 87bcd71ebc3..8afe3ff135f 100644 --- a/docs/source/_libs/plot.py +++ b/docs/source/_libs/plot.py @@ -1,6 +1,7 @@ from typing import Tuple, List import matplotlib.pyplot as plt +import numpy as np from PIL import Image from cli import _wrap_func_as_cli @@ -44,6 +45,14 @@ def image_plot(*images, save_as: str, columns=2, keep_axis: bool = False, figsiz n = len(images) rows = (n + columns - 1) // columns fig, axs = plt.subplots(rows, columns, figsize=figsize) + if rows == 1 and columns == 1: + axs = np.array([[axs]]) + elif rows == 1: + axs = axs[None, ...] + elif columns == 1: + axs = axs[..., None] + else: + pass plt.subplots_adjust(wspace=0.2, hspace=0.15) for i, img in enumerate(images, start=0): xi, yi = i // columns, i % columns From 6131091959153876de89d31c96aa0e3506dcb6c0 Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Sun, 8 Oct 2023 17:12:01 +0000 Subject: [PATCH 16/19] dev(narugo): auto sync Sun, 08 Oct 2023 17:12:01 +0000 --- .../detect/text_detect_benchmark.plot.py.svg | 2803 +++++++++++++++++ .../detect/text_detect_demo.plot.py.svg | 370 +++ 2 files changed, 3173 insertions(+) create mode 100644 docs/source/api_doc/detect/text_detect_benchmark.plot.py.svg create mode 100644 docs/source/api_doc/detect/text_detect_demo.plot.py.svg diff --git a/docs/source/api_doc/detect/text_detect_benchmark.plot.py.svg b/docs/source/api_doc/detect/text_detect_benchmark.plot.py.svg new file mode 100644 index 00000000000..c7be9cd839e --- /dev/null +++ b/docs/source/api_doc/detect/text_detect_benchmark.plot.py.svg @@ -0,0 +1,2803 @@ + + + + + + + + 2023-10-08T17:11:44.038437 + image/svg+xml + + + Matplotlib v3.7.3, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/source/api_doc/detect/text_detect_demo.plot.py.svg b/docs/source/api_doc/detect/text_detect_demo.plot.py.svg new file mode 100644 index 00000000000..093304b2704 --- /dev/null +++ b/docs/source/api_doc/detect/text_detect_demo.plot.py.svg @@ -0,0 +1,370 @@ + + + + + + + + 2023-10-08T17:00:36.270011 + image/svg+xml + + + Matplotlib v3.7.3, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 10aa37d0d0389fd9177a5940705ad3fab0db9e99 Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Mon, 9 Oct 2023 01:24:58 +0800 Subject: [PATCH 17/19] dev(narugo): add unittest --- .../detect/text_detect_benchmark.plot.py.svg | 2803 ----------------- imgutils/detect/text.py | 8 +- test/detect/test_text.py | 49 + test/testfile/ml1.png | Bin 0 -> 33135 bytes test/testfile/ml2.jpg | Bin 0 -> 76979 bytes 5 files changed, 54 insertions(+), 2806 deletions(-) delete mode 100644 docs/source/api_doc/detect/text_detect_benchmark.plot.py.svg create mode 100644 test/detect/test_text.py create mode 100644 test/testfile/ml1.png create mode 100644 test/testfile/ml2.jpg diff --git a/docs/source/api_doc/detect/text_detect_benchmark.plot.py.svg b/docs/source/api_doc/detect/text_detect_benchmark.plot.py.svg deleted file mode 100644 index c7be9cd839e..00000000000 --- a/docs/source/api_doc/detect/text_detect_benchmark.plot.py.svg +++ /dev/null @@ -1,2803 +0,0 @@ - - - - - - - - 2023-10-08T17:11:44.038437 - image/svg+xml - - - Matplotlib v3.7.3, https://matplotlib.org/ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/imgutils/detect/text.py b/imgutils/detect/text.py index 6485608764c..45518478c01 100644 --- a/imgutils/detect/text.py +++ b/imgutils/detect/text.py @@ -107,7 +107,7 @@ def _get_bounding_box_of_text(image: ImageTyping, model: str, threshold: float) def detect_text(image: ImageTyping, model: str = _DEFAULT_MODEL, threshold: float = 0.05, - max_area_size: Optional[int] = 1200): + max_area_size: Optional[int] = 640): """ Detect text regions in the given image using the specified model and threshold. @@ -117,8 +117,8 @@ def detect_text(image: ImageTyping, model: str = _DEFAULT_MODEL, threshold: floa :type model: str :param threshold: Confidence threshold for text detection. :type threshold: float - :param max_area_size: Max area size when doing inference. Default is ``1200``, which means if - the image's area is over 1200x1200, it will be resized. When assigned to ``None``, + :param max_area_size: Max area size when doing inference. Default is ``640``, which means if + the image's area is over 640x640, it will be resized. When assigned to ``None``, it means do not resize in any case. :type max_area_size: Optional[int] :return: List of detected text bounding boxes, labels, and scores. @@ -136,4 +136,6 @@ def detect_text(image: ImageTyping, model: str = _DEFAULT_MODEL, threshold: floa for (x0, y0, x1, y1), score in _get_bounding_box_of_text(image, model, threshold): x0, y0, x1, y1 = int(x0 * r), int(y0 * r), int(x1 * r), int(y1 * r) bboxes.append(((x0, y0, x1, y1), 'text', score)) + + bboxes = sorted(bboxes, key=lambda x: x[2], reverse=True) return bboxes diff --git a/test/detect/test_text.py b/test/detect/test_text.py new file mode 100644 index 00000000000..e2092b5ecd1 --- /dev/null +++ b/test/detect/test_text.py @@ -0,0 +1,49 @@ +import pytest + +from imgutils.detect.text import _open_text_detect_model, detect_text +from test.testings import get_testfile + + +@pytest.fixture(scope='module', autouse=True) +def _release_model_after_run(): + try: + yield + finally: + _open_text_detect_model.cache_clear() + + +@pytest.mark.unittest +class TestDetectText: + def test_detect_text(self): + detections = detect_text(get_testfile('ml1.png')) + assert len(detections) == 4 + + values = [] + for bbox, label, score in detections: + assert label in {'text'} + values.append((bbox, int(score * 1000) / 1000)) + + assert values == pytest.approx([ + ((866, 45, 959, 69), 0.543), + ((222, 68, 313, 102), 0.543), + ((424, 82, 508, 113), 0.541), + ((691, 101, 776, 129), 0.471) + ]) + + def test_detect_text_without_resize(self): + detections = detect_text(get_testfile('ml2.jpg'), max_area_size=None) + assert len(detections) == 9 + + values = [] + for bbox, label, score in detections: + assert label in {'text'} + values.append((bbox, int(score * 1000) / 1000)) + + assert values == pytest.approx([ + ((360, 218, 474, 250), 0.686), ((119, 218, 203, 240), 0.653), ((392, 47, 466, 76), 0.617), + ((593, 174, 666, 204), 0.616), ((179, 451, 672, 472), 0.591), ((633, 314, 747, 337), 0.59), + ((392, 369, 517, 386), 0.589), ((621, 81, 681, 102), 0.566), ((209, 92, 281, 122), 0.423), + ]) + + def test_detect_text_none(self): + assert detect_text(get_testfile('png_full.png')) == [] diff --git a/test/testfile/ml1.png b/test/testfile/ml1.png new file mode 100644 index 0000000000000000000000000000000000000000..7fbd587cecfb859024487e3ec336a5b1fa1d6b62 GIT binary patch literal 33135 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

dgok}XB-p_<`Pg#S!! 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 Date: Sun, 8 Oct 2023 17:36:24 +0000 Subject: [PATCH 18/19] dev(narugo): auto sync Sun, 08 Oct 2023 17:36:24 +0000 --- .../detect/text_detect_benchmark.plot.py.svg | 2804 +++++++++++++++++ 1 file changed, 2804 insertions(+) create mode 100644 docs/source/api_doc/detect/text_detect_benchmark.plot.py.svg diff --git a/docs/source/api_doc/detect/text_detect_benchmark.plot.py.svg b/docs/source/api_doc/detect/text_detect_benchmark.plot.py.svg new file mode 100644 index 00000000000..7bb3cc82577 --- /dev/null +++ b/docs/source/api_doc/detect/text_detect_benchmark.plot.py.svg @@ -0,0 +1,2804 @@ + + + + + + + + 2023-10-08T17:36:08.202133 + image/svg+xml + + + Matplotlib v3.7.3, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 8c204738971d4cfefc7087a5999bfe5fd5e00e34 Mon Sep 17 00:00:00 2001 From: narugo1992 Date: Mon, 9 Oct 2023 02:05:06 +0800 Subject: [PATCH 19/19] dev(narugo): use version v0.2.7 --- imgutils/config/meta.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imgutils/config/meta.py b/imgutils/config/meta.py index 738abbf969a..2526cbe12c5 100644 --- a/imgutils/config/meta.py +++ b/imgutils/config/meta.py @@ -7,7 +7,7 @@ __TITLE__ = 'imgutils' #: Version of this project. -__VERSION__ = '0.2.6' +__VERSION__ = '0.2.7' #: Short description of the project, will be included in ``setup.py``. __DESCRIPTION__ = 'A convenient and user-friendly anime-style image data processing library that integrates ' \