Module compoelem.generate.pose_direction

Expand source code
from typing import Iterator, Tuple, cast

import cv2
import numpy as np

from compoelem.generate.bisection import get_angle, get_bisection_cone, get_bisection_point, get_centroids_for_bisection, keypoint_to_point
from compoelem.config import config
from compoelem.detect.converter import k, p
from compoelem.types import *

def get_pose_directions(poses: Poses, fallback = False) -> Sequence[PoseDirection]:
    """Generate pose directions from multiple input Poses

    Args:
        poses (Poses): Poses obtained by keypoint detection method

    Returns:
        Sequence[PoseDirection]: A list of pose directions
    """
    pose_directions: Sequence[PoseDirection] = []
    # pose_directions: Sequence[Tuple[Point, Point]] = [];
    for pose in poses:
        try:
            pose_directions.append(get_pose_direction(pose, fallback))
        except ValueError:
            # print('skipping pose because of missing points') #TODO selbe optimierung wie bei trianlge abstraction
            pass
    return pose_directions

def get_pose_direction(pose: Pose, fallback=False) -> PoseDirection:
    top_kp, middle_kp, bottom_kp = get_centroids_for_bisection(pose.keypoints, fallback)
    bisection_point = get_bisection_point(top_kp, middle_kp, bottom_kp)
    bisection_cone = get_bisection_cone(top_kp, middle_kp, bottom_kp)
    middle_pose_direction = PoseDirection(keypoint_to_point(middle_kp), keypoint_to_point(bisection_point), bisection_cone)
    return middle_pose_direction

Functions

def get_pose_direction(pose: Pose, fallback=False) ‑> PoseDirection
Expand source code
def get_pose_direction(pose: Pose, fallback=False) -> PoseDirection:
    top_kp, middle_kp, bottom_kp = get_centroids_for_bisection(pose.keypoints, fallback)
    bisection_point = get_bisection_point(top_kp, middle_kp, bottom_kp)
    bisection_cone = get_bisection_cone(top_kp, middle_kp, bottom_kp)
    middle_pose_direction = PoseDirection(keypoint_to_point(middle_kp), keypoint_to_point(bisection_point), bisection_cone)
    return middle_pose_direction
def get_pose_directions(poses: Sequence[Pose], fallback=False) ‑> Sequence[PoseDirection]

Generate pose directions from multiple input Poses

Args

poses : Poses
Poses obtained by keypoint detection method

Returns

Sequence[PoseDirection]
A list of pose directions
Expand source code
def get_pose_directions(poses: Poses, fallback = False) -> Sequence[PoseDirection]:
    """Generate pose directions from multiple input Poses

    Args:
        poses (Poses): Poses obtained by keypoint detection method

    Returns:
        Sequence[PoseDirection]: A list of pose directions
    """
    pose_directions: Sequence[PoseDirection] = []
    # pose_directions: Sequence[Tuple[Point, Point]] = [];
    for pose in poses:
        try:
            pose_directions.append(get_pose_direction(pose, fallback))
        except ValueError:
            # print('skipping pose because of missing points') #TODO selbe optimierung wie bei trianlge abstraction
            pass
    return pose_directions