UniFace: A Comprehensive Library for Face Detection, Recognition, Landmark Analysis, Face Parsing, Gaze Estimation, Age, and Gender Detection
Project description
UniFace: All-in-One Face Analysis Library
UniFace is a lightweight, production-ready face analysis library built on ONNX Runtime. It provides high-performance face detection, recognition, landmark detection, face parsing, gaze estimation, and attribute analysis with hardware acceleration support across platforms.
Features
- Face Detection — RetinaFace, SCRFD, YOLOv5-Face, and YOLOv8-Face with 5-point landmarks
- Face Recognition — ArcFace, MobileFace, and SphereFace embeddings
- Facial Landmarks — 106-point landmark localization module (separate from 5-point detector landmarks)
- Face Parsing — BiSeNet semantic segmentation (19 classes), XSeg face masking
- Gaze Estimation — Real-time gaze direction with MobileGaze
- Attribute Analysis — Age, gender, race (FairFace), and emotion
- Anti-Spoofing — Face liveness detection with MiniFASNet
- Face Anonymization — 5 blur methods for privacy protection
- Hardware Acceleration — ARM64 (Apple Silicon), CUDA (NVIDIA), CPU
Installation
Standard installation
pip install uniface
GPU support (CUDA)
pip install uniface[gpu]
From source (latest version)
git clone https://github.com/yakhyo/uniface.git
cd uniface && pip install -e .
Optional dependencies
- Emotion model uses TorchScript and requires
torch:pip install torch(choose the correct build for your OS/CUDA) - YOLOv5-Face and YOLOv8-Face support faster NMS with
torchvision:pip install torch torchvisionthen usenms_mode='torchvision'
Model Downloads and Cache
Models are downloaded automatically on first use and verified via SHA-256.
Default cache location: ~/.uniface/models
You can override it with UNIFACE_CACHE_DIR=/your/cache/path
Quick Example (Detection)
import cv2
from uniface import RetinaFace
detector = RetinaFace()
image = cv2.imread("photo.jpg")
if image is None:
raise ValueError("Failed to load image. Check the path to 'photo.jpg'.")
faces = detector.detect(image)
for face in faces:
print(f"Confidence: {face.confidence:.2f}")
print(f"BBox: {face.bbox}")
print(f"Landmarks: {face.landmarks.shape}")
Face Detection Model Output
Example (Face Analyzer)
import cv2
from uniface import RetinaFace, ArcFace, FaceAnalyzer
detector = RetinaFace()
recognizer = ArcFace()
analyzer = FaceAnalyzer(detector, recognizer=recognizer)
image = cv2.imread("photo.jpg")
if image is None:
raise ValueError("Failed to load image. Check the path to 'photo.jpg'.")
faces = analyzer.analyze(image)
for face in faces:
print(face.bbox, face.embedding.shape if face.embedding is not None else None)
Execution Providers (ONNX Runtime)
from uniface import RetinaFace
# Force CPU-only inference
detector = RetinaFace(providers=["CPUExecutionProvider"])
See more in the docs: https://yakhyo.github.io/uniface/concepts/execution-providers/
Documentation
Full documentation: https://yakhyo.github.io/uniface/
| Resource | Description |
|---|---|
| Quickstart | Get up and running in 5 minutes |
| Model Zoo | All models, benchmarks, and selection guide |
| API Reference | Detailed module documentation |
| Tutorials | Step-by-step workflow examples |
| Guides | Architecture and design principles |
Jupyter Notebooks
| Example | Colab | Description |
|---|---|---|
| 01_face_detection.ipynb | Face detection and landmarks | |
| 02_face_alignment.ipynb | Face alignment for recognition | |
| 03_face_verification.ipynb | Compare faces for identity | |
| 04_face_search.ipynb | Find a person in group photos | |
| 05_face_analyzer.ipynb | All-in-one analysis | |
| 06_face_parsing.ipynb | Semantic face segmentation | |
| 07_face_anonymization.ipynb | Privacy-preserving blur | |
| 08_gaze_estimation.ipynb | Gaze direction estimation | |
| 09_face_segmentation.ipynb | Face segmentation with XSeg |
Licensing and Model Usage
UniFace is MIT-licensed, but several pretrained models carry their own licenses. Review: https://yakhyo.github.io/uniface/license-attribution/
Notable examples:
- YOLOv5-Face and YOLOv8-Face weights are GPL-3.0
- FairFace weights are CC BY 4.0
If you plan commercial use, verify model license compatibility.
References
| Feature | Repository | Training | Description |
|---|---|---|---|
| Detection | retinaface-pytorch | ✓ | RetinaFace PyTorch Training & Export |
| Detection | yolov5-face-onnx-inference | - | YOLOv5-Face ONNX Inference |
| Detection | yolov8-face-onnx-inference | - | YOLOv8-Face ONNX Inference |
| Recognition | face-recognition | ✓ | MobileFace, SphereFace Training |
| Parsing | face-parsing | ✓ | BiSeNet Face Parsing |
| Parsing | face-segmentation | - | XSeg Face Segmentation |
| Gaze | gaze-estimation | ✓ | MobileGaze Training |
| Anti-Spoofing | face-anti-spoofing | - | MiniFASNet Inference |
| Attributes | fairface-onnx | - | FairFace ONNX Inference |
*SCRFD and ArcFace models are from InsightFace.
Contributing
Contributions are welcome. Please see CONTRIBUTING.md.
Support
If you find this project useful, consider giving it a ⭐ on GitHub — it helps others discover it!
Questions or feedback:
- GitHub Issues: https://github.com/yakhyo/uniface/issues
- DeepWiki Q&A: https://deepwiki.com/yakhyo/uniface
License
This project is licensed under the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file uniface-2.3.0.tar.gz.
File metadata
- Download URL: uniface-2.3.0.tar.gz
- Upload date:
- Size: 71.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3ef5cca40f1305442151d9306f6615d507e5e6a60f76e5b00d2ec9e97201fab
|
|
| MD5 |
53ec0271335d94bc12afb160f10f48df
|
|
| BLAKE2b-256 |
24c2f2731fe908075fa44de0e75c78a512d8ec62fca448c127b7bdfb8c98d5a7
|
File details
Details for the file uniface-2.3.0-py3-none-any.whl.
File metadata
- Download URL: uniface-2.3.0-py3-none-any.whl
- Upload date:
- Size: 88.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a15926d3acf0c8fd27bf0264da26f5b73f9a730f38a610366cf8e8ad20bf9052
|
|
| MD5 |
ea512046480aa3c5e5246b78c28cfbe1
|
|
| BLAKE2b-256 |
8b843c2a0fe6f3c6bc3dbbf0748a64e707b367f445b6797f7344005588bee64a
|