Module compoelem.generate.pose_clustering
Expand source code
from typing import Iterator, Tuple, cast
import cv2
import numpy as np
from shapely.geometry import Polygon
from compoelem import visualize
from compoelem.generate.bisection import get_bisection_point
from compoelem.config import config
from compoelem.detect.converter import k, p
from compoelem.types import *
def get_pose_cluster_convex_hull(poses: Poses) -> Polygon:
flat_keypoint_list: Sequence[Tuple[int, int]] = []
for pose in poses:
for kp in pose.keypoints:
if not kp.isNone:
flat_keypoint_list.append(k(kp))
keypoint_cloud_polygon = Polygon(flat_keypoint_list)
return cast(Polygon, keypoint_cloud_polygon.convex_hull)
def get_pose_cluster_border_hull(poses: Poses, x_max, y_max) -> Polygon:
flat_keypoint_list: Sequence[Tuple[int, int]] = []
for pose in poses:
for kp in pose.keypoints:
if not kp.isNone:
flat_keypoint_list.append(k(kp))
flat_keypoint_array = np.array(flat_keypoint_list)
left_side_keypoints: Sequence[Tuple[int, int]] = []
right_side_keypoints: Sequence[Tuple[int, int]] = []
for i in range(0, y_max):
y_keypoint_line = flat_keypoint_array[flat_keypoint_array[:,1] == i][:,0]
if len(y_keypoint_line) > 0:
right_side_keypoints.append((max(y_keypoint_line), i))
left_side_keypoints.append((min(y_keypoint_line), i))
top_side_keypoints: Sequence[Tuple[int, int]] = []
# TODO: add another loop for the top line calculation
# TODO: develop a method to merge left, top and right side's together
return Polygon(left_side_keypoints) # INFO only return left side for testing purposes
Functions
def get_pose_cluster_border_hull(poses: Sequence[Pose], x_max, y_max) ‑> shapely.geometry.polygon.Polygon
-
Expand source code
def get_pose_cluster_border_hull(poses: Poses, x_max, y_max) -> Polygon: flat_keypoint_list: Sequence[Tuple[int, int]] = [] for pose in poses: for kp in pose.keypoints: if not kp.isNone: flat_keypoint_list.append(k(kp)) flat_keypoint_array = np.array(flat_keypoint_list) left_side_keypoints: Sequence[Tuple[int, int]] = [] right_side_keypoints: Sequence[Tuple[int, int]] = [] for i in range(0, y_max): y_keypoint_line = flat_keypoint_array[flat_keypoint_array[:,1] == i][:,0] if len(y_keypoint_line) > 0: right_side_keypoints.append((max(y_keypoint_line), i)) left_side_keypoints.append((min(y_keypoint_line), i)) top_side_keypoints: Sequence[Tuple[int, int]] = [] # TODO: add another loop for the top line calculation # TODO: develop a method to merge left, top and right side's together return Polygon(left_side_keypoints) # INFO only return left side for testing purposes
def get_pose_cluster_convex_hull(poses: Sequence[Pose]) ‑> shapely.geometry.polygon.Polygon
-
Expand source code
def get_pose_cluster_convex_hull(poses: Poses) -> Polygon: flat_keypoint_list: Sequence[Tuple[int, int]] = [] for pose in poses: for kp in pose.keypoints: if not kp.isNone: flat_keypoint_list.append(k(kp)) keypoint_cloud_polygon = Polygon(flat_keypoint_list) return cast(Polygon, keypoint_cloud_polygon.convex_hull)