Программное обеспечение для визуализации футбольных матчейPython

Программы на Python
Ответить
Anonymous
 Программное обеспечение для визуализации футбольных матчей

Сообщение Anonymous »

У меня проблема с графической визуализацией этого программного обеспечения для визуализации футбольного матча. Проблема связана со скоростью визуализации регионов, которые я оцениваю с помощью программного обеспечения Python с использованием pygame.
Скорость отображения низкая, вероятно, из-за альфашейпа. Я не знаю, какое альтернативное решение я могу использовать вместо подхода Alphashape, чтобы иметь плавное представление этого совпадения (10 кадров в секунду).
изображение показывает то, что я получил с помощью своей функции
изображение показывает, что я получил с помощью своей функции
p>
функция:
класс RegionsRenderer:
def init(self, window_width, window_height):
self.window_width = window_width
self.window_height = window_height
self.surface = pygame.Surface((window_width, window_height), pygame.SRCALPHA)
# Colori predefiniti con alpha
self.team_colors = {
'A': {
'fill': (0, 0, 255, 100), # Blu semi-trasparente
'border': (0, 0, 0, 255) # Bordo blu più scuro
},
'B': {
'fill': (255, 0, 0, 100), # Rosso semi-trasparente
'border': (0, 0, 0, 255) # Bordo rosso più scuro
}
}

# Parametri configurabili
self.alpha_value = 0.05
self.noise_scale = 0.25
self.border_width = 2

@lru_cache(maxsize=128)
def _generate_noise(self, points_shape):
"""Genera rumore casuale con caching per migliorare le performance."""
return np.random.normal(0, self.noise_scale, points_shape)

def _process_polygon(self, points_array):
"""Processa un insieme di punti per creare un poligono valido."""
if len(points_array) < 3:
return None

try:
# Aggiungi rumore cached per evitare la collinearità
noise = self._generate_noise(points_array.shape)
jittered_points = points_array + noise

# Prova prima con alphashape
alpha_shape = alphashape(jittered_points, alpha=self.alpha_value)

if isinstance(alpha_shape, (Polygon, MultiPolygon)):
return alpha_shape

except Exception:
try:
# Fallback a ConvexHull con opzioni ottimizzate
hull = ConvexHull(points_array, qhull_options='QJ Qs')
hull_points = points_array[hull.vertices]
return Polygon(hull_points)
except Exception:
return None

return None

def _draw_polygon(self, poly, fill_color, border_color):
"""Disegna un singolo poligono sulla superficie."""
if isinstance(poly, MultiPolygon):
polygons = list(poly.geoms)
else:
polygons = [poly]

for p in polygons:
points = [(int(x), int(y)) for x, y in p.exterior.coords]
if len(points) >= 3:
pygame.draw.polygon(self.surface, fill_color, points)
pygame.draw.polygon(self.surface, border_color, points, self.border_width)

def draw(self, screen, transformed_k_regions, player_teams, frame_idx):
"""Disegna tutte le k-regions per un frame."""
if frame_idx not in transformed_k_regions:
return False

# Pulisci la superficie prima di disegnare
self.surface.fill((0, 0, 0, 0))

current_regions = transformed_k_regions[frame_idx]

for player_id, points in current_regions.items():
team = player_teams[player_id]
colors = self.team_colors[team]

polygon = self._process_polygon(np.array(points))
if polygon:
self._draw_polygon(polygon, colors['fill'], colors['border'])

# Applica il risultato allo schermo
screen.blit(self.surface, (0, 0))
return True


Подробнее здесь: https://stackoverflow.com/questions/792 ... ualisation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»