Skip to main content

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

PyPI Version Python Version License Github Build Status PyPI Downloads UniFace Documentation Kaggle Badge

UniFace - All-in-One Open-Source 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 torchvision then use nms_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 Open In Colab Face detection and landmarks
02_face_alignment.ipynb Open In Colab Face alignment for recognition
03_face_verification.ipynb Open In Colab Compare faces for identity
04_face_search.ipynb Open In Colab Find a person in group photos
05_face_analyzer.ipynb Open In Colab All-in-one analysis
06_face_parsing.ipynb Open In Colab Semantic face segmentation
07_face_anonymization.ipynb Open In Colab Privacy-preserving blur
08_gaze_estimation.ipynb Open In Colab Gaze direction estimation
09_face_segmentation.ipynb Open In Colab 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:

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uniface-2.3.0.tar.gz (71.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

uniface-2.3.0-py3-none-any.whl (88.8 kB view details)

Uploaded Python 3

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

Hashes for uniface-2.3.0.tar.gz
Algorithm Hash digest
SHA256 c3ef5cca40f1305442151d9306f6615d507e5e6a60f76e5b00d2ec9e97201fab
MD5 53ec0271335d94bc12afb160f10f48df
BLAKE2b-256 24c2f2731fe908075fa44de0e75c78a512d8ec62fca448c127b7bdfb8c98d5a7

See more details on using hashes here.

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

Hashes for uniface-2.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a15926d3acf0c8fd27bf0264da26f5b73f9a730f38a610366cf8e8ad20bf9052
MD5 ea512046480aa3c5e5246b78c28cfbe1
BLAKE2b-256 8b843c2a0fe6f3c6bc3dbbf0748a64e707b367f445b6797f7344005588bee64a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page