realutils.face.insightface
This module provides a comprehensive interface to InsightFace, a 2D/3D face analysis toolkit. It includes functionalities for face detection, recognition, gender & age estimation, and visualization.
The models are hosted on Hugging Face Hub at deepghs/insightface, original project at deepinsight/insightface.
Face
- class realutils.face.insightface.Face(bbox: Tuple[float, float, float, float], det_score: float, keypoints: List[Tuple[float, float]], gender: Literal['F', 'M'] | None = None, age: int | None = None, embedding: ndarray | None = None)[source]
- A dataclass representing detected face information. - This class stores information about a detected face, including its location, detection confidence, facial landmarks, and optional demographic attributes. - Parameters:
- bbox (Tuple[float, float, float, float]) – Bounding box coordinates in format (x1, y1, x2, y2) 
- det_score (float) – Detection confidence score between 0 and 1 
- keypoints (List[Tuple[float, float]]) – List of facial keypoint coordinates as (x, y) tuples 
- gender (Optional[Literal['F', 'M']]) – Gender classification result, either ‘F’ for female or ‘M’ for male 
- age (Optional[int]) – Estimated age in years 
- embedding (Optional[np.ndarray]) – Feature embedding of this human face 
 
- Example:
- >>> face = Face( ... bbox=(100, 200, 300, 400), ... det_score=0.99, ... keypoints=[(150, 250), (200, 250)], ... gender='F', ... age=25 ... ) 
 - to_det_tuple() Tuple[Tuple[float, float, float, float], str, float][source]
- Convert face detection result to a standardized detection tuple format. - This method formats the face detection information into a tuple that can be used with general object detection frameworks or visualization tools. - Returns:
- A tuple containing (bbox, label, confidence_score) 
- Return type:
- Tuple[Tuple[float, float, float, float], str, float] 
- Example:
- >>> face = Face(bbox=(100, 200, 300, 400), det_score=0.99, keypoints=[]) >>> bbox, label, score = face.to_det_tuple() 
 
 
isf_detect_faces
- realutils.face.insightface.isf_detect_faces(image: str | PathLike | bytes | bytearray | BinaryIO | Image, model_name: str = 'buffalo_l', input_size: Tuple[int, int] = (640, 640), det_thresh: float = 0.5, nms_thresh: float = 0.4) List[Face][source]
- Detect faces in the given image using RetinaFace model. - Parameters:
- image (Union[str, PIL.Image.Image, numpy.ndarray]) – Input image (can be path, PIL Image, or numpy array) 
- model_name (str) – Name of the detection model to use 
- input_size (tuple) – Model input size (width, height) 
- det_thresh (float) – Detection confidence threshold 
- nms_thresh (float) – Non-maximum suppression threshold 
 
- Returns:
- List of detected faces with bounding boxes and keypoints 
- Return type:
- List[Face] 
- Example:
- >>> from realutils.face.insightface import isf_detect_faces >>> from PIL import Image >>> >>> img = Image.open('path/to/image.jpg') >>> faces = isf_detect_faces(img) >>> for face in faces: ... print(f"Face {face.bbox!r} detected with confidence: {face.det_score}") 
 
isf_genderage
- realutils.face.insightface.isf_genderage(image: str | PathLike | bytes | bytearray | BinaryIO | Image, face: Face | Tuple[float, float, float, float], model_name: str = 'buffalo_l', no_write: bool = False)[source]
- Detect gender and age from a facial image. - This function performs gender and age detection on a given face in an image. It can work with either a Face object or raw bounding box coordinates. - Parameters:
- image (ImageTyping) – Input image (can be path, URL, PIL Image, or numpy array) 
- face (Union[Face, Tuple[float, float, float, float]]) – Face object or bounding box coordinates (x1, y1, x2, y2) 
- model_name (str) – Name of the model to use for detection, defaults to _DEFAULT_MODEL 
- no_write (bool) – If True, don’t update the Face object with results (if face is Face object) 
 
- Returns:
- Tuple of (gender, age) where gender is ‘F’ or ‘M’ and age is an integer 
- Return type:
- tuple[str, int] 
 
isf_extract_face
- realutils.face.insightface.isf_extract_face(image: str | PathLike | bytes | bytearray | BinaryIO | Image, face: Face, model_name: str = 'buffalo_l', no_write: bool = False)[source]
- Extract face embedding features from an image. - Parameters:
- image (ImageTyping) – Input image 
- face (Face) – Face object containing keypoints 
- model_name (str) – Name of the model to use 
- no_write (bool) – If True, don’t write embedding to face object 
 
- Returns:
- Face embedding vector 
- Return type:
- np.ndarray 
 
isf_face_batch_similarity
isf_face_similarity
isf_face_batch_same
- realutils.face.insightface.isf_face_batch_same(embs: List[ndarray] | ndarray, model_name: str = 'buffalo_l', threshold: float | None = None)[source]
- Determine if faces in a batch are the same person using similarity threshold. - Parameters:
- embs (Union[List[np.ndarray], np.ndarray]) – List or array of face embeddings 
- model_name (str) – Name of the model to use 
- threshold (Optional[float]) – Similarity threshold, if None uses default 
 
- Returns:
- Boolean matrix indicating matching faces 
- Return type:
- np.ndarray 
 
isf_face_same
- realutils.face.insightface.isf_face_same(emb1: ndarray, emb2: ndarray, model_name: str = 'buffalo_l', threshold: float | None = None) float[source]
- Determine if two faces are the same person. - Parameters:
- emb1 (np.ndarray) – First face embedding 
- emb2 (np.ndarray) – Second face embedding 
- model_name (str) – Name of the model to use 
- threshold (Optional[float]) – Similarity threshold, if None uses default 
 
- Returns:
- Boolean indicating if faces match 
- Return type:
- float 
 
isf_analysis_faces
- realutils.face.insightface.isf_analysis_faces(image: str | PathLike | bytes | bytearray | BinaryIO | Image, model_name: str = 'buffalo_l', 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][source]
- 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) - Parameters:
- image (ImageTyping) – Input image for face analysis 
- model_name (str) – Name of the pre-trained model to use from Hugging Face Hub 
- input_size (Tuple[int, int]) – Size to resize input image to before processing (width, height) 
- det_thresh (float) – Detection confidence threshold for face detection 
- nms_thresh (float) – Non-maximum suppression threshold for face detection 
- no_genderage (bool) – If True, skip gender and age estimation 
- no_extraction (bool) – If True, skip face feature extraction 
- silent (bool) – If True, disable progress bar 
 
- Returns:
- List of detected Face objects with analysis results 
- Return type:
- List[Face] 
 
isf_faces_visualize
- realutils.face.insightface.isf_faces_visualize(image: str | PathLike | bytes | bytearray | BinaryIO | Image, faces: List[Face], text_padding: int = 6, fontsize: int = 12, keypoint_size: int = 12, box_color: str = '#ff00ee', max_short_edge_size: int | None = None, fp=None, no_label: bool = False)[source]
- Visualize face detection results by drawing bounding boxes, keypoints and labels on an image. - This function takes an input image and a list of detected faces, then draws: - Bounding boxes around each detected face 
- Keypoints for facial features using randomly generated colors 
- Optional labels showing detection confidence scores 
 - The visualization can be customized through various parameters like font size, box colors, and whether to show labels. - Parameters:
- image (ImageTyping) – Input image to visualize detections on. Can be a PIL Image, numpy array, or path to image file. 
- faces (List[Face]) – List of detected Face objects containing bounding boxes, keypoints and scores. 
- text_padding (int) – Padding around label text in pixels. 
- fontsize (int) – Font size for label text. 
- keypoint_size (int) – Size of keypoint markers in pixels. 
- box_color (str) – Color of bounding box in hex format (e.g. ‘#ff00ee’). 
- max_short_edge_size (Optional[int]) – Maximum size of shortest image edge. If specified, image will be resized while maintaining aspect ratio. 
- fp (matplotlib.font_manager.FontProperties or None) – Font properties for matplotlib font. Only used if matplotlib is available. 
- no_label (bool) – If True, suppresses drawing of labels. 
 
- Returns:
- PIL Image with visualized detection results. 
- Return type:
- PIL.Image.Image 
- Example:
- >>> from realutils.face.insightface import isf_faces_visualize, isf_detect_faces >>> from PIL import Image >>> >>> image = Image.open('face.jpg') >>> faces = isf_detect_faces(image) >>> visualized = isf_faces_visualize( ... image, ... faces, ... fontsize=14, ... box_color='#00ff00' ... ) >>> visualized.show()