Commit d83d2ee3 authored by narugo1992's avatar narugo1992
Browse files

dev(narugo): create benchmark image

parent d35d53df
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -5,13 +5,14 @@ from imgutils.detect import detect_faces


class FaceDetectBenchmark(BaseBenchmark):
    def __init__(self, level):
    def __init__(self, level, version):
        BaseBenchmark.__init__(self)
        self.level = level
        self.version = version

    def load(self):
        from imgutils.detect.face import _open_face_detect_model
        _ = _open_face_detect_model(level=self.level)
        _ = _open_face_detect_model(level=self.level, version=self.version)

    def unload(self):
        from imgutils.detect.face import _open_face_detect_model
@@ -19,16 +20,18 @@ class FaceDetectBenchmark(BaseBenchmark):

    def run(self):
        image_file = random.choice(self.all_images)
        _ = detect_faces(image_file, level=self.level)
        _ = detect_faces(image_file, level=self.level, version=self.version)


if __name__ == '__main__':
    create_plot_cli(
        [
            ('face (yolov8s)', FaceDetectBenchmark('s')),
            ('face (yolov8n)', FaceDetectBenchmark('n')),
            ('face v1 (yolov8s)', FaceDetectBenchmark('s', 'v1')),
            ('face v1 (yolov8n)', FaceDetectBenchmark('n', 'v1')),
            ('face v0 (yolov8s)', FaceDetectBenchmark('s', 'v0')),
            ('face v0 (yolov8n)', FaceDetectBenchmark('n', 'v0')),
        ],
        title='Benchmark for Anime Face Detections',
        run_times=10,
        try_times=5,
        try_times=20,
    )()
+0 −2371

File deleted.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
@@ -30,5 +30,5 @@ if __name__ == '__main__':
        ],
        title='Benchmark for Anime Head Detections',
        run_times=10,
        try_times=5,
        try_times=20,
    )()
+0 −2375

File deleted.

Preview size limit exceeded, changes collapsed.

+10 −4
Original line number Diff line number Diff line
@@ -23,16 +23,21 @@ from ._yolo import _image_preprocess, _data_postprocess
from ..data import ImageTyping, load_image, rgb_encode
from ..utils import open_onnx_model

_VERSIONS = {
    'v0': '',
    'v1': 'v1_',
}


@lru_cache()
def _open_face_detect_model(level: str = 's'):
def _open_face_detect_model(level: str = 's', version: str = 'v1'):
    return open_onnx_model(hf_hub_download(
        'deepghs/imgutils-models',
        f'face_detect/face_detect_best_{level}.onnx'
        f'face_detect/face_detect_{_VERSIONS[version]}best_{level}.onnx'
    ))


def detect_faces(image: ImageTyping, level: str = 's', max_infer_size=640,
def detect_faces(image: ImageTyping, level: str = 's', version: str = 'v1', max_infer_size=640,
                 conf_threshold: float = 0.45, iou_threshold: float = 0.7) \
        -> List[Tuple[Tuple[int, int, int, int], str, float]]:
    """
@@ -43,6 +48,7 @@ def detect_faces(image: ImageTyping, level: str = 's', max_infer_size=640,
    :param level: The model level being used can be either `s` or `n`.
        The `n` model runs faster with smaller system overface, while the `s` model achieves higher accuracy.
        The default value is `s`.
    :param version: Version of model, default is ``v1``. Available versions are ``v0`` and ``v1``.
    :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
@@ -73,5 +79,5 @@ def detect_faces(image: ImageTyping, level: str = 's', max_infer_size=640,
    new_image, old_size, new_size = _image_preprocess(image, max_infer_size)

    data = rgb_encode(new_image)[None, ...]
    output, = _open_face_detect_model(level).run(['output0'], {'images': data})
    output, = _open_face_detect_model(level, version).run(['output0'], {'images': data})
    return _data_postprocess(output[0], conf_threshold, iou_threshold, old_size, new_size, ['face'])