Skip to main content

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 gaze coordinates and camera-space gaze vectors.
  • 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 (number): [0, 1]. Inner Brow Raiser. Default: null.
    • AU2 (number): [0, 1]. Outer Brow Raiser. Default: null.
    • AU4 (number): [0, 1]. Brow Lowerer. Default: null.
    • AU5 (number): [0, 1]. Upper Lid Raiser. Default: null.
    • AU6 (number): [0, 1]. Cheek Raiser. Default: null.
    • AU7 (number): [0, 1]. Lid Tightener. Default: null.
    • AU9 (number): [0, 1]. Nose Wrinkler. Default: null.
    • AU10 (number): [0, 1]. Upper Lip Raiser. Default: null.
    • AU12 (number): [0, 1]. Lip Corner Puller. Default: null.
    • AU15 (number): [0, 1]. Lip Corner Depressor. Default: null.
    • AU17 (number): [0, 1]. Chin Raiser. Default: null.
    • AU20 (number): [0, 1]. Lip Stretcher. Default: null.
    • AU23 (number): [0, 1]. Lip Tightener. Default: null.
    • AU24 (number): [0, 1]. Lip Pressor. Default: null.
    • AU25 (number): [0, 1]. Lips Part. Default: null.
    • AU26 (number): [0, 1]. Jaw Drop. Default: 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 (number): Confidence in [0, 1]. Default: null.
    • anger (number): Confidence in [0, 1]. Default: null.
    • disgust (number): Confidence in [0, 1]. Default: null.
    • fear (number): Confidence in [0, 1]. Default: null.
    • happy (number): Confidence in [0, 1]. Default: null.
    • sad (number): Confidence in [0, 1]. Default: null.
    • surprise (number): Confidence in [0, 1]. Default: 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 gaze coordinates and camera-space gaze vectors.

Properties

  • face_gaze_screen (array, required)

Definitions

  • GazeData (object)
    • success (boolean, required)
    • gaze_screen_px (required): Refer to GazePoint.
    • gaze_cm (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_cm": {
                    "left_eye": [
                        15.5,
                        5.0,
                        2.5
                    ],
                    "right_eye": [
                        15.5,
                        5.0,
                        2.5
                    ]
                },
                "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.2.tar.gz (106.2 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.2-py3-none-any.whl (23.6 kB view details)

Uploaded Python 3

File details

Details for the file seetapsych_attributes-0.0.2.tar.gz.

File metadata

  • Download URL: seetapsych_attributes-0.0.2.tar.gz
  • Upload date:
  • Size: 106.2 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.2.tar.gz
Algorithm Hash digest
SHA256 c06bed2ba8e9f4fc6b264eb0159efdac9666f74c673b555068f76d18bc12a342
MD5 f7f048b4a593d96400b7af59bb6ad848
BLAKE2b-256 ffd94213ec970e6152222d188d4aec190b28e57038f5009dc18ace7f16f45f2b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for seetapsych_attributes-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 bb4df0e8d031b3ead2c13e3491eee4cfbd1a0519b715e7dffb6b35b4c1261cda
MD5 0253372abd3e1f61934e272efa934e92
BLAKE2b-256 02ecbd37d8648dcc28ed9682951e0133f26a48ddfbbd4c1426953489006750f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for seetapsych_attributes-0.0.2-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.2 This release

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