opensportslib 0.1.2.dev8__tar.gz → 0.1.2.dev10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. {opensportslib-0.1.2.dev8/opensportslib.egg-info → opensportslib-0.1.2.dev10}/PKG-INFO +1 -1
  2. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/datasets/classification_dataset.py +8 -10
  3. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10/opensportslib.egg-info}/PKG-INFO +1 -1
  4. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib.egg-info/SOURCES.txt +3 -0
  5. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/pyproject.toml +1 -1
  6. opensportslib-0.1.2.dev10/tests/test_classification_dataset_paths.py +74 -0
  7. opensportslib-0.1.2.dev10/tools/convert/build_soccernet_gar.py +1089 -0
  8. opensportslib-0.1.2.dev10/tools/convert/build_soccernet_gar_action_spotting.py +289 -0
  9. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/LICENSE +0 -0
  10. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/LICENSE-COMMERCIAL +0 -0
  11. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/MANIFEST.in +0 -0
  12. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/README.md +0 -0
  13. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/examples/quickstart/basic_classification.py +0 -0
  14. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/examples/quickstart/basic_localization.py +0 -0
  15. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/__init__.py +0 -0
  16. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/apis/__init__.py +0 -0
  17. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/apis/base_task_model.py +0 -0
  18. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/apis/classification.py +0 -0
  19. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/apis/localization.py +0 -0
  20. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/cli.py +0 -0
  21. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/config/classification.yaml +0 -0
  22. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/config/localization-e2e-ocv.yaml +0 -0
  23. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/config/localization-json_calf_resnetpca512.yaml +0 -0
  24. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/config/localization-json_netvlad++_resnetpca512.yaml +0 -0
  25. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/config/localization.yaml +0 -0
  26. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/config/sngar-frames.yaml +0 -0
  27. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/config/sngar-tracking.yaml +0 -0
  28. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/__init__.py +0 -0
  29. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/loss/__init__.py +0 -0
  30. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/loss/builder.py +0 -0
  31. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/loss/calf.py +0 -0
  32. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/loss/ce.py +0 -0
  33. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/loss/combine.py +0 -0
  34. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/loss/nll.py +0 -0
  35. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/optimizer/__init__.py +0 -0
  36. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/optimizer/builder.py +0 -0
  37. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/sampler/weighted_sampler.py +0 -0
  38. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/scheduler/__init__.py +0 -0
  39. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/scheduler/builder.py +0 -0
  40. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/trainer/__init__.py +0 -0
  41. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/trainer/classification_trainer.py +0 -0
  42. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/trainer/localization_trainer.py +0 -0
  43. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/utils/checkpoint.py +0 -0
  44. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/utils/config.py +0 -0
  45. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/utils/data.py +0 -0
  46. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/utils/ddp.py +0 -0
  47. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/utils/default_args.py +0 -0
  48. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/utils/lightning.py +0 -0
  49. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/utils/load_annotations.py +0 -0
  50. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/utils/seed.py +0 -0
  51. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/utils/video_processing.py +0 -0
  52. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/core/utils/wandb.py +0 -0
  53. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/datasets/__init__.py +0 -0
  54. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/datasets/builder.py +0 -0
  55. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/datasets/localization_dataset.py +0 -0
  56. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/datasets/utils/__init__.py +0 -0
  57. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/datasets/utils/tracking.py +0 -0
  58. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/metrics/classification_metric.py +0 -0
  59. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/metrics/localization_metric.py +0 -0
  60. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/__init__.py +0 -0
  61. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/backbones/builder.py +0 -0
  62. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/base/contextaware.py +0 -0
  63. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/base/e2e.py +0 -0
  64. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/base/learnablepooling.py +0 -0
  65. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/base/tracking.py +0 -0
  66. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/base/vars.py +0 -0
  67. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/base/video.py +0 -0
  68. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/base/video_mae.py +0 -0
  69. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/builder.py +0 -0
  70. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/heads/builder.py +0 -0
  71. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/neck/builder.py +0 -0
  72. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/utils/common.py +0 -0
  73. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/utils/impl/__init__.py +0 -0
  74. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/utils/impl/asformer.py +0 -0
  75. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/utils/impl/calf.py +0 -0
  76. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/utils/impl/gsm.py +0 -0
  77. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/utils/impl/gtad.py +0 -0
  78. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/utils/impl/tsm.py +0 -0
  79. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/utils/litebase.py +0 -0
  80. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/utils/modules.py +0 -0
  81. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/utils/shift.py +0 -0
  82. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/models/utils/utils.py +0 -0
  83. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/setup/setup.py +0 -0
  84. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/tools/__init__.py +0 -0
  85. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/tools/_common.py +0 -0
  86. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/tools/hf_transfer.py +0 -0
  87. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/tools/osl_json_to_parquet.py +0 -0
  88. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib/tools/parquet_to_osl_json.py +0 -0
  89. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib.egg-info/dependency_links.txt +0 -0
  90. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib.egg-info/entry_points.txt +0 -0
  91. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib.egg-info/requires.txt +0 -0
  92. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/opensportslib.egg-info/top_level.txt +0 -0
  93. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/setup.cfg +0 -0
  94. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tests/conftest.py +0 -0
  95. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tests/test_config_utils_smoke.py +0 -0
  96. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tests/test_conversion_tools.py +0 -0
  97. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tests/test_hf_transfer_tools.py +0 -0
  98. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tests/test_package_smoke.py +0 -0
  99. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tests/test_public_apis_smoke.py +0 -0
  100. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tests/test_subset_train_infer_integration.py +0 -0
  101. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tests/test_task_model_api_contract.py +0 -0
  102. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tools/convert/osl_json_to_parquet_webdataset.py +0 -0
  103. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tools/convert/parquet_webdataset_to_osl_json.py +0 -0
  104. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tools/download/download_hf_repo.py +0 -0
  105. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tools/download/download_osl_hf.py +0 -0
  106. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tools/download/upload_osl_hf.py +0 -0
  107. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tools/training/classification.py +0 -0
  108. {opensportslib-0.1.2.dev8 → opensportslib-0.1.2.dev10}/tools/training/localization.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opensportslib
3
- Version: 0.1.2.dev8
3
+ Version: 0.1.2.dev10
4
4
  Summary: OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data.
5
5
  Author: Jeet Vora
6
6
  Requires-Python: >=3.12
@@ -73,7 +73,7 @@ class ClassificationDataset(Dataset):
73
73
  self.config = config
74
74
  self.split = split
75
75
  self.exclude_labels = ["Unknown", "Dont know"]
76
- self.data_dir = config.DATA.data_dir
76
+ self.video_path = getattr(config.DATA, split).video_path #config.DATA.data_dir
77
77
  self.processor = None
78
78
 
79
79
  # view_type is optional; only MVFoul uses it as of now
@@ -197,7 +197,7 @@ class VideoDataset(ClassificationDataset):
197
197
  """
198
198
 
199
199
  def __init__(self, config, annotations_path, processor, split="train"):
200
- super().__init__(config, annotations_path, split)
200
+ super().__init__(config, annotations_path, processor, split=split)
201
201
 
202
202
  self.processor = processor
203
203
  self.view_type = getattr(config.DATA, "view_type", "single")
@@ -227,15 +227,13 @@ class VideoDataset(ClassificationDataset):
227
227
  """read a video file, temporally sub-sample, and apply transforms.
228
228
 
229
229
  Args:
230
- path: realtive path (under data_dir) to the video file.
230
+ path: realtive path (under video_path) to the video file.
231
231
 
232
232
  Returns:
233
233
  numpy.ndarray of shape (T, H, W, C).
234
234
  """
235
- full_path = os.path.join(self.config.DATA.data_dir, path)
236
-
237
- if full_path.endswith(".npy"):
238
- frames = np.load(full_path).astype(np.float32) / 255.0
235
+ if path.endswith(".npy"):
236
+ frames = np.load(path).astype(np.float32) / 255.0
239
237
  if self.transform is not None:
240
238
  frames = self.transform(frames)
241
239
  mean = np.array([0.485, 0.456, 0.406], dtype=np.float32)
@@ -243,7 +241,7 @@ class VideoDataset(ClassificationDataset):
243
241
  frames = (frames - mean) / std
244
242
  return frames
245
243
 
246
- v = read_video(os.path.join(self.config.DATA.data_dir, path))
244
+ v = read_video(os.path.join(self.video_path, path))
247
245
 
248
246
  v = process_frames(
249
247
  v,
@@ -473,7 +471,7 @@ class TrackingDataset(ClassificationDataset):
473
471
  """read a single parquet tracking clip.
474
472
 
475
473
  Args:
476
- path: Relative path (under ``data_dir``) to the parquet
474
+ path: Relative path (under ``video_path``) to the parquet
477
475
  file.
478
476
 
479
477
  Returns:
@@ -481,7 +479,7 @@ class TrackingDataset(ClassificationDataset):
481
479
  """
482
480
  import pandas as pd
483
481
 
484
- full_path = os.path.join(self.data_dir, path)
482
+ full_path = os.path.join(self.video_path, path)
485
483
  return pd.read_parquet(full_path)
486
484
 
487
485
  def __getitem__(self, idx):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opensportslib
3
- Version: 0.1.2.dev8
3
+ Version: 0.1.2.dev10
4
4
  Summary: OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data.
5
5
  Author: Jeet Vora
6
6
  Requires-Python: >=3.12
@@ -87,6 +87,7 @@ opensportslib/tools/hf_transfer.py
87
87
  opensportslib/tools/osl_json_to_parquet.py
88
88
  opensportslib/tools/parquet_to_osl_json.py
89
89
  tests/conftest.py
90
+ tests/test_classification_dataset_paths.py
90
91
  tests/test_config_utils_smoke.py
91
92
  tests/test_conversion_tools.py
92
93
  tests/test_hf_transfer_tools.py
@@ -94,6 +95,8 @@ tests/test_package_smoke.py
94
95
  tests/test_public_apis_smoke.py
95
96
  tests/test_subset_train_infer_integration.py
96
97
  tests/test_task_model_api_contract.py
98
+ tools/convert/build_soccernet_gar.py
99
+ tools/convert/build_soccernet_gar_action_spotting.py
97
100
  tools/convert/osl_json_to_parquet_webdataset.py
98
101
  tools/convert/parquet_webdataset_to_osl_json.py
99
102
  tools/download/download_hf_repo.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "opensportslib"
7
- version = "0.1.2.dev8"
7
+ version = "0.1.2.dev10"
8
8
  description = "OpenSportsLib is the professional library, designed for advanced video understanding in sports. It provides state-of-the-art tools for action recognition, spotting, retrieval, and captioning, making it ideal for researchers, analysts, and developers working with sports video data."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -0,0 +1,74 @@
1
+ import json
2
+ from pathlib import Path
3
+ from types import SimpleNamespace
4
+
5
+ import opensportslib.datasets.classification_dataset as classification_dataset
6
+
7
+
8
+ def _write_classification_annotation(path: Path) -> str:
9
+ payload = {
10
+ "labels": {
11
+ "action": {"labels": ["PASS"]},
12
+ },
13
+ "data": [
14
+ {
15
+ "id": "sample_00000",
16
+ "inputs": [
17
+ {
18
+ "type": "video",
19
+ "path": "clips/video_00000.mp4",
20
+ }
21
+ ],
22
+ "labels": {
23
+ "action": {"label": "PASS"},
24
+ },
25
+ }
26
+ ],
27
+ }
28
+ path.parent.mkdir(parents=True, exist_ok=True)
29
+ path.write_text(json.dumps(payload), encoding="utf-8")
30
+ return str(path)
31
+
32
+
33
+ def _make_config(data_dir: Path, valid_video_root: Path) -> SimpleNamespace:
34
+ return SimpleNamespace(
35
+ DATA=SimpleNamespace(
36
+ data_dir=str(data_dir),
37
+ data_modality="video",
38
+ view_type="single",
39
+ num_frames=16,
40
+ input_fps=25,
41
+ target_fps=17,
42
+ start_frame=0,
43
+ end_frame=15,
44
+ train=SimpleNamespace(video_path=str(data_dir / "train_root")),
45
+ valid=SimpleNamespace(video_path=str(valid_video_root)),
46
+ test=SimpleNamespace(video_path=str(data_dir / "test_root")),
47
+ ),
48
+ MODEL=SimpleNamespace(type="custom"),
49
+ )
50
+
51
+
52
+ def test_video_dataset_resolves_relative_paths_from_selected_split_root(
53
+ tmp_path,
54
+ monkeypatch,
55
+ ):
56
+ annotation_path = _write_classification_annotation(tmp_path / "annotations" / "valid.json")
57
+ data_dir = tmp_path / "dataset_root"
58
+ valid_video_root = tmp_path / "separate_valid_root"
59
+ config = _make_config(data_dir, valid_video_root)
60
+
61
+ monkeypatch.setattr(classification_dataset, "build_transform", lambda config, mode: None)
62
+
63
+ dataset = classification_dataset.VideoDataset(
64
+ config,
65
+ annotation_path,
66
+ processor=None,
67
+ split="valid",
68
+ )
69
+
70
+ resolved_path = Path(dataset.samples[0]["video_paths"][0])
71
+
72
+ assert dataset.split == "valid"
73
+ assert resolved_path.is_absolute()
74
+ assert resolved_path == valid_video_root / "clips" / "video_00000.mp4"