2025-03-16 14:36:35 +09:00
[ project ]
name = "uniface"
2025-12-30 00:20:34 +09:00
version = "2.0.0"
2025-12-14 21:13:53 +09:00
description = "UniFace: A Comprehensive Library for Face Detection, Recognition, Landmark Analysis, Face Parsing, Gaze Estimation, Age, and Gender Detection"
2025-03-16 14:36:35 +09:00
readme = "README.md"
license = { text = "MIT" }
2025-11-30 20:32:07 +09:00
authors = [ { name = "Yakhyokhuja Valikhujaev" , email = "yakhyo9696@gmail.com" } ]
maintainers = [
{ name = "Yakhyokhuja Valikhujaev" , email = "yakhyo9696@gmail.com" } ,
2025-03-16 14:36:35 +09:00
]
2025-11-30 20:32:07 +09:00
2025-12-24 00:51:36 +09:00
requires-python = ">=3.11,<3.14"
2025-11-30 20:32:07 +09:00
keywords = [
"face-detection" ,
"face-recognition" ,
"facial-landmarks" ,
2025-12-14 21:13:53 +09:00
"face-parsing" ,
"face-segmentation" ,
2025-12-14 14:07:46 +09:00
"gaze-estimation" ,
2025-11-30 20:32:07 +09:00
"age-detection" ,
"gender-detection" ,
"computer-vision" ,
"deep-learning" ,
"onnx" ,
"onnxruntime" ,
"face-analysis" ,
2025-12-14 21:13:53 +09:00
"bisenet" ,
2025-11-30 20:32:07 +09:00
]
classifiers = [
"Development Status :: 4 - Beta" ,
"Intended Audience :: Developers" ,
"Intended Audience :: Science/Research" ,
"License :: OSI Approved :: MIT License" ,
"Operating System :: OS Independent" ,
"Programming Language :: Python :: 3" ,
"Programming Language :: Python :: 3.11" ,
"Programming Language :: Python :: 3.12" ,
"Programming Language :: Python :: 3.13" ,
]
2025-03-16 14:36:35 +09:00
dependencies = [
2025-11-08 01:02:14 +09:00
"numpy>=1.21.0" ,
"opencv-python>=4.5.0" ,
"onnx>=1.12.0" ,
"onnxruntime>=1.16.0" ,
"scikit-image>=0.19.0" ,
"requests>=2.28.0" ,
2025-11-30 20:32:07 +09:00
"tqdm>=4.64.0" ,
2025-03-16 14:36:35 +09:00
]
[ project . optional-dependencies ]
2025-11-26 00:05:24 +09:00
dev = [ "pytest>=7.0.0" , "ruff>=0.4.0" ]
2025-11-08 01:02:14 +09:00
gpu = [ "onnxruntime-gpu>=1.16.0" ]
2025-03-16 14:36:35 +09:00
[ project . urls ]
Homepage = "https://github.com/yakhyo/uniface"
Repository = "https://github.com/yakhyo/uniface"
2025-11-30 20:32:07 +09:00
Documentation = "https://github.com/yakhyo/uniface/blob/main/README.md"
"Quick Start" = "https://github.com/yakhyo/uniface/blob/main/QUICKSTART.md"
"Model Zoo" = "https://github.com/yakhyo/uniface/blob/main/MODELS.md"
2025-03-16 14:36:35 +09:00
[ build-system ]
requires = [ "setuptools>=64" , "wheel" ]
build-backend = "setuptools.build_meta"
[ tool . setuptools ]
2025-11-30 20:32:07 +09:00
packages = { find = { where = [ "." ] , include = [ "uniface*" ] } }
2025-03-16 14:36:35 +09:00
[ tool . setuptools . package-data ]
2025-11-30 20:32:07 +09:00
uniface = [ "py.typed" ]
2025-11-26 00:05:24 +09:00
[ tool . ruff ]
line-length = 120
2025-12-24 00:51:36 +09:00
target-version = "py311"
2025-11-30 20:32:07 +09:00
exclude = [
".git" ,
".ruff_cache" ,
"__pycache__" ,
"build" ,
"dist" ,
"*.egg-info" ,
".venv" ,
"venv" ,
".pytest_cache" ,
".mypy_cache" ,
"*.ipynb" ,
]
[ tool . ruff . format ]
quote-style = "single"
2025-12-30 00:20:34 +09:00
docstring-code-format = true
2025-11-26 00:05:24 +09:00
[ tool . ruff . lint ]
2025-12-30 00:20:34 +09:00
select = [
"E" , # pycodestyle errors
"F" , # pyflakes
"I" , # isort
"W" , # pycodestyle warnings
"UP" , # pyupgrade (modern Python syntax)
"B" , # flake8-bugbear
"C4" , # flake8-comprehensions
"SIM" , # flake8-simplify
"RUF" , # Ruff-specific rules
]
ignore = [
"E501" , # Line too long (handled by formatter)
"B008" , # Function call in default argument (common in FastAPI/Click)
"SIM108" , # Use ternary operator (can reduce readability)
"RUF022" , # Allow logical grouping in __all__ instead of alphabetical sorting
]
2025-11-26 00:05:24 +09:00
2025-11-30 20:32:07 +09:00
[ tool . ruff . lint . flake8-quotes ]
docstring-quotes = "double"
2025-11-26 00:05:24 +09:00
[ tool . ruff . lint . isort ]
2025-12-30 00:20:34 +09:00
force-single-line = false
force-sort-within-sections = true
2025-11-26 00:05:24 +09:00
known-first-party = [ "uniface" ]
2025-12-30 00:20:34 +09:00
section-order = [
"future" ,
"standard-library" ,
"third-party" ,
"first-party" ,
"local-folder" ,
]
[ tool . ruff . lint . pydocstyle ]
convention = "google"
[ tool . mypy ]
python_version = "3.11"
warn_return_any = false
warn_unused_ignores = true
ignore_missing_imports = true
exclude = [ "tests/" , "scripts/" , "examples/" ]
# Disable strict return type checking for numpy operations
disable_error_code = [ "no-any-return" ]
[ tool . bandit ]
exclude_dirs = [ "tests" , "scripts" , "examples" ]
skips = [ "B101" , "B614" ] # B101: assert, B614: torch.jit.load (models are SHA256 verified)
[ tool . pytest . ini_options ]
testpaths = [ "tests" ]
python_files = [ "test_*.py" ]
python_functions = [ "test_*" ]
addopts = "-v --tb=short"