| 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 |