Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

SeetaPsych Attributes

Face and body based psychology analysis

SeetaPsych Lib is a Python library for face- and body-based psychology analysis. It provides a modular Pipeline/Runner runtime and an optional Streamlit WebUI.

This project is used to manage the specifications for various attribute outputs, providing a unified standard so that different algorithm implementations can produce interchangeable and reusable module outputs.

TypedDict Type Hints

Alongside the JSON schemas documented below, this project ships a set of ready-to-use TypedDict declarations under seetapsych_attributes.types so that your IDE can provide auto-completions and static type checks directly on the runner's report dict:

# -*- coding: utf-8 -*-
import json

import cv2

from seetapsych_lib.runtime.factory import Factory
from seetapsych_lib.runtime.pipeline import Pipeline
from seetapsych_lib.runtime.runner import Runner

from seetapsych_attributes.types import Report, BBox, FaceDetection


def main():
    factory = Factory()
    factory.load_builtin_modules()

    pipeline = Pipeline(factory, attributes=["face/detection"])
    pipeline.solve()
    pipeline.install_requirements()
    pipeline.cache_models()

    runner = Runner(pipeline)

    report: Report = runner.run(data={"default": cv2.imread("data/a.jpg")})

    # IDE autocompletion + type inference for every attribute key:
    detections: FaceDetection | None = report.get("face_detection")
    if detections:
        first: BBox = detections[0]
        x1, y1, x2, y2 = first["xyxy"]
        score: float = first["score"]
        print(f"face at ({x1},{y1})-({x2},{y2}), score = {score:.3f}")

    print(json.dumps(report, indent=2, ensure_ascii=False))


if __name__ == "__main__":
    main()

The top-level Report TypedDict includes every attribute key defined in the catalog (all fields are optional, because a pipeline may only request a subset). Per-attribute element types such as BBox, Landmarks, Selection, ActionUnits, Expression, HeartRate, HeadSocialGaze, etc. are also exported individually.

Catalog

  • face/detection Face detection results as rectangular bounding boxes.
  • face/landmarks Facial landmarks for basic alignment: L-eye, R-eye, nose, L-mouth, R-mouth (10 interleaved floats).
  • face/selection Selected face PID. Selected face order is reflected in face/detection and face/landmarks.
  • face/action_units Indicate the confidence level of each Action Unit. Not all Action Units' results may be output.
  • face/expression Indicate the confidence level of each expression.
  • face/dense_landmarks 280-point dense facial landmarks (560 interleaved [x,y] floats).
  • face/mesh 468-point 3D face mesh landmarks in normalized coordinates.
  • face/gaze_screen Per-eye screen-space point-of-gaze coordinates in pixels and camera-space point-of-gaze coordinates in millimeters. Camera-space coordinates may be 2D or 3D depending on the algorithm; origin is at the camera center.
  • face/heart_rate Heart rate (BPM) estimated from buffered face video frames.
  • face/dimensional_affect Continuous valence-arousal affect dimensions alongside discrete expressions and Action Units.
  • head/detection Multi-person head bounding box detection results.
  • head/selection Top-N head selection result (count + original indices), reordering head_detection.
  • head/gaze_point Per-head 2D scene gaze target point with associated likelihood heatmap.
  • head/social_gaze Dyadic social gaze relations between two detected people. Class set: share, mutual, single, miss, void.

face/detection

Face detection results as rectangular bounding boxes.

Properties

  • face_detection (array, required)
    • Items: Refer to BBox.

Definitions

  • BBox (object)
    • xyxy (array, required): Length must be equal to 4.
      • Items (number)
    • score (number, required)

Examples

{
    "face_detection": [
        {
            "score": 0.5,
            "xyxy": [
                100,
                200,
                300,
                400
            ]
        }
    ]
}

face/landmarks

Facial landmarks for basic alignment: L-eye, R-eye, nose, L-mouth, R-mouth (10 interleaved floats).

Properties

  • face_landmarks (array, required)

Definitions

  • Landmarks (object)
    • landmarks (array, required): Length must be equal to 10.
      • Items (number)

Examples

{
    "face_landmarks": [
        {
            "landmarks": [
                100,
                100,
                200,
                200,
                300,
                300,
                400,
                400,
                500,
                500
            ]
        }
    ]
}

face/selection

Selected face PID. Selected face order is reflected in face/detection and face/landmarks.

Properties

  • face_selection (required): Refer to Selection.

Definitions

  • Selection (object)
    • pid (integer, required): PID of selected face detection (1-based).

Examples

{
    "face_detection": [
        {
            "score": 0.5,
            "xyxy": [
                100,
                200,
                300,
                400
            ]
        }
    ],
    "face_selection": {
        "pid": 1
    }
}

face/action_units

Indicate the confidence level of each Action Unit. Not all Action Units' results may be output.

Properties

  • face_action_units (array, required)

Definitions

  • ActionUnits (object)
    • AU1: [0, 1]. Inner Brow Raiser. Default: null.
      • Any of
        • number
        • null
    • AU2: [0, 1]. Outer Brow Raiser. Default: null.
      • Any of
        • number
        • null
    • AU4: [0, 1]. Brow Lowerer. Default: null.
      • Any of
        • number
        • null
    • AU5: [0, 1]. Upper Lid Raiser. Default: null.
      • Any of
        • number
        • null
    • AU6: [0, 1]. Cheek Raiser. Default: null.
      • Any of
        • number
        • null
    • AU7: [0, 1]. Lid Tightener. Default: null.
      • Any of
        • number
        • null
    • AU9: [0, 1]. Nose Wrinkler. Default: null.
      • Any of
        • number
        • null
    • AU10: [0, 1]. Upper Lip Raiser. Default: null.
      • Any of
        • number
        • null
    • AU12: [0, 1]. Lip Corner Puller. Default: null.
      • Any of
        • number
        • null
    • AU15: [0, 1]. Lip Corner Depressor. Default: null.
      • Any of
        • number
        • null
    • AU17: [0, 1]. Chin Raiser. Default: null.
      • Any of
        • number
        • null
    • AU20: [0, 1]. Lip Stretcher. Default: null.
      • Any of
        • number
        • null
    • AU23: [0, 1]. Lip Tightener. Default: null.
      • Any of
        • number
        • null
    • AU24: [0, 1]. Lip Pressor. Default: null.
      • Any of
        • number
        • null
    • AU25: [0, 1]. Lips Part. Default: null.
      • Any of
        • number
        • null
    • AU26: [0, 1]. Jaw Drop. Default: null.
      • Any of
        • number
        • null

Examples

{
    "face_action_units": [
        {
            "AU1": 0.5,
            "AU10": 0.5,
            "AU12": 0.5,
            "AU15": 0.5,
            "AU17": 0.5,
            "AU2": 0.5,
            "AU20": 0.5,
            "AU23": 0.5,
            "AU24": 0.5,
            "AU25": 0.5,
            "AU26": 0.5,
            "AU4": 0.5,
            "AU5": 0.5,
            "AU6": 0.5,
            "AU7": 0.5,
            "AU9": 0.5
        }
    ]
}

face/expression

Indicate the confidence level of each expression.

Properties

  • face_expression (array, required)

Definitions

  • Expression (object)
    • neutral: Confidence in [0, 1]. Default: null.
      • Any of
        • number
        • null
    • anger: Confidence in [0, 1]. Default: null.
      • Any of
        • number
        • null
    • disgust: Confidence in [0, 1]. Default: null.
      • Any of
        • number
        • null
    • fear: Confidence in [0, 1]. Default: null.
      • Any of
        • number
        • null
    • happy: Confidence in [0, 1]. Default: null.
      • Any of
        • number
        • null
    • sad: Confidence in [0, 1]. Default: null.
      • Any of
        • number
        • null
    • surprise: Confidence in [0, 1]. Default: null.
      • Any of
        • number
        • null

Examples

{
    "face_expression": [
        {
            "anger": 0.01,
            "disgust": 0.01,
            "fear": 0.01,
            "happy": 0.94,
            "neutral": 0.01,
            "sad": 0.01,
            "surprise": 0.01
        }
    ]
}

face/dense_landmarks

280-point dense facial landmarks (560 interleaved [x,y] floats).

Properties

  • face_dense_landmarks (array, required)

Definitions

  • DenseLandmarks (object)
    • landmarks (array, required): Length must be equal to 560.
      • Items (number)

Examples

{
    "face_dense_landmarks": [
        {
            "landmarks": "[100.0] * 560"
        }
    ]
}

face/mesh

468-point 3D face mesh landmarks in normalized coordinates.

Properties

Definitions

  • MeshLandmarks (object)
    • normalized_3d_landmarks (array, required): Length must be equal to 1404.
      • Items (number)

Examples

{
    "face_mesh": [
        {
            "normalized_3d_landmarks": "[0.5] * 1404"
        }
    ]
}

face/gaze_screen

Per-eye screen-space point-of-gaze coordinates in pixels and camera-space point-of-gaze coordinates in millimeters. Camera-space coordinates may be 2D or 3D depending on the algorithm; origin is at the camera center.

Properties

  • face_gaze_screen (array, required)

Definitions

  • GazeData (object): Gaze estimation result for a single face.
    • success (boolean, required): Whether gaze estimation succeeded for this face.
    • gaze_screen_px (required): Per-eye point-of-gaze coordinates in screen-space pixels. The origin is at the left top corner of the screen. The coordinate system is shown as Fig. 1. Refer to GazePoint.
    • gaze_camera_mm (required): Per-eye point-of-gaze coordinates in the camera coordinate system, measured in millimeters. The coordinate origin is located at the camera optical center. Depending on the gaze estimation algorithm, the point-of-gaze can be represented either as a 2D coordinate on the camera image plane or as a 3D point in camera space. The coordinate definitions for 2D and 3D gaze_camera_mm are illustrated in Fig. 2 and Fig. 3, respectively. Different algorithms may natively output in different coordinate frames; all values are normalized to the conventions documented here before being returned. Refer to GazePoint.
  • GazePoint (object): Point-of-gaze coordinates for two eyes in either screen-pixel or camera-millimeter space.
    • left_eye (array, required): Gaze-screen-px [x,y] or gaze-camera-mm [x,y(,z)]; 2D or 3D depending on algorithm; empty list if unavailable. Length must be between 0 and 3 (inclusive).
      • Items (number)
    • right_eye (array, required): Screen-px [x,y] or camera-mm [x,y(,z)]; 2D or 3D depending on algorithm; empty list if unavailable. Length must be between 0 and 3 (inclusive).
      • Items (number)
  • GazeScreen (object): Wrapper for per-face gaze data in face/gaze_screen schema.
Coordinate system for gaze_screen_px
Figure 1. Coordinate system for gaze_screen_px
Coordinate system for gaze_camera_mm(2D)
Figure 2. Coordinate system for gaze_camera_mm(2D)
Coordinate system for gaze_camera_mm(3D)
Figure 3. Coordinate system for gaze_camera_mm(3D)

Examples

{
    "face_gaze_screen": [
        {
            "gaze": {
                "gaze_camera_mm": {
                    "left_eye": [
                        155.0,
                        50.0,
                        25.0
                    ],
                    "right_eye": [
                        155.0,
                        50.0,
                        25.0
                    ]
                },
                "gaze_screen_px": {
                    "left_eye": [
                        960.0,
                        540.0
                    ],
                    "right_eye": [
                        960.0,
                        540.0
                    ]
                },
                "success": true
            }
        }
    ]
}

face/heart_rate

Heart rate (BPM) estimated from buffered face video frames.

Properties

  • face_heart_rate (required): Refer to HeartRate.

Definitions

  • HeartRate (object)
    • fps (number, required): Current estimated frames per second.
    • wait_seconds (number, required): Seconds remaining until enough data is buffered. 0.0 when HR is ready.
    • hr_bpm: Estimated heart rate in beats per minute. Present only when ready. Default: null.
      • Any of
        • number
        • null

Examples

{
    "face_heart_rate": {
        "fps": 30.0,
        "hr_bpm": 72.5,
        "wait_seconds": 0.0
    }
}
{
    "face_heart_rate": {
        "fps": 30.0,
        "wait_seconds": 5.2
    }
}

face/dimensional_affect

Continuous valence-arousal affect dimensions alongside discrete expressions and Action Units.

Properties

Definitions

  • DimensionalAffect (object)
    • valence (number, required): Valence dimension in continuous affect space. Positive = pleasant, negative = unpleasant.
    • arousal (number, required): Arousal dimension in continuous affect space. Positive = activated, negative = calm.

Examples

{
    "face_dimensional_affect": [
        {
            "arousal": 0.32,
            "valence": 0.85
        }
    ]
}

head/detection

Multi-person head bounding box detection results.

Properties

  • head_detection (array, required)

Definitions

  • HeadBBox (object)
    • xyxy (array, required): Length must be equal to 4.
      • Items (integer)
    • score (number, required)

Examples

{
    "head_detection": [
        {
            "score": 0.85,
            "xyxy": [
                100,
                200,
                300,
                400
            ]
        }
    ]
}

head/selection

Top-N head selection result (count + original indices), reordering head_detection.

Properties

Definitions

  • HeadSelection (object)
    • count (integer, required): Number of selected head detections.
    • selected_indices (array, required): Indices of selected detections in the original head_detection list, before sorting.
      • Items (integer)

Examples

{
    "head_detection": [
        {
            "score": 0.85,
            "xyxy": [
                100,
                200,
                300,
                400
            ]
        }
    ],
    "head_selection": {
        "count": 1,
        "selected_indices": [
            0
        ]
    }
}

head/gaze_point

Per-head 2D scene gaze target point with associated likelihood heatmap.

Properties

  • head_gaze_point (array, required)

Definitions

  • HeadGazePoint (object)
    • head_location_xyxy (array, required): Length must be equal to 4.
      • Items (integer)
    • gaze_point_px (array, required): Length must be equal to 2.
      • Items (number)
    • heatmap (array, required): 2D gaze likelihood heatmap over the scene. Runtime type: numpy.ndarray of float32, shape [image_height, image_width], values in [0, 1] probability range.
      • Items (array)
        • Items (number)

Examples

{
    "head_gaze_point": [
        {
            "gaze_point_px": [
                640.0,
                360.0
            ],
            "head_location_xyxy": [
                100,
                200,
                300,
                400
            ],
            "heatmap": "numpy.ndarray(shape=[H, W], dtype=float32) -- 2D [0,1] gaze likelihood heatmap"
        }
    ]
}

head/social_gaze

Dyadic social gaze relations between two detected people. Class set: share, mutual, single, miss, void.

Properties

Definitions

  • HeadSocialGaze (object)
    • principal: Left-side / primary person in dyadic interaction. Default: null.
    • associate: Right-side / secondary person in dyadic interaction. Default: null.
    • success (boolean): Whether at least two heads were detected for social gaze inference. Default: true.
  • SocialGazePerson (object)
    • head_location_xyxy (array, required): Length must be equal to 4.
      • Items (integer)
    • gaze_point_px (array, required): Length must be equal to 2.
      • Items (number)
    • heatmap (array, required): 2D gaze likelihood heatmap. Runtime type: numpy.ndarray of float32, shape [image_height, image_width], values in [0, 1] probability range.
      • Items (array)
        • Items (number)
    • social_gaze_id (integer, required): Integer class ID of the social gaze relation. Ordered mapping: 0=share, 1=mutual, 2=single, 3=miss, 4=void.
    • social_gaze_label (string, required): Human-readable social gaze relation label. Possible values: share, mutual, single, miss, void. Index of the value matches social_gaze_id.

Examples

{
    "head_social_gaze": {
        "associate": {
            "gaze_point_px": [
                200.0,
                300.0
            ],
            "head_location_xyxy": [
                600,
                200,
                800,
                400
            ],
            "heatmap": "numpy.ndarray(shape=[H, W], dtype=float32) -- 2D [0,1] gaze likelihood heatmap",
            "social_gaze_id": 1,
            "social_gaze_label": "mutual"
        },
        "principal": {
            "gaze_point_px": [
                800.0,
                300.0
            ],
            "head_location_xyxy": [
                100,
                200,
                300,
                400
            ],
            "heatmap": "numpy.ndarray(shape=[H, W], dtype=float32) -- 2D [0,1] gaze likelihood heatmap",
            "social_gaze_id": 1,
            "social_gaze_label": "mutual"
        },
        "success": true
    }
}
{
    "head_social_gaze": {
        "success": false
    }
}

Download files

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

Source Distribution

seetapsych_attributes-0.0.3rc3.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

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

seetapsych_attributes-0.0.3rc3-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

File details

Details for the file seetapsych_attributes-0.0.3rc3.tar.gz.

File metadata

  • Download URL: seetapsych_attributes-0.0.3rc3.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for seetapsych_attributes-0.0.3rc3.tar.gz
Algorithm Hash digest
SHA256 e7e4250fbcce580337a5e20e1fa568c572603b55db35c4f10c4eed38172d409b
MD5 dbc75804e983bf1138906d949f238d41
BLAKE2b-256 e06222215122e1e3ff2e8bc6dea235089d0f9738c45cda4ba9c83c8e70903575

See more details on using hashes here.

Provenance

The following attestation bundles were made for seetapsych_attributes-0.0.3rc3.tar.gz:

Publisher: publish.yml on seetapsych/seetapsych-attributes

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file seetapsych_attributes-0.0.3rc3-py3-none-any.whl.

File metadata

File hashes

Hashes for seetapsych_attributes-0.0.3rc3-py3-none-any.whl
Algorithm Hash digest
SHA256 606bbfdbc6dd01c5647f5be0ef4551cf103e6a464e8059bcebaef9dcc56b183c
MD5 21e42e23a46c8d2a02ddaf464104c535
BLAKE2b-256 ef52d553c7efb043e9052a11ecde569ed68e0bc506f10fa262e231c2c6fa1a98

See more details on using hashes here.

Provenance

The following attestation bundles were made for seetapsych_attributes-0.0.3rc3-py3-none-any.whl:

Publisher: publish.yml on seetapsych/seetapsych-attributes

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.0.3.post1

2 files

0.0.3

2 files

This release

0.0.3rc3 This release

2 files

0.0.2

2 files

0.0.1

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page