Module compoelem.compare.normalize
Expand source code
import cv2
from compoelem.types import *
from compoelem.config import config
from compoelem.detect import converter
def minmax_norm_point(point: Point, x_min:float, x_base:float, y_min:float, y_base:float) -> Point:
x, y = point.xy
x_new = (x[0]-x_min)/x_base
y_new = (y[0]-y_min)/y_base
return Point(x_new, y_new)
def minmax_norm(lines: Sequence[PoseLine], x_min:float, x_base:float, y_min:float, y_base:float) -> Sequence[PoseLine]:
res_lines = []
for line in lines:
top_new = minmax_norm_point(line.top, x_min, x_base, y_min, y_base)
bottom_new = minmax_norm_point(line.bottom, x_min, x_base, y_min, y_base)
res_lines.append(PoseLine(top_new, bottom_new))
return res_lines
def minmax_norm_by_imgrect(lines: Sequence[PoseLine], width, height) -> Sequence[PoseLine]:
y_base, x_base, = height, width
return minmax_norm(lines, 0, x_base, 0, y_base)
def minmax_norm_by_bbox(lines: Sequence[PoseLine]) -> Sequence[PoseLine]:
if(len(lines) == 0):
return lines
point_cloud = []
for line in lines:
point_cloud.append(line.top.xy)
point_cloud.append(line.bottom.xy)
point_cloud = np.array(point_cloud)
x_min = np.min(point_cloud[:,0])
y_min = np.min(point_cloud[:,1])
x_base = np.max(point_cloud[:,0]) - x_min
y_base = np.max(point_cloud[:,1]) - y_min
return minmax_norm(lines, x_min, x_base, y_min, y_base)
def norm_by_global_action(pose_lines: Sequence[PoseLine], global_action_lines: Sequence[GlobalActionLine], fallback=False) -> Sequence[Sequence[PoseLine]]:
if(len(global_action_lines) == 0):
#print("global_action_lines 0")
if(fallback):
#print("return fallback", [pose_lines])
return [pose_lines]
else:
return [[]]
normed_poses_seq = []
for ga_line in global_action_lines:
if(len(pose_lines) == 0):
normed_poses_seq.append([])
continue
normed_poses = []
for pose_line in pose_lines:
new_top = np.array(pose_line.top.xy).flatten() - np.array(ga_line.center.xy).flatten()
new_bottom = np.array(pose_line.bottom.xy).flatten() - np.array(ga_line.center.xy).flatten()
normed_poses.append(PoseLine(Point(new_top), Point(new_bottom)))
normed_poses_seq.append(normed_poses)
return normed_poses_seq
Functions
def minmax_norm(lines: Sequence[PoseLine], x_min: float, x_base: float, y_min: float, y_base: float) ‑> Sequence[PoseLine]
-
Expand source code
def minmax_norm(lines: Sequence[PoseLine], x_min:float, x_base:float, y_min:float, y_base:float) -> Sequence[PoseLine]: res_lines = [] for line in lines: top_new = minmax_norm_point(line.top, x_min, x_base, y_min, y_base) bottom_new = minmax_norm_point(line.bottom, x_min, x_base, y_min, y_base) res_lines.append(PoseLine(top_new, bottom_new)) return res_lines
def minmax_norm_by_bbox(lines: Sequence[PoseLine]) ‑> Sequence[PoseLine]
-
Expand source code
def minmax_norm_by_bbox(lines: Sequence[PoseLine]) -> Sequence[PoseLine]: if(len(lines) == 0): return lines point_cloud = [] for line in lines: point_cloud.append(line.top.xy) point_cloud.append(line.bottom.xy) point_cloud = np.array(point_cloud) x_min = np.min(point_cloud[:,0]) y_min = np.min(point_cloud[:,1]) x_base = np.max(point_cloud[:,0]) - x_min y_base = np.max(point_cloud[:,1]) - y_min return minmax_norm(lines, x_min, x_base, y_min, y_base)
def minmax_norm_by_imgrect(lines: Sequence[PoseLine], width, height) ‑> Sequence[PoseLine]
-
Expand source code
def minmax_norm_by_imgrect(lines: Sequence[PoseLine], width, height) -> Sequence[PoseLine]: y_base, x_base, = height, width return minmax_norm(lines, 0, x_base, 0, y_base)
def minmax_norm_point(point: shapely.geometry.point.Point, x_min: float, x_base: float, y_min: float, y_base: float) ‑> shapely.geometry.point.Point
-
Expand source code
def minmax_norm_point(point: Point, x_min:float, x_base:float, y_min:float, y_base:float) -> Point: x, y = point.xy x_new = (x[0]-x_min)/x_base y_new = (y[0]-y_min)/y_base return Point(x_new, y_new)
def norm_by_global_action(pose_lines: Sequence[PoseLine], global_action_lines: Sequence[GlobalActionLine], fallback=False) ‑> Sequence[Sequence[PoseLine]]
-
Expand source code
def norm_by_global_action(pose_lines: Sequence[PoseLine], global_action_lines: Sequence[GlobalActionLine], fallback=False) -> Sequence[Sequence[PoseLine]]: if(len(global_action_lines) == 0): #print("global_action_lines 0") if(fallback): #print("return fallback", [pose_lines]) return [pose_lines] else: return [[]] normed_poses_seq = [] for ga_line in global_action_lines: if(len(pose_lines) == 0): normed_poses_seq.append([]) continue normed_poses = [] for pose_line in pose_lines: new_top = np.array(pose_line.top.xy).flatten() - np.array(ga_line.center.xy).flatten() new_bottom = np.array(pose_line.bottom.xy).flatten() - np.array(ga_line.center.xy).flatten() normed_poses.append(PoseLine(Point(new_top), Point(new_bottom))) normed_poses_seq.append(normed_poses) return normed_poses_seq