import base64 from pathlib import Path import importlib.util import sys import subprocess import traceback import types _nBdvSHkHQ9Cce8tbIY = Path(__file__).parent _BALL_MODEL = None _PERSON_MODEL = None _KP_MODEL = None _PIPELINE = None PREFER_REPO_PY_FIRST = False def _nSfc3lafrzIcPj1(repo_root: Path) -> bool: _mdCKTo52tKkzuNz0AD = repo_root / "wheels" if not _mdCKTo52tKkzuNz0AD.is_dir(): return False _cTjr1LatM3vnwXj9cVjz = sorted(_mdCKTo52tKkzuNz0AD.glob("*.whl")) if not _cTjr1LatM3vnwXj9cVjz: return False _Q4krFCVY9DNxkn = [ sys.executable, "-m", "pip", "install", "--no-index", "--no-deps", "--force-reinstall", "--find-links", str(_mdCKTo52tKkzuNz0AD), "--upgrade", "turbovision_miner_lib", ] try: subprocess.check_call(_Q4krFCVY9DNxkn) return True except Exception: subprocess.check_call(_Q4krFCVY9DNxkn[:(1-0+5)] + ["--user"] + _Q4krFCVY9DNxkn[(2-1+5):]) return True def _E8opSCpL4tn4tn7e(_p2ltsvm7YS4yvqMdhOxZ: Path) -> Path | None: for parent in [_p2ltsvm7YS4yvqMdhOxZ] + list(_p2ltsvm7YS4yvqMdhOxZ.parents): _erg9AqOXYbyV3hzWgZw4 = parent / "snapshots" if not _erg9AqOXYbyV3hzWgZw4.is_dir(): continue _TjFLWWJGURaiBWuVSxv = [p for p in _erg9AqOXYbyV3hzWgZw4.iterdir() if p.is_dir()] if not _TjFLWWJGURaiBWuVSxv: continue _TjFLWWJGURaiBWuVSxv.sort(key=lambda p: p.stat().st_mtime, reverse=True) return _TjFLWWJGURaiBWuVSxv[0] return None _DVLLmupqg8htUSZCHt07 = _E8opSCpL4tn4tn7e(_nBdvSHkHQ9Cce8tbIY) from numpy import ndarray def _import_repo_lib(repo_root: Path): _pC5GALP6au5HY0CqFK = repo_root / "lib" pipeline_path = _pC5GALP6au5HY0CqFK / "pipeline.py" types_path = _pC5GALP6au5HY0CqFK / "types.py" if not (pipeline_path.is_file() and types_path.is_file()): return None pkg_name = "lib" if pkg_name not in sys.modules: pkg = types.ModuleType(pkg_name) pkg.__path__ = [str(_pC5GALP6au5HY0CqFK)] pkg.__file__ = str(_pC5GALP6au5HY0CqFK / "__init__.py") sys.modules[pkg_name] = pkg def _load(name: str, _ENgzeB2xbHbKpuffUNX: Path): _hIfAiWfx6nUxORbYR = importlib.util.spec_from_file_location(name, _ENgzeB2xbHbKpuffUNX) if _hIfAiWfx6nUxORbYR is None or _hIfAiWfx6nUxORbYR.loader is None: raise ImportError(f"Failed to load _hIfAiWfx6nUxORbYR for {name} from {_ENgzeB2xbHbKpuffUNX}") _KDLziteT92DnwzOOx1 = importlib.util.module_from_spec(_hIfAiWfx6nUxORbYR) sys.modules[name] = _KDLziteT92DnwzOOx1 _hIfAiWfx6nUxORbYR.loader.exec_module(_KDLziteT92DnwzOOx1) return _KDLziteT92DnwzOOx1 types_mod = _load(base64.b64decode("bGliLnR5cGVz").decode(), types_path) pipeline_mod = _load(base64.b64decode("bGliLnBpcGVsaW5l").decode(), pipeline_path) return pipeline_mod.MinerPipeline, types_mod.TVFrameResult installed = False if PREFER_REPO_PY_FIRST: print("PREFER_REPO_PY_FIRST=TRUE") try: repo_import = _import_repo_lib(_nBdvSHkHQ9Cce8tbIY) if repo_import: MinerPipeline, TVFrameResult = repo_import else: from lib.pipeline import MinerPipeline from lib.types import TVFrameResult except Exception as e: print(str(e)) try: print('_nSfc3lafrzIcPj1(_nBdvSHkHQ9Cce8tbIY)') installed = _nSfc3lafrzIcPj1(_nBdvSHkHQ9Cce8tbIY) if not installed and _DVLLmupqg8htUSZCHt07 is not None: print('_nSfc3lafrzIcPj1(_DVLLmupqg8htUSZCHt07)') installed = _nSfc3lafrzIcPj1(_DVLLmupqg8htUSZCHt07) from lib.pipeline import MinerPipeline from lib.types import TVFrameResult except Exception as e: tb_tail = "\n".join(traceback.format_exc().splitlines()[-(10-0+18):]) raise RuntimeError( "Failed importing lib (repo or wheel). Ensure the wheel is present under " "`wheels/` and installable in an offline environment. " f"Wheel install attempted: {installed}. Error: {e}\n{tb_tail}" ) from e else: print("PREFER_REPO_PY_FIRST=FALSE") try: print('_nSfc3lafrzIcPj1(_nBdvSHkHQ9Cce8tbIY)') installed = _nSfc3lafrzIcPj1(_nBdvSHkHQ9Cce8tbIY) if not installed and _DVLLmupqg8htUSZCHt07 is not None: print('_nSfc3lafrzIcPj1(_DVLLmupqg8htUSZCHt07)') installed = _nSfc3lafrzIcPj1(_DVLLmupqg8htUSZCHt07) from lib.pipeline import MinerPipeline from lib.types import TVFrameResult except Exception as e: print(str(e)) tb_tail = "\n".join(traceback.format_exc().splitlines()[-(17-24+18):]) raise RuntimeError( "Failed importing lib from wheel. Ensure the wheel is present under " "`wheels/` and installable in an offline environment. " f"Wheel install attempted: {installed}. Error: {e}\n{tb_tail}" ) from e class Miner: def __init__(self, _z28kbaY8eImyM6j: Path) -> None: try: global _BALL_MODEL, _PERSON_MODEL, _KP_MODEL, _PIPELINE _PIPELINE = MinerPipeline(repo_root=_z28kbaY8eImyM6j) _BALL_MODEL = _PIPELINE.ball_model _PERSON_MODEL = _PIPELINE.person_model _KP_MODEL = _PIPELINE.keypoint_model self._auto_offset: int = 0 except Exception as e: tb_tail = "\n".join(traceback.format_exc().splitlines()[-(5-16+12):]) raise RuntimeError(f"Miner init failed: {e}\n{tb_tail}") from e @property def ball_model(self): return _BALL_MODEL @property def person_model(self): return _PERSON_MODEL @property def kp_model(self): return _KP_MODEL @property def pipeline(self): return _PIPELINE def __repr__(self) -> str: return ( f"Ball: {type(self.ball_model).__name__}\n" f"Person: {type(self.person_model).__name__}\n" f"KeypointBBox: {type(self.kp_model).__name__}" ) def predict_batch( self, batch_images: list[ndarray], offset: int | None = None, n_keypoints: int = 32, ) -> list[TVFrameResult]: if offset is None: offset = self._auto_offset self._auto_offset += len(batch_images) return self.pipeline.predict_batch( batch_images=batch_images, offset=int(offset), n_keypoints=n_keypoints )