opensportslib 0.1.2.dev4__tar.gz → 0.1.2.dev6__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 (105) hide show
  1. {opensportslib-0.1.2.dev4/opensportslib.egg-info → opensportslib-0.1.2.dev6}/PKG-INFO +4 -1
  2. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/apis/localization.py +6 -2
  3. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/datasets/localization_dataset.py +28 -18
  4. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6/opensportslib.egg-info}/PKG-INFO +4 -1
  5. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib.egg-info/requires.txt +3 -0
  6. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/pyproject.toml +2 -2
  7. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/LICENSE +0 -0
  8. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/LICENSE-COMMERCIAL +0 -0
  9. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/MANIFEST.in +0 -0
  10. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/README.md +0 -0
  11. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/examples/quickstart/basic_classification.py +0 -0
  12. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/examples/quickstart/basic_localization.py +0 -0
  13. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/__init__.py +0 -0
  14. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/apis/__init__.py +0 -0
  15. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/apis/base_task_model.py +0 -0
  16. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/apis/classification.py +0 -0
  17. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/cli.py +0 -0
  18. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/config/classification.yaml +0 -0
  19. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/config/localization-e2e-ocv.yaml +0 -0
  20. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/config/localization-json_calf_resnetpca512.yaml +0 -0
  21. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/config/localization-json_netvlad++_resnetpca512.yaml +0 -0
  22. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/config/localization.yaml +0 -0
  23. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/config/sngar-frames.yaml +0 -0
  24. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/config/sngar-tracking.yaml +0 -0
  25. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/__init__.py +0 -0
  26. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/loss/__init__.py +0 -0
  27. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/loss/builder.py +0 -0
  28. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/loss/calf.py +0 -0
  29. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/loss/ce.py +0 -0
  30. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/loss/combine.py +0 -0
  31. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/loss/nll.py +0 -0
  32. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/optimizer/__init__.py +0 -0
  33. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/optimizer/builder.py +0 -0
  34. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/sampler/weighted_sampler.py +0 -0
  35. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/scheduler/__init__.py +0 -0
  36. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/scheduler/builder.py +0 -0
  37. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/trainer/__init__.py +0 -0
  38. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/trainer/classification_trainer.py +0 -0
  39. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/trainer/localization_trainer.py +0 -0
  40. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/utils/checkpoint.py +0 -0
  41. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/utils/config.py +0 -0
  42. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/utils/data.py +0 -0
  43. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/utils/ddp.py +0 -0
  44. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/utils/default_args.py +0 -0
  45. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/utils/lightning.py +0 -0
  46. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/utils/load_annotations.py +0 -0
  47. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/utils/seed.py +0 -0
  48. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/utils/video_processing.py +0 -0
  49. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/core/utils/wandb.py +0 -0
  50. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/datasets/__init__.py +0 -0
  51. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/datasets/builder.py +0 -0
  52. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/datasets/classification_dataset.py +0 -0
  53. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/datasets/utils/__init__.py +0 -0
  54. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/datasets/utils/tracking.py +0 -0
  55. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/metrics/classification_metric.py +0 -0
  56. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/metrics/localization_metric.py +0 -0
  57. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/__init__.py +0 -0
  58. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/backbones/builder.py +0 -0
  59. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/base/contextaware.py +0 -0
  60. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/base/e2e.py +0 -0
  61. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/base/learnablepooling.py +0 -0
  62. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/base/tracking.py +0 -0
  63. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/base/vars.py +0 -0
  64. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/base/video.py +0 -0
  65. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/base/video_mae.py +0 -0
  66. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/builder.py +0 -0
  67. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/heads/builder.py +0 -0
  68. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/neck/builder.py +0 -0
  69. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/utils/common.py +0 -0
  70. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/utils/impl/__init__.py +0 -0
  71. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/utils/impl/asformer.py +0 -0
  72. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/utils/impl/calf.py +0 -0
  73. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/utils/impl/gsm.py +0 -0
  74. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/utils/impl/gtad.py +0 -0
  75. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/utils/impl/tsm.py +0 -0
  76. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/utils/litebase.py +0 -0
  77. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/utils/modules.py +0 -0
  78. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/utils/shift.py +0 -0
  79. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/models/utils/utils.py +0 -0
  80. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/setup/setup.py +0 -0
  81. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/tools/__init__.py +0 -0
  82. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/tools/_common.py +0 -0
  83. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/tools/hf_transfer.py +0 -0
  84. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/tools/osl_json_to_parquet.py +0 -0
  85. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib/tools/parquet_to_osl_json.py +0 -0
  86. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib.egg-info/SOURCES.txt +0 -0
  87. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib.egg-info/dependency_links.txt +0 -0
  88. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib.egg-info/entry_points.txt +0 -0
  89. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/opensportslib.egg-info/top_level.txt +0 -0
  90. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/setup.cfg +0 -0
  91. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/tests/conftest.py +0 -0
  92. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/tests/test_config_utils_smoke.py +0 -0
  93. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/tests/test_conversion_tools.py +0 -0
  94. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/tests/test_hf_transfer_tools.py +0 -0
  95. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/tests/test_package_smoke.py +0 -0
  96. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/tests/test_public_apis_smoke.py +0 -0
  97. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/tests/test_subset_train_infer_integration.py +0 -0
  98. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/tests/test_task_model_api_contract.py +0 -0
  99. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/tools/convert/osl_json_to_parquet_webdataset.py +0 -0
  100. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/tools/convert/parquet_webdataset_to_osl_json.py +0 -0
  101. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/tools/download/download_hf_repo.py +0 -0
  102. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/tools/download/download_osl_hf.py +0 -0
  103. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/tools/download/upload_osl_hf.py +0 -0
  104. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/tools/training/classification.py +0 -0
  105. {opensportslib-0.1.2.dev4 → opensportslib-0.1.2.dev6}/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.dev4
3
+ Version: 0.1.2.dev6
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
@@ -24,6 +24,9 @@ Requires-Dist: timm
24
24
  Requires-Dist: seaborn
25
25
  Requires-Dist: tabulate
26
26
  Requires-Dist: pytorch-lightning
27
+ Requires-Dist: pandas
28
+ Requires-Dist: pyarrow
29
+ Requires-Dist: huggingface_hub
27
30
  Provides-Extra: test
28
31
  Requires-Dist: pytest; extra == "test"
29
32
  Requires-Dist: pytest-cov; extra == "test"
@@ -167,8 +167,12 @@ class LocalizationModel(BaseTaskModel):
167
167
 
168
168
  start = time.time()
169
169
 
170
- device = select_device(self.config.SYSTEM)
171
- self.model = build_model(self.config, device=device)
170
+ if effective_weights is not None:
171
+ if self.model is None or self.last_loaded_weights != effective_weights:
172
+ self.load_weights(weights=effective_weights)
173
+ elif self.model is None:
174
+ device = select_device(self.config.SYSTEM)
175
+ self.model = build_model(self.config, device=device)
172
176
 
173
177
  data_obj_train = build_dataset(self.config, split="train")
174
178
  dataset_train = data_obj_train.building_dataset(
@@ -1016,7 +1016,10 @@ if DALI_AVAILABLE:
1016
1016
  for pipe in self.pipes:
1017
1017
  pipe.build()
1018
1018
 
1019
- super().__init__(self.pipes, output_map, size=self.nb_videos)
1019
+ # Pipeline returns (video, label_idx, frame_num) - label processing
1020
+ # is done post-hoc in get_attr to avoid DALI 2.0 fn.python_function issues
1021
+ internal_output_map = ['data', 'label_idx', 'frame_num']
1022
+ super().__init__(self.pipes, internal_output_map, size=self.nb_videos)
1020
1023
 
1021
1024
  self.device = torch.device(
1022
1025
  "cuda:{}".format(self.devices[1 if len(self.devices) > 1 else 0])
@@ -1052,8 +1055,19 @@ if DALI_AVAILABLE:
1052
1055
  Returns:
1053
1056
  dict :{"frames","contains_event","labels"}.
1054
1057
  """
1055
- batch_labels = batch["label"]
1058
+ batch_label_idx = batch["label_idx"]
1059
+ batch_frame_num = batch["frame_num"]
1056
1060
  batch_images = batch["data"]
1061
+
1062
+ batch_size = batch_label_idx.shape[0]
1063
+ batch_labels = torch.zeros(batch_size, self.clip_len, dtype=torch.int64)
1064
+ for b in range(batch_size):
1065
+ video_idx = int(batch_label_idx[b].item())
1066
+ frame_num = int(batch_frame_num[b].item())
1067
+ batch_labels[b] = torch.from_numpy(
1068
+ self._compute_labels(video_idx, frame_num)
1069
+ )
1070
+
1057
1071
  sum_labels = torch.sum(
1058
1072
  batch_labels, dim=1 if len(batch_labels.shape) == 2 else 0
1059
1073
  )
@@ -1229,26 +1243,22 @@ if DALI_AVAILABLE:
1229
1243
  std=[255, 255, 255],
1230
1244
  mirror=fn.random.coin_flip(),
1231
1245
  )
1232
- label = fn.python_function(
1233
- label, frame_num, function=self.edit_labels, device="gpu"
1234
- )
1235
- return video, label
1246
+ return video, label, frame_num
1236
1247
 
1237
- def edit_labels(self, label, frame_num):
1238
- """Construct a list having the same length as the number of frames. The elements of the list are the indexes (starting at 1) of the class where an event occurs, 0 otherwise.
1248
+ def _compute_labels(self, video_idx, frame_num):
1249
+ """Construct a label array for a clip. Each element is the class index
1250
+ (starting at 1) where an event occurs, 0 otherwise.
1239
1251
 
1240
1252
  Args:
1241
- label :index of the video to get the metadata.
1242
- frame_num :index of start frame.
1253
+ video_idx (int): Index of the video in self._labels.
1254
+ frame_num (int): Raw start frame number from the reader.
1243
1255
 
1244
1256
  Returns:
1245
- labels (cupy.array): the list of labels (corresponding to events) corresponding with the extracted frames.
1257
+ labels (np.ndarray): Label array of shape (clip_len,).
1246
1258
  """
1247
- import cupy
1248
-
1249
- video_meta = self._labels[label.item()]
1250
- base_idx = frame_num.item() // self._stride
1251
- labels = cupy.zeros(self.clip_len, np.int64)
1259
+ video_meta = self._labels[video_idx]
1260
+ base_idx = frame_num // self._stride
1261
+ labels = np.zeros(self.clip_len, np.int64)
1252
1262
 
1253
1263
  for event in video_meta["events"]:
1254
1264
  event_frame = event["frame"]
@@ -1258,12 +1268,12 @@ if DALI_AVAILABLE:
1258
1268
  label_idx >= self.dilate_len
1259
1269
  and label_idx < self.clip_len + self.dilate_len
1260
1270
  ):
1261
- label = self._class_dict[event["label"]]
1271
+ label_val = self._class_dict[event["label"]]
1262
1272
  for i in range(
1263
1273
  max(0, label_idx - self.dilate_len),
1264
1274
  min(self.clip_len, label_idx + self.dilate_len + 1),
1265
1275
  ):
1266
- labels[i] = label
1276
+ labels[i] = label_val
1267
1277
  return labels
1268
1278
 
1269
1279
  def print_info(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opensportslib
3
- Version: 0.1.2.dev4
3
+ Version: 0.1.2.dev6
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
@@ -24,6 +24,9 @@ Requires-Dist: timm
24
24
  Requires-Dist: seaborn
25
25
  Requires-Dist: tabulate
26
26
  Requires-Dist: pytorch-lightning
27
+ Requires-Dist: pandas
28
+ Requires-Dist: pyarrow
29
+ Requires-Dist: huggingface_hub
27
30
  Provides-Extra: test
28
31
  Requires-Dist: pytest; extra == "test"
29
32
  Requires-Dist: pytest-cov; extra == "test"
@@ -14,6 +14,9 @@ timm
14
14
  seaborn
15
15
  tabulate
16
16
  pytorch-lightning
17
+ pandas
18
+ pyarrow
19
+ huggingface_hub
17
20
 
18
21
  [:platform_system != "Darwin" and platform_machine != "arm64" and platform_machine != "aarch64"]
19
22
  decord
@@ -4,11 +4,11 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "opensportslib"
7
- version = "0.1.2.dev4"
7
+ version = "0.1.2.dev6"
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"
11
- dependencies = [ "SoccerNet", "av", "decord; platform_system != 'Darwin' and platform_machine != 'arm64' and platform_machine != 'aarch64'", "evaluate", "scikit-learn", "torch", "torchvision", "transformers==4.57.3", "tokenizers==0.22.1", "accelerate", "wandb", "opencv-python", "omegaconf", "timm", "seaborn", "tabulate", "pytorch-lightning",]
11
+ dependencies = [ "SoccerNet", "av", "decord; platform_system != 'Darwin' and platform_machine != 'arm64' and platform_machine != 'aarch64'", "evaluate", "scikit-learn", "torch", "torchvision", "transformers==4.57.3", "tokenizers==0.22.1", "accelerate", "wandb", "opencv-python", "omegaconf", "timm", "seaborn", "tabulate", "pytorch-lightning", "pandas", "pyarrow", "huggingface_hub",]
12
12
  [[project.authors]]
13
13
  name = "Jeet Vora"
14
14