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)
    • success (boolean, required)
    • gaze_screen_px (required): Refer to GazePoint.
    • gaze_camera_mm (required): Refer to GazePoint.
  • GazePoint (object)
    • left_eye (array, required): Length must be between 0 and 3 (inclusive).
      • Items (number)
    • right_eye (array, required): Length must be between 0 and 3 (inclusive).
      • Items (number)
  • GazeScreen (object)

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.3rc2.tar.gz (110.9 kB 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.3rc2-py3-none-any.whl (24.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: seetapsych_attributes-0.0.3rc2.tar.gz
  • Upload date:
  • Size: 110.9 kB
  • 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.3rc2.tar.gz
Algorithm Hash digest
SHA256 127831b2da2dc1b0d72fc3f2025a6c55a403439d82b09567ef0d9be8dea551f4
MD5 7d807239e2540d9240d7c5ebf4bc3736
BLAKE2b-256 360113e847a3e9273bbc45188c099c3e78e10354470540df4ce9080885d16875

See more details on using hashes here.

Provenance

The following attestation bundles were made for seetapsych_attributes-0.0.3rc2.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.3rc2-py3-none-any.whl.

File metadata

File hashes

Hashes for seetapsych_attributes-0.0.3rc2-py3-none-any.whl
Algorithm Hash digest
SHA256 4189805ae7f5b51494977110736997c001c70f03b2d11bb00bf3120c8791b4a5
MD5 ecf86cc941f6de98d49ef3e9807f8c87
BLAKE2b-256 b0a58bdca2c8c392c6492ca5dcb2d8ee9b46037d5ceb07f1a4ba405e4ad9dd85

See more details on using hashes here.

Provenance

The following attestation bundles were made for seetapsych_attributes-0.0.3rc2-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.3rc2 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