Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
UniFace: A Comprehensive Library for Face Detection, Recognition, Landmark Analysis, Age, and Gender Detection
uniface is a lightweight face detection library designed for high-performance face localization, landmark detection and face alignment. The library supports ONNX models and provides utilities for bounding box visualization and landmark plotting. To train RetinaFace model, see https://github.com/yakhyo/retinaface-pytorch.
The easiest way to install UniFace is via PyPI. This will automatically install the library along with its prerequisites.
pip install uniface
To work with the latest version of UniFace, which may not yet be released on PyPI, you can install it directly from the repository:
git clone https://github.com/yakhyo/uniface.git
cd uniface
pip install .
To get started with face detection using UniFace, check out the example notebook. It demonstrates how to initialize the model, run inference, and visualize the results.
Explore the following example notebooks to learn how to use UniFace effectively:
from uniface import RetinaFace
# Initialize the RetinaFace model
uniface_inference = RetinaFace(
model="retinaface_mnet_v2", # Model name
conf_thresh=0.5, # Confidence threshold
pre_nms_topk=5000, # Pre-NMS Top-K detections
nms_thresh=0.4, # NMS IoU threshold
post_nms_topk=750, # Post-NMS Top-K detections
dynamic_size=False, # Arbitrary image size inference
input_size=(640, 640) # Pre-defined input image size
)
Inference on image:
import cv2
from uniface.visualization import draw_detections
# Load an image
image_path = "assets/test.jpg"
original_image = cv2.imread(image_path)
# Perform inference
boxes, landmarks = uniface_inference.detect(original_image)
# Visualize results
draw_detections(original_image, (boxes, landmarks), vis_threshold=0.6)
# Save the output image
output_path = "output.jpg"
cv2.imwrite(output_path, original_image)
print(f"Saved output image to {output_path}")
Inference on video:
import cv2
from uniface.visualization import draw_detections
# Initialize the webcam
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("Error: Unable to access the webcam.")
exit()
while True:
# Capture a frame from the webcam
ret, frame = cap.read()
if not ret:
print("Error: Failed to read frame.")
break
# Perform inference
boxes, landmarks = uniface_inference.detect(frame)
# Draw detections on the frame
draw_detections(frame, (boxes, landmarks), vis_threshold=0.6)
# Display the output
cv2.imshow("Webcam Inference", frame)
# Exit if 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Release the webcam and close all OpenCV windows
cap.release()
cv2.destroyAllWindows()
RetinaFace Models | Easy | Medium | Hard |
---|---|---|---|
retinaface_mnet025 | 88.48% | 87.02% | 80.61% |
retinaface_mnet050 | 89.42% | 87.97% | 82.40% |
retinaface_mnet_v1 | 90.59% | 89.14% | 84.13% |
retinaface_mnet_v2 | 91.70% | 91.03% | 86.60% |
retinaface_r18 | 92.50% | 91.02% | 86.63% |
retinaface_r34 | 94.16% | 93.12% | 88.90% |
RetinaFace
Classfrom typings import Tuple
RetinaFace(
model: str,
conf_thresh: float = 0.5,
pre_nms_topk: int = 5000,
nms_thresh: float = 0.4,
post_nms_topk: int = 750,
dynamic_size: bool = False,
input_size: Tuple[int, int] = (640, 640)
)
Parameters:
model
(str): Name of the model to use. Supported models:
retinaface_mnet025
, retinaface_mnet050
, retinaface_mnet_v1
, retinaface_mnet_v2
retinaface_r18
, retinaface_r34
conf_thresh
(float, default=0.5): Minimum confidence score for detections.pre_nms_topk
(int, default=5000): Max detections to keep before NMS.nms_thresh
(float, default=0.4): IoU threshold for Non-Maximum Suppression.post_nms_topk
(int, default=750): Max detections to keep after NMS.dynamic_size
(Optional[bool], default=False): Use dynamic input size.input_size
(Optional[Tuple[int, int]], default=(640, 640)): Static input size for the model (width, height).detect
Methoddetect(
image: np.ndarray,
max_num: int = 0,
metric: str = "default",
center_weight: float = 2.0
) -> Tuple[np.ndarray, np.ndarray]
Description: Detects faces in the given image and returns bounding boxes and landmarks.
Parameters:
image
(np.ndarray): Input image in BGR format.max_num
(int, default=0): Maximum number of faces to return. 0
means return all.metric
(str, default="default"): Metric for prioritizing detections:
"default"
: Prioritize detections closer to the image center."max"
: Prioritize larger bounding box areas.center_weight
(float, default=2.0): Weight for prioritizing center-aligned faces.Returns:
bounding_boxes
(np.ndarray): Array of detections as [x_min, y_min, x_max, y_max, confidence]
.landmarks
(np.ndarray): Array of landmarks as [(x1, y1), ..., (x5, y5)]
.draw_detections
draw_detections(
image: np.ndarray,
detections: Tuple[np.ndarray, np.ndarray],
vis_threshold: float = 0.6
) -> None
Description: Draws bounding boxes and landmarks on the given image.
Parameters:
image
(np.ndarray): The input image in BGR format.detections
(Tuple[np.ndarray, np.ndarray]): A tuple of bounding boxes and landmarks.vis_threshold
(float, default=0.6): Minimum confidence score for visualization.We welcome contributions to enhance the library! Feel free to:
This project is licensed under the MIT License. See the LICENSE file for details.
FAQs
UniFace: A Comprehensive Library for Face Detection, Recognition, Landmark Analysis, Age, and Gender Detection
We found that uniface demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.