def parse_player(self, games): print("\nAnalysing " + self._name) # add player and ball objects from games for game in games: # game._framesToParse = misc.get_game_frames(self,game) for player in game.players: if player._name == self._name: # get position stuff player._framesToParse = misc.get_game_frames(self, game) self.playerObjects.append(player) self.ballObjects.append(game.ball) AHit.analyse_game_hits(game) APosition.analyse_game_possession(game) # add positions,velocities,hits, ball position, team colours # for position in player.positions: # self.positions.append(position) # for velocity in player.velocities: # self.velocities.append(velocity) # for hit in player.hits: # self.hits.append(hit) # for position in ball.positions: # self.ballPositions.append(position) position, speed = self.analyse_player_positions_and_speed() hits = self.analyse_player_hits() possession = self.analyse_player_possession() self.position = position self.speed = speed self.possession = possession self.hits = hits
def get_hit_positions(hits): positions = [] for hit in hits: position = hit.position player = hit.player # _half,_third,_height = APosition.get_positions_analysis([position],player) _half,_third,_height = APosition.get_half_third_height_ball(position,colour = player.team.colour) hit.half = _half hit.third = _third hit.height = _height
def analyse_player_positions_and_speed(self): positions = [] speeds = [] half = [] third = [] height = [] ballHalf = [] allPlayerPositions = {} allPlayerSpeeds = [] # positions = [] # ballPositions = [] # speeds = [] for player, ball in zip(self.playerObjects, self.ballObjects): playerPositions = {} # frameNo:position. To sync with playerSpeeds ballPositions = {} playerSpeeds = {} for frameNo in player._framesToParse: playerPositions[frameNo] = player.positions[frameNo] ballPositions[frameNo] = ball.positions[frameNo] try: playerSpeeds[frameNo] = APosition.get_speed(player.velocities[frameNo]) except: # print('Cannot find velocity for '+player.name+' at frame '+str(frameNo)) # print(list(x for x in list(player.velocities.keys()) if abs(x-frameNo)< 10)) # print(list(player.velocities.keys())) # break pass _positions, _speeds = APosition.get_positions_speed_analysis( playerPositions, playerSpeeds, player, ballPositions ) x = [] for value in playerPositions.values(): x.append(value) allPlayerPositions[player] = x allPlayerSpeeds += list(playerSpeeds.values()) positions.append(_positions) speeds.append(_speeds) # half.append(_half) # third.append(_third) # height.append(_height) # ballHalf.append(_ballHalf) # half = misc.merge_dicts(half) # third = misc.merge_dicts(third) # height = misc.merge_dicts(height) # ballHalf = misc.merge_dicts(ballHalf) speed = misc.merge_dicts(speeds) position = misc.merge_dicts(positions) total = 0 for key in half: total += half[key] averagePosition, averagePositionV = APosition.get_average_position(allPlayerPositions) # position = dict( # half = half, # third = third, # height = height, # ball = ballHalf, # total = total, # average = averagePosition, # averageV = averagePositionV # ) position["average"] = averagePosition position["averageV"] = averagePositionV position["total"] = sum(len(allPlayerPositions[x]) for x in allPlayerPositions) averageSpeed = div(sum(allPlayerSpeeds), len(allPlayerSpeeds)) speed["average"] = averageSpeed print("Raw Position Data:") print(position) print("Raw Speed Data:") print("Total Speeds: " + str(len(allPlayerSpeeds))) y = {} for x in speed: if type(speed[x]) is list: y[x] = len(speed[x]) elif type(speed[x]) is dict: y[x] = {} for q in speed[x]: y[x][q] = len(speed[x][q]) else: y[x] = speed[x] print(y) return position, speed