| from pathlib import Path
|
| from typing import List, Tuple, Dict
|
| import sys
|
| import os
|
|
|
| from numpy import ndarray
|
| from pydantic import BaseModel
|
| sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
|
|
| from team_cluster import TeamClassifier
|
| from utils import (
|
| BoundingBox,
|
| Constants,
|
| )
|
| from inference import predict_batch, load_model
|
|
|
|
|
| class BoundingBox(BaseModel):
|
| x1: int
|
| y1: int
|
| x2: int
|
| y2: int
|
| cls_id: int
|
| conf: float
|
|
|
|
|
| class TVFrameResult(BaseModel):
|
| frame_id: int
|
| boxes: List[BoundingBox]
|
| keypoints: List[Tuple[int, int]]
|
|
|
|
|
| class Miner:
|
| SMALL_CONTAINED_IOA = Constants.SMALL_CONTAINED_IOA
|
| SMALL_RATIO_MAX = Constants.SMALL_RATIO_MAX
|
| SINGLE_PLAYER_HUE_PIVOT = Constants.SINGLE_PLAYER_HUE_PIVOT
|
| CORNER_INDICES = Constants.CORNER_INDICES
|
| KEYPOINTS_CONFIDENCE = Constants.KEYPOINTS_CONFIDENCE
|
| CORNER_CONFIDENCE = Constants.CORNER_CONFIDENCE
|
| GOALKEEPER_POSITION_MARGIN = Constants.GOALKEEPER_POSITION_MARGIN
|
| MIN_SAMPLES_FOR_FIT = 16
|
| MAX_SAMPLES_FOR_FIT = 1000
|
|
|
| def __init__(self, path_hf_repo: Path) -> None:
|
| print("model laoding")
|
| self.health = load_model(path_hf_repo)
|
|
|
| def __repr__(self) -> str:
|
| return self.health
|
|
|
| def predict_batch(self, batch_images: List[ndarray], offset: int, n_keypoints: int) -> List[TVFrameResult]:
|
| results = predict_batch(
|
| batch_images,
|
| offset,
|
| n_keypoints,
|
| )
|
| return results |