Source code for realutils.face.insightface.analysis

"""
Face Analysis Module

This module provides functionality for comprehensive face analysis in images, including face detection,
gender/age estimation, and feature extraction. It utilizes pre-trained models from Hugging Face Hub
to perform these tasks.
"""

from typing import Tuple, List

from imgutils.data import ImageTyping
from tqdm import tqdm

from .base import _DEFAULT_MODEL, Face
from .detect import isf_detect_faces
from .extract import isf_extract_face
from .genderage import isf_genderage


[docs]def isf_analysis_faces(image: ImageTyping, model_name: str = _DEFAULT_MODEL, input_size: Tuple[int, int] = (640, 640), det_thresh: float = 0.5, nms_thresh: float = 0.4, no_genderage: bool = False, no_extraction: bool = False, silent: bool = False) -> List[Face]: """ Perform comprehensive face analysis on an image, including detection, gender/age estimation, and feature extraction. This function processes an image through multiple stages of face analysis: 1. Face detection to locate faces and their landmarks 2. Gender and age estimation (optional) 3. Face feature extraction (optional) :param image: Input image for face analysis :type image: ImageTyping :param model_name: Name of the pre-trained model to use from Hugging Face Hub :type model_name: str :param input_size: Size to resize input image to before processing (width, height) :type input_size: Tuple[int, int] :param det_thresh: Detection confidence threshold for face detection :type det_thresh: float :param nms_thresh: Non-maximum suppression threshold for face detection :type nms_thresh: float :param no_genderage: If True, skip gender and age estimation :type no_genderage: bool :param no_extraction: If True, skip face feature extraction :type no_extraction: bool :param silent: If True, disable progress bar :type silent: bool :return: List of detected Face objects with analysis results :rtype: List[Face] """ faces = isf_detect_faces( image=image, model_name=model_name, input_size=input_size, det_thresh=det_thresh, nms_thresh=nms_thresh, ) for face in tqdm(faces, disable=silent): if not no_genderage: isf_genderage( image=image, face=face, model_name=model_name, ) if not no_extraction: isf_extract_face( image=image, face=face, model_name=model_name, ) return faces