1. Metodologia

Utilizamos el metraje de la transmisión del partido para extraer las coordenadas de los jugadores. Este proceso implica primero localizar el área del campo en la que se enfoca la cámara. Luego, empleamos modelos de IA de vanguardia para detectar e identificar a los jugadores y el balón en pantalla, mapeando sus coordenadas desde el metraje de la transmisión a una proyección plana 2D del campo.

Para los jugadores que no son visibles en la cámara de transmisión, utilizamos un sistema avanzado de imputación por IA. Este sistema, entrenado con millones de puntos de datos de seguimiento GPS, predice con precisión sus ubicaciones. La figura a continuación visualiza este proceso.

Screenshot 2024-11-05 at 17.24.55.png

Este proceso ocurre cinco veces por segundo, lo que nos permite rastrear con precisión los movimientos de los jugadores durante todo el partido. Los momentos irrelevantes para la recopilación de datos, como las repeticiones, tomas del público y acercamientos, se descartan automáticamente. Sin embargo, utilizando el sistema de Imputación por IA, seguimos proporcionando coordenadas estimadas de los jugadores durante estos momentos. Como resultado, los datos de seguimiento ofrecen una base granular y extensible a partir de la cual se pueden extraer innumerables insights y definir métricas personalizadas.

2. Formato de Datos

Los datos se proporcionan como un archivo JSONL, donde cada línea individual del archivo es en sí misma un objeto json válido.

La primera línea contiene información sobre el partido y los jugadores. Sirve como un diccionario de consulta para mapear los ID de los jugadores con la información de los mismos. Este enfoque evita repeticiones innecesarias y reduce el tamaño del archivo. A continuación se muestra un ejemplo:

{
  "match_data": {
    "date": "2024-03-01",
    "match_id": 553262,
    "result": {
      "home": 0,
      "away": 1
    },
    "season_data": {
      "id": 816545,
      "name": "POL I 2023"
    }
  },
  "players_data": {
    "team0_id": {
      "player0_id": {
        "name": "Nombre Apellido",
        "number": 10,
        "position": "DC"
      },
      {...}
    },
    "team1_id": {
      "player0_id": {
        "name": "Nombre Apellido",
        "number": 10,
        "position": "DC"
      },
      {...}
    }
  }
}

Después de la primera línea, todas las líneas subsiguientes siguen una estructura común. Esta estructura es sencilla, y a continuación se proporciona un ejemplo:

{
  "frame": number,
  "vid_timestamp": number, // Segundos transcurridos en el video original
  "period": number,
  "ball": [x, y] // Las coordenadas x e y del balón
  "data": {
    _id: [ // Array de jugadores que juegan para team0_id
      {
        "id": number // Corresponde con el diccionario de consulta
        "x": number // La coordenada x del jugador
        "y": number // La coordenada y del jugador
        "vis": boolean
      },
      { ... } // Jugadores restantes para team0_id
    ],
    team1_id: [
      ... // La misma estructura para los jugadores de team1_id
    ]
  },
  "cam": [ // Polígono que describe la vista de la cámara de transmisión
    [x0,y0], // La primera coordenada
    [x1,y1], // La segunda coordenada
    [x2, y2],// La tercera coordenada
    [x3, y3] // La cuarta coordenada
  ]
}