opensportslib 0.3.1.dev22__tar.gz → 0.3.1.dev24__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.
- opensportslib-0.3.1.dev24/PKG-INFO +326 -0
- opensportslib-0.3.1.dev24/README.md +287 -0
- opensportslib-0.3.1.dev24/opensportslib.egg-info/PKG-INFO +326 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/pyproject.toml +1 -1
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/data/test_hf_json_spotting.py +2 -2
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/data/test_hf_json_tracking_spotting.py +1 -1
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/data/test_hf_tracking_dataset.py +1 -1
- opensportslib-0.3.1.dev22/PKG-INFO +0 -695
- opensportslib-0.3.1.dev22/README.md +0 -656
- opensportslib-0.3.1.dev22/opensportslib.egg-info/PKG-INFO +0 -695
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/LICENSE +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/LICENSE-COMMERCIAL +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/MANIFEST.in +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/examples/quickstart/basic_classification.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/examples/quickstart/basic_localization.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/examples/quickstart/basic_vqa.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/adaptation/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/adaptation/spotta.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/apis/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/apis/base_task_model.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/apis/classification.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/apis/config.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/apis/configuration.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/apis/localization.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/apis/vqa.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/cli.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/classification/default.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/classification/sngar_frames.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/classification/sngar_tracking.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/classification/video.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/default.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/localization/calf_resnetpca512.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/localization/default.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/localization/e2e_spotta.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/localization/h5_header_distance.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/localization/h5_header_skeleton.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/localization/netvladpp_resnetpca512.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/localization/tracking_action_spotting.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/localization/video_dali.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/localization/video_ocv.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/vqa/default.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/vqa/qwen.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/vqa/qwen3_vl_native.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/vqa/qwen_lora.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/vqa/qwen_sngar_frames.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/configs/vqa/xvars.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/accessors.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/conflicts.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/editable.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/loader.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/migrate.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/migrations/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/migrations/legacy_to_canonical.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/rule_variants.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/runtime_adapter.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/schema.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/schemas/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/schemas/schema_canonical.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/schemas/schema_legacy.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/config/validate.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/loss/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/loss/builder.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/loss/calf.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/loss/ce.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/loss/combine.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/loss/nll.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/optimizer/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/optimizer/builder.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/sampler/weighted_sampler.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/scheduler/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/scheduler/builder.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/trainer/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/trainer/classification_trainer.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/trainer/localization_trainer.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/trainer/vqa_trainer.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/utils/checkpoint.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/utils/config.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/utils/config_normalize.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/utils/data.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/utils/ddp.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/utils/default_args.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/utils/direct_video.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/utils/hf_runtime.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/utils/lightning.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/utils/load_annotations.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/utils/seed.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/utils/video_processing.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/core/utils/wandb.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/datasets/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/datasets/builder.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/datasets/classification_dataset.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/datasets/hf_json.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/datasets/hf_tracking.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/datasets/localization_dataset.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/datasets/utils/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/datasets/utils/h5_tracking.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/datasets/utils/tracking.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/datasets/vqa_dataset.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/legacy_config/classification.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/legacy_config/localization-e2e-ocv.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/legacy_config/localization-json_calf_resnetpca512.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/legacy_config/localization-json_netvlad++_resnetpca512.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/legacy_config/localization.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/legacy_config/sngar-frames.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/legacy_config/sngar-tracking.yaml +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/metrics/classification_metric.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/metrics/localization_metric.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/metrics/vqa_metric.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/backbones/builder.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/base/contextaware.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/base/e2e.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/base/learnablepooling.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/base/qwen_vl_native.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/base/qwen_xvars.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/base/rule_based.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/base/tracking.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/base/vars.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/base/video.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/base/video_chatgpt_compat.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/base/video_mae.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/base/xvars_videochatgpt.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/builder.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/heads/builder.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/neck/builder.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/utils/common.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/utils/impl/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/utils/impl/asformer.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/utils/impl/calf.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/utils/impl/gsm.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/utils/impl/gtad.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/utils/impl/tsm.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/utils/litebase.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/utils/modules.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/utils/shift.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/utils/utils.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/utils/vqa_prediction_priors.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/utils/vqa_prompting.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/models/utils/xvars_clip_index.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/remote_registry.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/setup/setup.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/tools/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/tools/_common.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/tools/hf_transfer.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/tools/osl_json_to_parquet.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib/tools/parquet_to_osl_json.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib.egg-info/SOURCES.txt +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib.egg-info/dependency_links.txt +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib.egg-info/entry_points.txt +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib.egg-info/requires.txt +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/opensportslib.egg-info/top_level.txt +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/scripts/redact_test_stream.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/scripts/release_versions.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/scripts/run_h5_header_rule_inference.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/scripts/summarize_test_report.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/scripts/verify_release_manifests.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/scripts/write_release_manifest.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/setup.cfg +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/conftest.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/helpers/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/helpers/configs.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/helpers/pipeline_stubs.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/integration/classification/test_pipeline.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/integration/localization/test_pipeline.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/integration/localization/test_spotta.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/integration/vqa/test_pipeline.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/release/__init__.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/release/_release_common.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/release/test_00_environment.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/release/test_classification_release.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/release/test_localization_release.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/release/test_vqa_release.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/smoke/test_cli.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/smoke/test_config_utils.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/smoke/test_environment.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/smoke/test_package.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/smoke/test_public_apis.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/api/test_remote_registry.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/api/test_remote_sessions.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/api/test_server_jobs.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/api/test_server_registry.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/api/test_server_startup_scripts.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/api/test_task_model_contract.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/api/test_vqa.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/config/test_architecture.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/config/test_editable.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/config/test_optional_hf.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/config/test_pretrained_merge.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/config/test_split_overrides.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/contracts/test_architecture.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/contracts/test_dependencies.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/contracts/test_package.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/contracts/test_release_versions.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/contracts/test_runner_contract.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/core/test_classification_trainer.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/core/test_localization_hf_backend.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/core/test_training_components.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/core/test_video_processing.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/data/test_classification_paths.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/data/test_h5_tracking.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/data/test_localization_dali.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/data/test_localization_intervals.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/data/test_osl_formats.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/models/test_classification_metrics.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/models/test_header_rule_spotter.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/models/test_header_skeleton_spotter.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/models/test_localization_metrics.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/models/test_temporal_shift.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/models/test_vqa_metrics.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/models/test_vqa_qwen_xvars.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/models/test_vqa_training_lora.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/models/test_vqa_xvars_videochatgpt.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/tools/test_conversion.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/tools/test_extract_xvars_features.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/tools/test_hf_transfer.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/tools/test_release_manifest.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/tools/test_report_summary.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tests/unit/tools/test_setup.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/convert/build_sn_vqa_2026_vqa.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/convert/build_sngar_spotting.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/convert/build_soccernet_gar.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/convert/build_soccernet_gar_action_spotting.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/convert/build_soccernet_gar_vqa.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/convert/build_xvars_indexes.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/convert/extract_xvars_clip_features.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/convert/osl_json_to_parquet_webdataset.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/convert/parquet_webdataset_to_osl_json.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/convert/sngar_dataset_card.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/convert/sngar_events.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/convert/verify_sngar_spotting.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/download/download_hf_repo.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/download/download_osl_hf.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/download/push_sngar_spotting.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/download/upload_osl_hf.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/train/train_config.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/training/classification.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/training/localization.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/training/vqa.py +0 -0
- {opensportslib-0.3.1.dev22 → opensportslib-0.3.1.dev24}/tools/upload/upload_model_hf.py +0 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: opensportslib
|
|
3
|
+
Version: 0.3.1.dev24
|
|
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
|
+
Author: Jeet Vora
|
|
6
|
+
Requires-Python: >=3.12
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
License-File: LICENSE-COMMERCIAL
|
|
10
|
+
Requires-Dist: SoccerNet
|
|
11
|
+
Requires-Dist: av
|
|
12
|
+
Requires-Dist: decord; platform_system != "Darwin" and platform_machine != "arm64" and platform_machine != "aarch64"
|
|
13
|
+
Requires-Dist: evaluate
|
|
14
|
+
Requires-Dist: scikit-learn
|
|
15
|
+
Requires-Dist: torch
|
|
16
|
+
Requires-Dist: torchvision
|
|
17
|
+
Requires-Dist: transformers==4.57.3
|
|
18
|
+
Requires-Dist: tokenizers==0.22.1
|
|
19
|
+
Requires-Dist: accelerate
|
|
20
|
+
Requires-Dist: wandb
|
|
21
|
+
Requires-Dist: opencv-python
|
|
22
|
+
Requires-Dist: omegaconf
|
|
23
|
+
Requires-Dist: timm
|
|
24
|
+
Requires-Dist: seaborn
|
|
25
|
+
Requires-Dist: tabulate
|
|
26
|
+
Requires-Dist: pytorch-lightning
|
|
27
|
+
Requires-Dist: pandas
|
|
28
|
+
Requires-Dist: pyarrow
|
|
29
|
+
Requires-Dist: h5py==3.16.0
|
|
30
|
+
Requires-Dist: huggingface_hub
|
|
31
|
+
Requires-Dist: datasets<6,>=5.0.0
|
|
32
|
+
Requires-Dist: easydict
|
|
33
|
+
Provides-Extra: test
|
|
34
|
+
Requires-Dist: pytest; extra == "test"
|
|
35
|
+
Requires-Dist: pytest-cov; extra == "test"
|
|
36
|
+
Requires-Dist: pytest-json-report; extra == "test"
|
|
37
|
+
Requires-Dist: pytest-timeout; extra == "test"
|
|
38
|
+
Dynamic: license-file
|
|
39
|
+
|
|
40
|
+
# OpenSportsLib
|
|
41
|
+
|
|
42
|
+
<img src="docs/assets/osl.jpg" height="400">
|
|
43
|
+
|
|
44
|
+
OpenSportsLib is a modular Python library for sports video understanding.
|
|
45
|
+
|
|
46
|
+
It provides a unified framework to **train, evaluate, and run inference** for key temporal understanding tasks in sports video, including:
|
|
47
|
+
|
|
48
|
+
- **Action classification**
|
|
49
|
+
- **Action localization / spotting**
|
|
50
|
+
- **Visual Question Answering (VQA)**
|
|
51
|
+
|
|
52
|
+
Retrieval and action description/captioning are roadmap areas. They do not yet
|
|
53
|
+
have first-class task wrappers or training workflows in this package.
|
|
54
|
+
|
|
55
|
+
OpenSportsLib is designed for **researchers, ML engineers, and sports analytics teams** who want reproducible and extensible workflows for sports video AI.
|
|
56
|
+
|
|
57
|
+
## Why OpenSportsLib?
|
|
58
|
+
|
|
59
|
+
- Unified workflow for training and inference
|
|
60
|
+
- Modular design for adding new tasks, datasets, and models
|
|
61
|
+
- Config driven experiments for reproducibility
|
|
62
|
+
- Optional SpoTTA test-time adaptation for E2ESpot inference
|
|
63
|
+
- Support for multiple modalities and sports workflows
|
|
64
|
+
- Research friendly while still usable in applied settings
|
|
65
|
+
|
|
66
|
+
## Quick links
|
|
67
|
+
|
|
68
|
+
- **Documentation:** https://opensportslab.github.io/opensportslib/
|
|
69
|
+
- **OSL JSON format:** https://opensportslab.github.io/opensportslib/data/osl-json-format/
|
|
70
|
+
- **Inference server:** [server/README.md](server/README.md)
|
|
71
|
+
- **PyPI:** https://pypi.org/project/opensportslib/
|
|
72
|
+
- **Issues:** https://github.com/OpenSportsLab/opensportslib/issues
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Installation
|
|
77
|
+
|
|
78
|
+
> Requires **Python 3.12+**.
|
|
79
|
+
> Supports CUDA 12.6 / 12.8 / 13.0 (with CPU fallback).
|
|
80
|
+
> PyTorch Geometric uses a dedicated PyTorch 2.12.1 compatibility profile.
|
|
81
|
+
|
|
82
|
+
### Create conda env
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
conda create -n osl python=3.12 pip -y
|
|
86
|
+
conda activate osl
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Stable release
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
pip install opensportslib
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Pre release
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
pip install --pre opensportslib
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Source development version
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
pip install -e .
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Setup Environment (PyTorch, CUDA aware & Optional Dependencies)
|
|
108
|
+
```bash
|
|
109
|
+
# Install PyTorch (CPU/GPU auto-detected)
|
|
110
|
+
opensportslib setup
|
|
111
|
+
|
|
112
|
+
# Optional: install PyTorch Geometric support. This replaces the installed
|
|
113
|
+
# Torch stack with the PyG-compatible PyTorch 2.12.1 profile.
|
|
114
|
+
opensportslib setup --pyg
|
|
115
|
+
|
|
116
|
+
# Optional: install for DALI support
|
|
117
|
+
opensportslib setup --dali
|
|
118
|
+
|
|
119
|
+
# Optional: install the X-VARS-compatible VQA dependency profile
|
|
120
|
+
opensportslib setup --vqa_xvars
|
|
121
|
+
|
|
122
|
+
# Optional: install the Qwen-compatible VQA dependency profile
|
|
123
|
+
opensportslib setup --vqa_qwen
|
|
124
|
+
```
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
**Note:**
|
|
128
|
+
Run `opensportslib setup` to automatically configure dependencies.
|
|
129
|
+
If issues occur, manually install compatible versions of `torch`, `torchvision`, and related libraries according to your CUDA version or system compatibility.
|
|
130
|
+
|
|
131
|
+
For VQA, use exactly one backend-specific dependency profile:
|
|
132
|
+
|
|
133
|
+
- `--vqa_xvars` installs the X-VARS-compatible Hugging Face stack from `XVARS_DEPENDENCY_PINS`
|
|
134
|
+
- `--vqa_qwen` installs the Qwen-compatible Hugging Face stack from `QWEN_DEPENDENCY_PINS`
|
|
135
|
+
|
|
136
|
+
The `vqa_qwen` config supports `Qwen/Qwen2.5-7B-Instruct` and `Qwen/Qwen3.5-9B-Base`.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Data and pretrained models
|
|
141
|
+
|
|
142
|
+
OpenSportsLib uses external annotation files, datasets, and pretrained checkpoints.
|
|
143
|
+
|
|
144
|
+
Public assets are hosted under the **OpenSportsLab Hugging Face organization**:
|
|
145
|
+
|
|
146
|
+
**https://huggingface.co/OpenSportsLab**
|
|
147
|
+
|
|
148
|
+
Use it as the main entry point to find:
|
|
149
|
+
- datasets
|
|
150
|
+
- annotation files
|
|
151
|
+
- extracted features
|
|
152
|
+
- pretrained models and checkpoints
|
|
153
|
+
|
|
154
|
+
See the [Model Zoo](docs/model-zoo.md) for available pretrained models,
|
|
155
|
+
reported scores, datasets, and loading snippets.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Dataset format
|
|
160
|
+
|
|
161
|
+
OpenSportsLib uses the **OSL JSON v2.0** annotation format for multimodal
|
|
162
|
+
datasets and predictions. See the [OSL JSON format guide](docs/data/osl-json-format.md)
|
|
163
|
+
for its schema, examples, and conversion notes.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Quickstart
|
|
168
|
+
|
|
169
|
+
### Classification
|
|
170
|
+
|
|
171
|
+
```python
|
|
172
|
+
from opensportslib.apis import ClassificationModel
|
|
173
|
+
|
|
174
|
+
my_model = ClassificationModel(
|
|
175
|
+
config="/path/to/classification.yaml",
|
|
176
|
+
weights=None, # optional: path or Hugging Face model ID
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
my_model.train(
|
|
180
|
+
train_set="/path/to/train_annotations.json",
|
|
181
|
+
valid_set="/path/to/valid_annotations.json",
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
predictions = my_model.infer(test_set="/path/to/test_annotations.json")
|
|
185
|
+
my_model.save_predictions(
|
|
186
|
+
output_path="/path/to/predictions.json",
|
|
187
|
+
predictions=predictions,
|
|
188
|
+
)
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
For localization, VQA, and additional end-to-end examples, see the
|
|
192
|
+
[API guide](opensportslib/apis/README.md), [quickstart scripts](examples/quickstart/),
|
|
193
|
+
and [VQA guide](docs/tools/vqa.md).
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Hugging Face Dataset Transfer
|
|
199
|
+
|
|
200
|
+
OpenSportsLib provides APIs and scripts for downloading and uploading OSL datasets with Hugging Face.
|
|
201
|
+
|
|
202
|
+
For SN-GAR classification and action-spotting configurations, setup, caching,
|
|
203
|
+
and training commands, see the [SN-GAR examples](examples/sngar/README.md).
|
|
204
|
+
|
|
205
|
+
### Python API
|
|
206
|
+
|
|
207
|
+
```python
|
|
208
|
+
from opensportslib.tools import (
|
|
209
|
+
download_dataset_split_from_hf,
|
|
210
|
+
download_dataset_sample_inputs_from_hf,
|
|
211
|
+
upload_dataset_inputs_from_json_to_hf,
|
|
212
|
+
upload_dataset_as_parquet_to_hf,
|
|
213
|
+
)
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Scripts
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
python tools/download/download_osl_hf.py --repo-id <org/repo> --revision main --split test --format parquet --output-dir downloaded_data --annotations-only
|
|
220
|
+
python tools/download/upload_osl_hf.py --repo-id <org/repo> --json-path <local_dataset.json> --split test --revision main
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Examples and documentation
|
|
226
|
+
|
|
227
|
+
Use the README for the fast start, then go deeper through:
|
|
228
|
+
|
|
229
|
+
- Full documentation: https://opensportslab.github.io/opensportslib/
|
|
230
|
+
- OSL JSON format: [docs/data/osl-json-format.md](docs/data/osl-json-format.md)
|
|
231
|
+
- High-level API guide: [opensportslib/apis/README.md](opensportslib/apis/README.md)
|
|
232
|
+
- Configuration guide: https://opensportslab.github.io/opensportslib/config/configuration-guide/
|
|
233
|
+
- Example configs: [examples/configs/](examples/configs/)
|
|
234
|
+
- Quickstart scripts: [examples/quickstart/](examples/quickstart/)
|
|
235
|
+
- Contribution guide: [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
236
|
+
- Developer guide: [DEVELOPERS.md](DEVELOPERS.md)
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Development setup
|
|
241
|
+
|
|
242
|
+
For contributors who want to work from source:
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
git clone https://github.com/OpenSportsLab/opensportslib.git
|
|
246
|
+
cd opensportslib
|
|
247
|
+
pip install -e .
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Conda option
|
|
251
|
+
|
|
252
|
+
If you prefer conda:
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
conda create -n osl python=3.12 pip
|
|
256
|
+
conda activate osl
|
|
257
|
+
pip install -e .
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Setup Environment (PyTorch, CUDA aware & Optional Dependencies)
|
|
261
|
+
```bash
|
|
262
|
+
# Install PyTorch (CPU/GPU auto-detected)
|
|
263
|
+
opensportslib setup
|
|
264
|
+
|
|
265
|
+
# Optional: install PyTorch Geometric support. This replaces the installed
|
|
266
|
+
# Torch stack with the PyG-compatible PyTorch 2.12.1 profile.
|
|
267
|
+
opensportslib setup --pyg
|
|
268
|
+
|
|
269
|
+
# Optional: install for DALI support
|
|
270
|
+
opensportslib setup --dali
|
|
271
|
+
|
|
272
|
+
# Optional: install the X-VARS-compatible VQA dependency profile
|
|
273
|
+
opensportslib setup --vqa_xvars
|
|
274
|
+
|
|
275
|
+
# Optional: install the Qwen-compatible VQA dependency profile
|
|
276
|
+
opensportslib setup --vqa_qwen
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## Contributing
|
|
282
|
+
|
|
283
|
+
We welcome contributions. Pull requests must target `dev`, and each
|
|
284
|
+
GitHub-linked commit author must accept the [Individual Contributor License
|
|
285
|
+
Agreement](.github/CLA.md) when prompted by the `CLA check`.
|
|
286
|
+
|
|
287
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for the contribution workflow and
|
|
288
|
+
[DEVELOPERS.md](DEVELOPERS.md) for architecture and extension guidance.
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## License
|
|
293
|
+
|
|
294
|
+
OpenSportsLib is available under dual licensing.
|
|
295
|
+
|
|
296
|
+
### Open source license
|
|
297
|
+
[AGPL 3.0](LICENSE) for research, academic, and community use.
|
|
298
|
+
|
|
299
|
+
### Commercial license
|
|
300
|
+
For proprietary or commercial deployment, please refer to [LICENSE-COMMERCIAL](LICENSE-COMMERCIAL).
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## Citation
|
|
305
|
+
|
|
306
|
+
If you use OpenSportsLib in your research, please cite the project.
|
|
307
|
+
|
|
308
|
+
```bibtex
|
|
309
|
+
@misc{opensportslib,
|
|
310
|
+
title={OpenSportsLib},
|
|
311
|
+
author={OpenSportsLab},
|
|
312
|
+
year={2026},
|
|
313
|
+
howpublished={\url{https://github.com/OpenSportsLab/opensportslib}}
|
|
314
|
+
}
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## Acknowledgments
|
|
320
|
+
|
|
321
|
+
OpenSportsLib is developed within the broader OpenSportsLab effort for sports
|
|
322
|
+
video understanding. Core contributors affiliated with KAUST include:
|
|
323
|
+
|
|
324
|
+
- [Jeet Vora](https://jeetv.github.io/) — Remote Research Engineer
|
|
325
|
+
- [Dr. Merey Ramazanova](https://meryusha.github.io/) — Post-Doc
|
|
326
|
+
- [Dr. Silvio Giancola](https://www.silviogiancola.com/) — Research Scientist
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
# OpenSportsLib
|
|
2
|
+
|
|
3
|
+
<img src="docs/assets/osl.jpg" height="400">
|
|
4
|
+
|
|
5
|
+
OpenSportsLib is a modular Python library for sports video understanding.
|
|
6
|
+
|
|
7
|
+
It provides a unified framework to **train, evaluate, and run inference** for key temporal understanding tasks in sports video, including:
|
|
8
|
+
|
|
9
|
+
- **Action classification**
|
|
10
|
+
- **Action localization / spotting**
|
|
11
|
+
- **Visual Question Answering (VQA)**
|
|
12
|
+
|
|
13
|
+
Retrieval and action description/captioning are roadmap areas. They do not yet
|
|
14
|
+
have first-class task wrappers or training workflows in this package.
|
|
15
|
+
|
|
16
|
+
OpenSportsLib is designed for **researchers, ML engineers, and sports analytics teams** who want reproducible and extensible workflows for sports video AI.
|
|
17
|
+
|
|
18
|
+
## Why OpenSportsLib?
|
|
19
|
+
|
|
20
|
+
- Unified workflow for training and inference
|
|
21
|
+
- Modular design for adding new tasks, datasets, and models
|
|
22
|
+
- Config driven experiments for reproducibility
|
|
23
|
+
- Optional SpoTTA test-time adaptation for E2ESpot inference
|
|
24
|
+
- Support for multiple modalities and sports workflows
|
|
25
|
+
- Research friendly while still usable in applied settings
|
|
26
|
+
|
|
27
|
+
## Quick links
|
|
28
|
+
|
|
29
|
+
- **Documentation:** https://opensportslab.github.io/opensportslib/
|
|
30
|
+
- **OSL JSON format:** https://opensportslab.github.io/opensportslib/data/osl-json-format/
|
|
31
|
+
- **Inference server:** [server/README.md](server/README.md)
|
|
32
|
+
- **PyPI:** https://pypi.org/project/opensportslib/
|
|
33
|
+
- **Issues:** https://github.com/OpenSportsLab/opensportslib/issues
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Installation
|
|
38
|
+
|
|
39
|
+
> Requires **Python 3.12+**.
|
|
40
|
+
> Supports CUDA 12.6 / 12.8 / 13.0 (with CPU fallback).
|
|
41
|
+
> PyTorch Geometric uses a dedicated PyTorch 2.12.1 compatibility profile.
|
|
42
|
+
|
|
43
|
+
### Create conda env
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
conda create -n osl python=3.12 pip -y
|
|
47
|
+
conda activate osl
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Stable release
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pip install opensportslib
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Pre release
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
pip install --pre opensportslib
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Source development version
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
pip install -e .
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Setup Environment (PyTorch, CUDA aware & Optional Dependencies)
|
|
69
|
+
```bash
|
|
70
|
+
# Install PyTorch (CPU/GPU auto-detected)
|
|
71
|
+
opensportslib setup
|
|
72
|
+
|
|
73
|
+
# Optional: install PyTorch Geometric support. This replaces the installed
|
|
74
|
+
# Torch stack with the PyG-compatible PyTorch 2.12.1 profile.
|
|
75
|
+
opensportslib setup --pyg
|
|
76
|
+
|
|
77
|
+
# Optional: install for DALI support
|
|
78
|
+
opensportslib setup --dali
|
|
79
|
+
|
|
80
|
+
# Optional: install the X-VARS-compatible VQA dependency profile
|
|
81
|
+
opensportslib setup --vqa_xvars
|
|
82
|
+
|
|
83
|
+
# Optional: install the Qwen-compatible VQA dependency profile
|
|
84
|
+
opensportslib setup --vqa_qwen
|
|
85
|
+
```
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
**Note:**
|
|
89
|
+
Run `opensportslib setup` to automatically configure dependencies.
|
|
90
|
+
If issues occur, manually install compatible versions of `torch`, `torchvision`, and related libraries according to your CUDA version or system compatibility.
|
|
91
|
+
|
|
92
|
+
For VQA, use exactly one backend-specific dependency profile:
|
|
93
|
+
|
|
94
|
+
- `--vqa_xvars` installs the X-VARS-compatible Hugging Face stack from `XVARS_DEPENDENCY_PINS`
|
|
95
|
+
- `--vqa_qwen` installs the Qwen-compatible Hugging Face stack from `QWEN_DEPENDENCY_PINS`
|
|
96
|
+
|
|
97
|
+
The `vqa_qwen` config supports `Qwen/Qwen2.5-7B-Instruct` and `Qwen/Qwen3.5-9B-Base`.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Data and pretrained models
|
|
102
|
+
|
|
103
|
+
OpenSportsLib uses external annotation files, datasets, and pretrained checkpoints.
|
|
104
|
+
|
|
105
|
+
Public assets are hosted under the **OpenSportsLab Hugging Face organization**:
|
|
106
|
+
|
|
107
|
+
**https://huggingface.co/OpenSportsLab**
|
|
108
|
+
|
|
109
|
+
Use it as the main entry point to find:
|
|
110
|
+
- datasets
|
|
111
|
+
- annotation files
|
|
112
|
+
- extracted features
|
|
113
|
+
- pretrained models and checkpoints
|
|
114
|
+
|
|
115
|
+
See the [Model Zoo](docs/model-zoo.md) for available pretrained models,
|
|
116
|
+
reported scores, datasets, and loading snippets.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Dataset format
|
|
121
|
+
|
|
122
|
+
OpenSportsLib uses the **OSL JSON v2.0** annotation format for multimodal
|
|
123
|
+
datasets and predictions. See the [OSL JSON format guide](docs/data/osl-json-format.md)
|
|
124
|
+
for its schema, examples, and conversion notes.
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Quickstart
|
|
129
|
+
|
|
130
|
+
### Classification
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
from opensportslib.apis import ClassificationModel
|
|
134
|
+
|
|
135
|
+
my_model = ClassificationModel(
|
|
136
|
+
config="/path/to/classification.yaml",
|
|
137
|
+
weights=None, # optional: path or Hugging Face model ID
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
my_model.train(
|
|
141
|
+
train_set="/path/to/train_annotations.json",
|
|
142
|
+
valid_set="/path/to/valid_annotations.json",
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
predictions = my_model.infer(test_set="/path/to/test_annotations.json")
|
|
146
|
+
my_model.save_predictions(
|
|
147
|
+
output_path="/path/to/predictions.json",
|
|
148
|
+
predictions=predictions,
|
|
149
|
+
)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
For localization, VQA, and additional end-to-end examples, see the
|
|
153
|
+
[API guide](opensportslib/apis/README.md), [quickstart scripts](examples/quickstart/),
|
|
154
|
+
and [VQA guide](docs/tools/vqa.md).
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Hugging Face Dataset Transfer
|
|
160
|
+
|
|
161
|
+
OpenSportsLib provides APIs and scripts for downloading and uploading OSL datasets with Hugging Face.
|
|
162
|
+
|
|
163
|
+
For SN-GAR classification and action-spotting configurations, setup, caching,
|
|
164
|
+
and training commands, see the [SN-GAR examples](examples/sngar/README.md).
|
|
165
|
+
|
|
166
|
+
### Python API
|
|
167
|
+
|
|
168
|
+
```python
|
|
169
|
+
from opensportslib.tools import (
|
|
170
|
+
download_dataset_split_from_hf,
|
|
171
|
+
download_dataset_sample_inputs_from_hf,
|
|
172
|
+
upload_dataset_inputs_from_json_to_hf,
|
|
173
|
+
upload_dataset_as_parquet_to_hf,
|
|
174
|
+
)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Scripts
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
python tools/download/download_osl_hf.py --repo-id <org/repo> --revision main --split test --format parquet --output-dir downloaded_data --annotations-only
|
|
181
|
+
python tools/download/upload_osl_hf.py --repo-id <org/repo> --json-path <local_dataset.json> --split test --revision main
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Examples and documentation
|
|
187
|
+
|
|
188
|
+
Use the README for the fast start, then go deeper through:
|
|
189
|
+
|
|
190
|
+
- Full documentation: https://opensportslab.github.io/opensportslib/
|
|
191
|
+
- OSL JSON format: [docs/data/osl-json-format.md](docs/data/osl-json-format.md)
|
|
192
|
+
- High-level API guide: [opensportslib/apis/README.md](opensportslib/apis/README.md)
|
|
193
|
+
- Configuration guide: https://opensportslab.github.io/opensportslib/config/configuration-guide/
|
|
194
|
+
- Example configs: [examples/configs/](examples/configs/)
|
|
195
|
+
- Quickstart scripts: [examples/quickstart/](examples/quickstart/)
|
|
196
|
+
- Contribution guide: [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
197
|
+
- Developer guide: [DEVELOPERS.md](DEVELOPERS.md)
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Development setup
|
|
202
|
+
|
|
203
|
+
For contributors who want to work from source:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
git clone https://github.com/OpenSportsLab/opensportslib.git
|
|
207
|
+
cd opensportslib
|
|
208
|
+
pip install -e .
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Conda option
|
|
212
|
+
|
|
213
|
+
If you prefer conda:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
conda create -n osl python=3.12 pip
|
|
217
|
+
conda activate osl
|
|
218
|
+
pip install -e .
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Setup Environment (PyTorch, CUDA aware & Optional Dependencies)
|
|
222
|
+
```bash
|
|
223
|
+
# Install PyTorch (CPU/GPU auto-detected)
|
|
224
|
+
opensportslib setup
|
|
225
|
+
|
|
226
|
+
# Optional: install PyTorch Geometric support. This replaces the installed
|
|
227
|
+
# Torch stack with the PyG-compatible PyTorch 2.12.1 profile.
|
|
228
|
+
opensportslib setup --pyg
|
|
229
|
+
|
|
230
|
+
# Optional: install for DALI support
|
|
231
|
+
opensportslib setup --dali
|
|
232
|
+
|
|
233
|
+
# Optional: install the X-VARS-compatible VQA dependency profile
|
|
234
|
+
opensportslib setup --vqa_xvars
|
|
235
|
+
|
|
236
|
+
# Optional: install the Qwen-compatible VQA dependency profile
|
|
237
|
+
opensportslib setup --vqa_qwen
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Contributing
|
|
243
|
+
|
|
244
|
+
We welcome contributions. Pull requests must target `dev`, and each
|
|
245
|
+
GitHub-linked commit author must accept the [Individual Contributor License
|
|
246
|
+
Agreement](.github/CLA.md) when prompted by the `CLA check`.
|
|
247
|
+
|
|
248
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for the contribution workflow and
|
|
249
|
+
[DEVELOPERS.md](DEVELOPERS.md) for architecture and extension guidance.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## License
|
|
254
|
+
|
|
255
|
+
OpenSportsLib is available under dual licensing.
|
|
256
|
+
|
|
257
|
+
### Open source license
|
|
258
|
+
[AGPL 3.0](LICENSE) for research, academic, and community use.
|
|
259
|
+
|
|
260
|
+
### Commercial license
|
|
261
|
+
For proprietary or commercial deployment, please refer to [LICENSE-COMMERCIAL](LICENSE-COMMERCIAL).
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Citation
|
|
266
|
+
|
|
267
|
+
If you use OpenSportsLib in your research, please cite the project.
|
|
268
|
+
|
|
269
|
+
```bibtex
|
|
270
|
+
@misc{opensportslib,
|
|
271
|
+
title={OpenSportsLib},
|
|
272
|
+
author={OpenSportsLab},
|
|
273
|
+
year={2026},
|
|
274
|
+
howpublished={\url{https://github.com/OpenSportsLab/opensportslib}}
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Acknowledgments
|
|
281
|
+
|
|
282
|
+
OpenSportsLib is developed within the broader OpenSportsLab effort for sports
|
|
283
|
+
video understanding. Core contributors affiliated with KAUST include:
|
|
284
|
+
|
|
285
|
+
- [Jeet Vora](https://jeetv.github.io/) — Remote Research Engineer
|
|
286
|
+
- [Dr. Merey Ramazanova](https://meryusha.github.io/) — Post-Doc
|
|
287
|
+
- [Dr. Silvio Giancola](https://www.silviogiancola.com/) — Research Scientist
|