Module compoelem.visualize.visualize

Expand source code
from typing import Sequence, Tuple

import cv2
import numpy as np

from compoelem.config import config
from compoelem.detect.converter import k, p
from compoelem.types import *


def create_blank() -> Img:
    img = np.array([[[255,255,255]]*config["dim"][0]]*config["dim"][1], np.uint8)
    return img

def pose_lines(pose_lines: Sequence[PoseLine], img=None) -> Img:
    if img is None:
        img = create_blank()
    for pose_line in pose_lines:
        cv2.line(img, p(pose_line.top), p(pose_line.bottom), (0,255,0), 8)
    return img

def global_action_lines(global_action_lines: Sequence[GlobalActionLine], img=None) -> Img:
    if img is None:
        img = create_blank()
    for ga_line in global_action_lines:
        # if not ga_line.intersection_shape == None:
        #     visible_area = Polygon([(0,0),(len(img[0]), 0), (len(img[0]),len(img)), (0,len(img))])
        #     visible_intersection = cast(Polygon, visible_area.intersection(ga_line.intersection_shape))
        #     cv2.drawContours(img, [np.array(visible_intersection.exterior.coords[:], np.int)], 0, (150,100,100), -1)
        #     # cv2.drawContours(img, [np.array(ga_line.intersection_shape.exterior.coords[:], np.int)], 0, (150,100,100), -1)
        cv2.line(img, p(ga_line.start), p(ga_line.end), (0,255,255), 8)
        cv2.circle(img, p(ga_line.center), 15, (255,255,0), -1)
    return img

def pose_triangles(pose_lines: Sequence[PoseTriangle], img=None) -> Img:
    if img is None:
        img = create_blank()
    for pose_triangle in pose_lines:
        cv2.line(img, k(pose_triangle.top), k(pose_triangle.left), (0,255,255), 3)
        cv2.line(img, k(pose_triangle.top), k(pose_triangle.right), (0,255,255), 3)
        cv2.line(img, k(pose_triangle.left), k(pose_triangle.right), (0,255,255), 3)
    return img

def boundingboxes(boxes, scores, img=None) -> Img:
    if img is None:
        img = create_blank()
    for box, score in zip(boxes, scores):
        boundingbox(box, score, img)
    return img

def boundingbox(box, score, img) -> Img:
    if img is None:
        img = create_blank()
    cv2.rectangle(img, tuple(np.array(box[0:2], int)), tuple(np.array(box[2:4], int)), (20,120,200), 2)
    # cv2.putText(img, str(i)+suffix, k(kp), cv2.FONT_HERSHEY_SIMPLEX, 0.3, color)
    return img

def poses(poses: Poses, img=None, keypoint_filter=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]) -> Img:
    if img is None:
        img = create_blank()
    for ip, p in enumerate(poses):
        pose(p, img, keypoint_filter, "_"+str(ip))
    return img

def pose(pose: Pose, img=None, keypoint_filter=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17], suffix="") -> Img:
    if img is None:
        img = create_blank()
    for i, kp in enumerate(pose.keypoints):
        if i in keypoint_filter:
            color = config["keypoint_colors"][i]
            cv2.circle(img, k(kp), 3, color, -1)
            cv2.putText(img, str(i)+suffix, k(kp), cv2.FONT_HERSHEY_SIMPLEX, 0.3, color)
    return img

def point_tuple_line(tuple: Tuple[Point, Point], img=None) -> Img:
    if img is None:
        img = create_blank()
    cv2.line(img, p(tuple[0]), p(tuple[1]), (0,255,255), 4)
    return img

def pose_directions(pose_directions: Sequence[PoseDirection], img=None, color=(0,255,255), plotShape=False) -> Img:
    if img is None:
        img = create_blank()
    for dir in pose_directions:
        img = pose_direction(dir, img, color, plotShape)
    return img

def pose_direction(dir: PoseDirection, img=None, color=(0,255,255), plotShape=False) -> Img:
    if img is None:
        img = create_blank()
    cv2.arrowedLine(img, p(dir.start), p(dir.end), color, 3)
    if plotShape:
        cv2.polylines(img, [np.array(dir.cone.exterior.coords[:-1], np.int)], True, (255,0,255), 2)
    return img

def pose_cluster_hull(cluster_hull: Polygon, img=None, color=(0,255,255)) -> Img:
    if img is None:
        img = create_blank()
    cv2.polylines(img, [np.array(cluster_hull.exterior.coords[:-1], np.int)], False, color, 2)
    return img

def draw_window(name: str, img: Img):
    cv2.namedWindow(name, cv2.WINDOW_NORMAL)
    cv2.imshow(name, img)
    cv2.waitKey(0)

def safe(file_path: str, img: Img):
    cv2.imwrite(file_path, img)

Functions

def boundingbox(box, score, img) ‑> Sequence[Sequence[int]]
Expand source code
def boundingbox(box, score, img) -> Img:
    if img is None:
        img = create_blank()
    cv2.rectangle(img, tuple(np.array(box[0:2], int)), tuple(np.array(box[2:4], int)), (20,120,200), 2)
    # cv2.putText(img, str(i)+suffix, k(kp), cv2.FONT_HERSHEY_SIMPLEX, 0.3, color)
    return img
def boundingboxes(boxes, scores, img=None) ‑> Sequence[Sequence[int]]
Expand source code
def boundingboxes(boxes, scores, img=None) -> Img:
    if img is None:
        img = create_blank()
    for box, score in zip(boxes, scores):
        boundingbox(box, score, img)
    return img
def create_blank() ‑> Sequence[Sequence[int]]
Expand source code
def create_blank() -> Img:
    img = np.array([[[255,255,255]]*config["dim"][0]]*config["dim"][1], np.uint8)
    return img
def draw_window(name: str, img: Sequence[Sequence[int]])
Expand source code
def draw_window(name: str, img: Img):
    cv2.namedWindow(name, cv2.WINDOW_NORMAL)
    cv2.imshow(name, img)
    cv2.waitKey(0)
def global_action_lines(global_action_lines: Sequence[GlobalActionLine], img=None) ‑> Sequence[Sequence[int]]
Expand source code
def global_action_lines(global_action_lines: Sequence[GlobalActionLine], img=None) -> Img:
    if img is None:
        img = create_blank()
    for ga_line in global_action_lines:
        # if not ga_line.intersection_shape == None:
        #     visible_area = Polygon([(0,0),(len(img[0]), 0), (len(img[0]),len(img)), (0,len(img))])
        #     visible_intersection = cast(Polygon, visible_area.intersection(ga_line.intersection_shape))
        #     cv2.drawContours(img, [np.array(visible_intersection.exterior.coords[:], np.int)], 0, (150,100,100), -1)
        #     # cv2.drawContours(img, [np.array(ga_line.intersection_shape.exterior.coords[:], np.int)], 0, (150,100,100), -1)
        cv2.line(img, p(ga_line.start), p(ga_line.end), (0,255,255), 8)
        cv2.circle(img, p(ga_line.center), 15, (255,255,0), -1)
    return img
def point_tuple_line(tuple: Tuple[shapely.geometry.point.Point, shapely.geometry.point.Point], img=None) ‑> Sequence[Sequence[int]]
Expand source code
def point_tuple_line(tuple: Tuple[Point, Point], img=None) -> Img:
    if img is None:
        img = create_blank()
    cv2.line(img, p(tuple[0]), p(tuple[1]), (0,255,255), 4)
    return img
def pose(pose: Pose, img=None, keypoint_filter=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], suffix='') ‑> Sequence[Sequence[int]]
Expand source code
def pose(pose: Pose, img=None, keypoint_filter=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17], suffix="") -> Img:
    if img is None:
        img = create_blank()
    for i, kp in enumerate(pose.keypoints):
        if i in keypoint_filter:
            color = config["keypoint_colors"][i]
            cv2.circle(img, k(kp), 3, color, -1)
            cv2.putText(img, str(i)+suffix, k(kp), cv2.FONT_HERSHEY_SIMPLEX, 0.3, color)
    return img
def pose_cluster_hull(cluster_hull: shapely.geometry.polygon.Polygon, img=None, color=(0, 255, 255)) ‑> Sequence[Sequence[int]]
Expand source code
def pose_cluster_hull(cluster_hull: Polygon, img=None, color=(0,255,255)) -> Img:
    if img is None:
        img = create_blank()
    cv2.polylines(img, [np.array(cluster_hull.exterior.coords[:-1], np.int)], False, color, 2)
    return img
def pose_direction(dir: PoseDirection, img=None, color=(0, 255, 255), plotShape=False) ‑> Sequence[Sequence[int]]
Expand source code
def pose_direction(dir: PoseDirection, img=None, color=(0,255,255), plotShape=False) -> Img:
    if img is None:
        img = create_blank()
    cv2.arrowedLine(img, p(dir.start), p(dir.end), color, 3)
    if plotShape:
        cv2.polylines(img, [np.array(dir.cone.exterior.coords[:-1], np.int)], True, (255,0,255), 2)
    return img
def pose_directions(pose_directions: Sequence[PoseDirection], img=None, color=(0, 255, 255), plotShape=False) ‑> Sequence[Sequence[int]]
Expand source code
def pose_directions(pose_directions: Sequence[PoseDirection], img=None, color=(0,255,255), plotShape=False) -> Img:
    if img is None:
        img = create_blank()
    for dir in pose_directions:
        img = pose_direction(dir, img, color, plotShape)
    return img
def pose_lines(pose_lines: Sequence[PoseLine], img=None) ‑> Sequence[Sequence[int]]
Expand source code
def pose_lines(pose_lines: Sequence[PoseLine], img=None) -> Img:
    if img is None:
        img = create_blank()
    for pose_line in pose_lines:
        cv2.line(img, p(pose_line.top), p(pose_line.bottom), (0,255,0), 8)
    return img
def pose_triangles(pose_lines: Sequence[PoseTriangle], img=None) ‑> Sequence[Sequence[int]]
Expand source code
def pose_triangles(pose_lines: Sequence[PoseTriangle], img=None) -> Img:
    if img is None:
        img = create_blank()
    for pose_triangle in pose_lines:
        cv2.line(img, k(pose_triangle.top), k(pose_triangle.left), (0,255,255), 3)
        cv2.line(img, k(pose_triangle.top), k(pose_triangle.right), (0,255,255), 3)
        cv2.line(img, k(pose_triangle.left), k(pose_triangle.right), (0,255,255), 3)
    return img
def poses(poses: Sequence[Pose], img=None, keypoint_filter=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]) ‑> Sequence[Sequence[int]]
Expand source code
def poses(poses: Poses, img=None, keypoint_filter=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]) -> Img:
    if img is None:
        img = create_blank()
    for ip, p in enumerate(poses):
        pose(p, img, keypoint_filter, "_"+str(ip))
    return img
def safe(file_path: str, img: Sequence[Sequence[int]])
Expand source code
def safe(file_path: str, img: Img):
    cv2.imwrite(file_path, img)