From 8fd8802a07eb3f9fd5d62047ebde3837e6fa8cc0 Mon Sep 17 00:00:00 2001 From: Batmaev Date: Mon, 17 Nov 2025 02:53:44 +0300 Subject: [PATCH 1/4] add tf dependency --- python/pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index b03a207..1989782 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -19,7 +19,8 @@ dependencies = [ 'mediapipe', 'numpy', "opencv-python", - "scipy" + "scipy", + "tensorflow", ] [project.optional-dependencies] From dcf1b452d80e96949702b376545262f4b99363eb Mon Sep 17 00:00:00 2001 From: Batmaev Date: Mon, 17 Nov 2025 02:57:01 +0300 Subject: [PATCH 2/4] restrict python versions (for mediapipe) --- python/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index 1989782..42b1053 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -7,7 +7,7 @@ authors = [ ] license = 'MIT' readme = "README.md" -requires-python = ">3.6" +requires-python = ">=3.9, <3.13" # mediapipe requires 3.9-3.12 keywords = ["eye-tracking", "scalable", "rgb", "gaze"] From 2b3feac6714bdc3b99b46a5f0b30f1a86086f5ef Mon Sep 17 00:00:00 2001 From: Batmaev Date: Mon, 17 Nov 2025 02:57:39 +0300 Subject: [PATCH 3/4] fix 'default factory' errors --- python/webeyetrack/data_protocols.py | 2 +- python/webeyetrack/webeyetrack.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/python/webeyetrack/data_protocols.py b/python/webeyetrack/data_protocols.py index fbcb28a..b5a80f6 100644 --- a/python/webeyetrack/data_protocols.py +++ b/python/webeyetrack/data_protocols.py @@ -128,7 +128,7 @@ class GazeResult: gaze_state: Literal['open', 'closed'] = 'open' # PoG (normalized screen coordinates) - norm_pog: np.ndarray = np.array([0.5, 0.5]) + norm_pog: np.ndarray = field(default_factory=lambda: np.array([0.5, 0.5])) # Meta data durations: dict[str, float] = field(default_factory=dict) # seconds diff --git a/python/webeyetrack/webeyetrack.py b/python/webeyetrack/webeyetrack.py index ed742fb..3dd1975 100644 --- a/python/webeyetrack/webeyetrack.py +++ b/python/webeyetrack/webeyetrack.py @@ -1,7 +1,7 @@ import time import pathlib from typing import Union, Any, Tuple, Optional, List, Literal -from dataclasses import dataclass +from dataclasses import dataclass, field import random import tensorflow as tf @@ -171,8 +171,8 @@ class WebEyeTrackConfig(): screen_cm_dimensions: Tuple[float, float] = (53.1, 29.8) verbose: bool = False affine_matrix: Optional[np.ndarray] = None - kalman_config: KalmanFilterConfig = KalmanFilterConfig() - calib_config: CalibConfig = CalibConfig() + kalman_config: KalmanFilterConfig = field(default_factory=lambda: KalmanFilterConfig()) + calib_config: CalibConfig = field(default_factory=lambda: CalibConfig()) class WebEyeTrack(): From cce70381bef879b3f2a5872becb10a4def962ce7 Mon Sep 17 00:00:00 2001 From: Batmaev Date: Mon, 17 Nov 2025 18:11:15 +0300 Subject: [PATCH 4/4] include model weights in the package --- python/pyproject.toml | 5 +++++ python/webeyetrack/constants.py | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/python/pyproject.toml b/python/pyproject.toml index 42b1053..56fcfd6 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -44,6 +44,11 @@ include-package-data = true [tool.setuptools.packages.find] where = ["."] +[tool.setuptools.package-data] +webeyetrack = [ + "model_weights/*", +] + [tool.ruff] ignore = ["E501"] select = ["E", "W", "F", "C", "B", "I"] diff --git a/python/webeyetrack/constants.py b/python/webeyetrack/constants.py index 22b4a50..54f2852 100644 --- a/python/webeyetrack/constants.py +++ b/python/webeyetrack/constants.py @@ -1,8 +1,8 @@ import pathlib import numpy as np -GIT_ROOT = pathlib.Path(__file__).parent.parent.parent -PACKAGE_DIR = GIT_ROOT / 'python' / 'webeyetrack' +# Resolve paths relative to the installed package directory (not GIT_ROOT) so it works in wheels. importlib.resources might be a better option. +PACKAGE_DIR = pathlib.Path(__file__).parent DEFAULT_CONFIG = PACKAGE_DIR / 'default_config.yaml' MODEL_WEIGHTS = PACKAGE_DIR / 'model_weights' FACE_LANDMARKER_PATH = MODEL_WEIGHTS / 'face_landmarker_v2_with_blendshapes.task'