Irpan
init commit
7fa2fcb
import numpy as np
import cv2
class ViewTransformer():
def __init__(self):
court_width = 68
court_length = 23.32
self.pixel_vertices = np.array([[110, 1035],
[265, 275],
[910, 260],
[1640, 915]])
self.target_vertices = np.array([
[0,court_width],
[0, 0],
[court_length, 0],
[court_length, court_width]
])
self.pixel_vertices = self.pixel_vertices.astype(np.float32)
self.target_vertices = self.target_vertices.astype(np.float32)
self.persepctive_trasnformer = cv2.getPerspectiveTransform(self.pixel_vertices, self.target_vertices)
def transform_point(self,point):
p = (int(point[0]),int(point[1]))
is_inside = cv2.pointPolygonTest(self.pixel_vertices,p,False) >= 0
if not is_inside:
return None
reshaped_point = point.reshape(-1,1,2).astype(np.float32)
tranform_point = cv2.perspectiveTransform(reshaped_point,self.persepctive_trasnformer)
return tranform_point.reshape(-1,2)
def add_transformed_position_to_tracks(self,tracks):
for object, object_tracks in tracks.items():
for frame_num, track in enumerate(object_tracks):
for track_id, track_info in track.items():
position = track_info['position_adjusted']
position = np.array(position)
position_trasnformed = self.transform_point(position)
if position_trasnformed is not None:
position_trasnformed = position_trasnformed.squeeze().tolist()
tracks[object][frame_num][track_id]['position_transformed'] = position_trasnformed