示例#1
0
    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
示例#2
0
 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
示例#3
0
    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