sports2d 0.7.2__py3-none-any.whl → 0.8.0__py3-none-any.whl

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.
@@ -1,14 +1,41 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: sports2d
3
- Version: 0.7.2
4
- Summary: Detect pose and compute 2D joint angles from a video.
5
- Home-page: https://github.com/davidpagnon/Sports2D
6
- Author: David Pagnon
7
- Author-email: contact@david-pagnon.com
3
+ Version: 0.8.0
4
+ Summary: Compute 2D human pose and angles from a video or a webcam.
5
+ Author-email: David Pagnon <contact@david-pagnon.com>
8
6
  License: BSD 3-Clause License
7
+
8
+ Copyright (c) 2022, perfanalytics
9
+ All rights reserved.
10
+
11
+ Redistribution and use in source and binary forms, with or without
12
+ modification, are permitted provided that the following conditions are met:
13
+
14
+ 1. Redistributions of source code must retain the above copyright notice, this
15
+ list of conditions and the following disclaimer.
16
+
17
+ 2. Redistributions in binary form must reproduce the above copyright notice,
18
+ this list of conditions and the following disclaimer in the documentation
19
+ and/or other materials provided with the distribution.
20
+
21
+ 3. Neither the name of the copyright holder nor the names of its
22
+ contributors may be used to endorse or promote products derived from
23
+ this software without specific prior written permission.
24
+
25
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
26
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
28
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
29
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
31
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
33
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
+
36
+ Project-URL: Homepage, https://github.com/davidpagnon/Sports2D
9
37
  Project-URL: Bug Tracker, https://github.com/davidpagnon/Sports2D/issues
10
- Keywords: markerless,kinematics,OpenPose,BlazePose,joint angles,2D,biomechanics,sports,pose estimation,joint angles,sports analytics,kinovea
11
- Platform: any
38
+ Keywords: markerless,kinematics,OpenPose,OpenSim,Mocap,biomechanics,sports coaching,pose estimation,joint angles,sports analytics,kinovea
12
39
  Classifier: Programming Language :: Python :: 3
13
40
  Classifier: Development Status :: 3 - Alpha
14
41
  Classifier: Intended Audience :: Science/Research
@@ -21,37 +48,42 @@ Classifier: Topic :: Scientific/Engineering :: Image Processing
21
48
  Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
22
49
  Classifier: Topic :: Multimedia :: Graphics
23
50
  Classifier: Topic :: Multimedia :: Graphics :: 3D Modeling
51
+ Requires-Python: >=3.9
24
52
  Description-Content-Type: text/markdown
25
53
  License-File: LICENSE
26
- Requires-Dist: ipython
27
54
  Requires-Dist: toml
28
- Requires-Dist: numpy
29
- Requires-Dist: pandas>=1.5
30
- Requires-Dist: scipy
31
- Requires-Dist: anytree
32
- Requires-Dist: opencv-python
55
+ Requires-Dist: numpy>=1.19
33
56
  Requires-Dist: matplotlib
34
57
  Requires-Dist: PyQt5
58
+ Requires-Dist: tqdm
59
+ Requires-Dist: anytree
60
+ Requires-Dist: pandas>=1.5
61
+ Requires-Dist: scipy
35
62
  Requires-Dist: statsmodels
63
+ Requires-Dist: ipython
36
64
  Requires-Dist: c3d
37
65
  Requires-Dist: rtmlib
38
66
  Requires-Dist: openvino
39
- Requires-Dist: tqdm
67
+ Requires-Dist: opencv-python
40
68
  Requires-Dist: imageio_ffmpeg
41
69
  Requires-Dist: deep-sort-realtime
42
70
  Requires-Dist: Pose2Sim
71
+ Dynamic: license-file
43
72
 
44
73
 
45
74
  [![Continuous integration](https://github.com/davidpagnon/sports2d/actions/workflows/continuous-integration.yml/badge.svg?branch=main)](https://github.com/davidpagnon/sports2d/actions/workflows/continuous-integration.yml)
46
- [![PyPI version](https://badge.fury.io/py/Sports2D.svg)](https://badge.fury.io/py/Sports2D)\
75
+ [![PyPI version](https://badge.fury.io/py/Sports2D.svg)](https://badge.fury.io/py/Sports2D)
76
+ \
47
77
  [![Downloads](https://static.pepy.tech/badge/sports2d)](https://pepy.tech/project/sports2d)
48
78
  [![Stars](https://img.shields.io/github/stars/davidpagnon/sports2d)](https://github.com/davidpagnon/sports2d/stargazers)
49
79
  [![GitHub issues](https://img.shields.io/github/issues/davidpagnon/sports2d)](https://github.com/davidpagnon/sports2d/issues)
50
- [![GitHub issues-closed](https://img.shields.io/github/issues-closed/davidpagnon/sports2d)](https://GitHub.com/davidpagnon/sports2d/issues?q=is%3Aissue+is%3Aclosed)\
80
+ [![GitHub issues-closed](https://img.shields.io/github/issues-closed/davidpagnon/sports2d)](https://GitHub.com/davidpagnon/sports2d/issues?q=is%3Aissue+is%3Aclosed)
81
+ \
51
82
  [![status](https://joss.theoj.org/papers/1d525bbb2695c88c6ebbf2297bd35897/status.svg)](https://joss.theoj.org/papers/1d525bbb2695c88c6ebbf2297bd35897)
52
83
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10576574.svg)](https://zenodo.org/doi/10.5281/zenodo.7903962)
53
84
  [![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
54
-
85
+ \
86
+ [![Discord](https://img.shields.io/discord/1183750225471492206?logo=Discord&label=Discord%20community)](https://discord.com/invite/4mXUdSFjmt)
55
87
 
56
88
  <!-- [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://bit.ly/Sports2D_Colab)-->
57
89
 
@@ -63,8 +95,8 @@ Requires-Dist: Pose2Sim
63
95
 
64
96
  </br>
65
97
 
66
- > **`Announcement:`\
67
- > Complete rewriting of the code!** Run `pip install sports2d -U` to get the latest version.
98
+ > **`Announcements:`**
99
+ > - Select only the persons you want to analyze **New in v0.8!**
68
100
  > - MarkerAugmentation and Inverse Kinematics for accurate 3D motion with OpenSim. **New in v0.7!**
69
101
  > - Any detector and pose estimation model can be used. **New in v0.6!**
70
102
  > - Results in meters rather than pixels. **New in v0.5!**
@@ -72,6 +104,8 @@ Requires-Dist: Pose2Sim
72
104
  > - Works from a webcam
73
105
  > - Better visualization output
74
106
  > - More flexible, easier to run
107
+ >
108
+ > Run `pip install sports2d -U` to get the latest version.
75
109
 
76
110
  ***N.B.:*** As always, I am more than happy to welcome contributions (see [How to contribute](#how-to-contribute-and-to-do-list))!
77
111
  <!--User-friendly Colab version released! (and latest issues fixed, too)\
@@ -81,7 +115,10 @@ Works on any smartphone!**\
81
115
 
82
116
  </br>
83
117
 
84
- https://github.com/user-attachments/assets/1c6e2d6b-d0cf-4165-864e-d9f01c0b8a0e
118
+
119
+ https://github.com/user-attachments/assets/6a444474-4df1-4134-af0c-e9746fa433ad
120
+
121
+ <!-- https://github.com/user-attachments/assets/1c6e2d6b-d0cf-4165-864e-d9f01c0b8a0e -->
85
122
 
86
123
  `Warning:` Angle estimation is only as good as the pose estimation algorithm, i.e., it is not perfect.\
87
124
  `Warning:` Results are acceptable only if the persons move in the 2D plane (sagittal or frontal plane). The persons need to be filmed as parallel as possible to the motion plane.\
@@ -104,14 +141,15 @@ If you need 3D research-grade markerless joint kinematics, consider using severa
104
141
  3. [Play with the parameters](#play-with-the-parameters)
105
142
  1. [Run on a custom video or on a webcam](#run-on-a-custom-video-or-on-a-webcam)
106
143
  2. [Run for a specific time range](#run-for-a-specific-time-range)
107
- 3. [Get coordinates in meters](#get-coordinates-in-meters)
108
- 4. [Run inverse kinematics](#run-inverse-kinematics)
109
- 5. [Run on several videos at once](#run-on-several-videos-at-once)
110
- 6. [Use the configuration file or run within Python](#use-the-configuration-file-or-run-within-python)
111
- 7. [Get the angles the way you want](#get-the-angles-the-way-you-want)
112
- 8. [Customize your output](#customize-your-output)
113
- 9. [Use a custom pose estimation model](#use-a-custom-pose-estimation-model)
114
- 10. [All the parameters](#all-the-parameters)
144
+ 3. [Select the persons you are interested in](#select-the-persons-you-are-interested-in)
145
+ 4. [Get coordinates in meters](#get-coordinates-in-meters)
146
+ 5. [Run inverse kinematics](#run-inverse-kinematics)
147
+ 6. [Run on several videos at once](#run-on-several-videos-at-once)
148
+ 7. [Use the configuration file or run within Python](#use-the-configuration-file-or-run-within-python)
149
+ 8. [Get the angles the way you want](#get-the-angles-the-way-you-want)
150
+ 9. [Customize your output](#customize-your-output)
151
+ 10. [Use a custom pose estimation model](#use-a-custom-pose-estimation-model)
152
+ 11. [All the parameters](#all-the-parameters)
115
153
  2. [Go further](#go-further)
116
154
  1. [Too slow for you?](#too-slow-for-you)
117
155
  3. [Run inverse kinematics](#run-inverse-kinematics)
@@ -259,7 +297,6 @@ sports2d --video_input webcam
259
297
 
260
298
  <br>
261
299
 
262
-
263
300
  #### Run for a specific time range:
264
301
  ```cmd
265
302
  sports2d --time_range 1.2 2.7
@@ -268,6 +305,28 @@ sports2d --time_range 1.2 2.7
268
305
  <br>
269
306
 
270
307
 
308
+ #### Select the persons you are interested in:
309
+ If you only want to analyze a subset of the detected persons, you can use the `--nb_persons_to_detect` and `--person_ordering_method` parameters. The order matters if you want to [convert coordinates in meters](#get-coordinates-in-meters) or [run inverse kinematics](#run-inverse-kinematics).
310
+
311
+
312
+ ``` cmd
313
+ sports2d --nb_persons_to_detect 2 --person_ordering_method highest_likelihood
314
+ ```
315
+
316
+ We recommend to use the `on_click` method if you can afford a manual input. This lets the user handle both the person number and their order in the same stage. When prompted, select the persons you are interested in in the desired order. In our case, lets slide to a frame where both people are visible, and select the woman first, then the man.
317
+
318
+ ``` cmd
319
+ sports2d --person_ordering_method on_click
320
+ ```
321
+
322
+
323
+
324
+ <img src="Content/Person_selection.png" width="760">
325
+
326
+
327
+ <br>
328
+
329
+
271
330
  #### Get coordinates in meters:
272
331
  > **N.B.:** Depth is estimated from a neutral pose.
273
332
 
@@ -284,11 +343,12 @@ Also note that distortions are not taken into account, and that results will be
284
343
  sports2d --to_meters True --calib_file calib_demo.toml
285
344
  ``` -->
286
345
  ``` cmd
287
- sports2d --to_meters True --px_to_m_person_height 1.65 --px_to_m_from_person_id 2
346
+ sports2d --to_meters True --first_person_height 1.65 --visible_side auto front none
288
347
  ```
289
348
  ``` cmd
290
- sports2d --to_meters True --px_to_m_person_height 1.65 --px_to_m_from_person_id 2 `
291
- --visible_side front none auto --floor_angle 0 --xy_origin 0 940
349
+ sports2d --to_meters True --first_person_height 1.65 --visible_side auto front none `
350
+ --person_ordering_method on_click `
351
+ --floor_angle 0 --xy_origin 0 940
292
352
  ```
293
353
 
294
354
  <br>
@@ -306,9 +366,7 @@ Model scaling is done according to the mean of the segment lengths, across a sub
306
366
 
307
367
  ```cmd
308
368
  sports2d --time_range 1.2 2.7 `
309
- --do_ik true `
310
- --px_to_m_from_person_id 1 --px_to_m_person_height 1.65 `
311
- --visible_side front auto
369
+ --do_ik true --first_person_height 1.65 --visible_side auto front
312
370
  ```
313
371
 
314
372
  You can optionally use the LSTM marker augmentation to improve the quality of the output motion.\
@@ -316,9 +374,8 @@ You can also optionally give the participants proper masses. Mass has no influen
316
374
 
317
375
  ```cmd
318
376
  sports2d --time_range 1.2 2.7 `
319
- --do_ik true --use_augmentation True `
320
- --px_to_m_from_person_id 1 --px_to_m_person_height 1.65 `
321
- --visible_side front left --participant_mass 67.0 55.0
377
+ --do_ik true --first_person_height 1.65 --visible_side left front `
378
+ --use_augmentation True --participant_mass 55.0 67.0
322
379
  ```
323
380
 
324
381
  <br>
@@ -378,10 +435,6 @@ sports2d --video_input demo.mp4 other_video.mp4 --time_range 1.2 2.7 0 3.5
378
435
 
379
436
 
380
437
  #### Customize your output:
381
- - Only analyze the most prominent person:
382
- ``` cmd
383
- sports2d --multiperson false
384
- ```
385
438
  - Choose whether you want video, images, trc pose file, angle mot file, real-time display, and plots:
386
439
  ```cmd
387
440
  sports2d --save_vid false --save_img true `
@@ -427,8 +480,10 @@ sports2d --help
427
480
  'config': ["C", "path to a toml configuration file"],
428
481
 
429
482
  'video_input': ["i", "webcam, or video_path.mp4, or video1_path.avi video2_path.mp4 ... Beware that images won't be saved if paths contain non ASCII characters"],
430
- 'px_to_m_person_height': ["H", "height of the person in meters. 1.70 if not specified"],
431
- 'visible_side': ["", "front, back, left, right, auto, or none. 'front none auto' if not specified. If 'auto', will be either left or right depending on the direction of the motion. If 'none', no IK for this person"],
483
+ 'nb_persons_to_detect': ["n", "number of persons to detect. int or 'all'. 'all' if not specified"],
484
+ 'person_ordering_method': ["", "'on_click', 'highest_likelihood', 'greatest_displacement', 'least_displacement', 'first_detected', or 'last_detected'. 'on_click' if not specified"],
485
+ 'first_person_height': ["H", "height of the reference person in meters. 1.65 if not specified. Not used if a calibration file is provided"],
486
+ 'visible_side': ["", "front, back, left, right, auto, or none. 'auto front none' if not specified. If 'auto', will be either left or right depending on the direction of the motion. If 'none', no IK for this person"],
432
487
  'load_trc_px': ["", "load trc file to avaid running pose estimation again. false if not specified"],
433
488
  'compare': ["", "visually compare motion with trc file. false if not specified"],
434
489
  'webcam_id': ["w", "webcam ID. 0 if not specified"],
@@ -454,7 +509,6 @@ sports2d --help
454
509
  'device': ["", "Device for pose estimatino can be 'auto', 'openvino', 'onnxruntime', 'opencv'"],
455
510
  'to_meters': ["M", "convert pixels to meters. true if not specified"],
456
511
  'make_c3d': ["", "Convert trc to c3d file. true if not specified"],
457
- 'px_to_m_from_person_id': ["", "person ID to calibrate on. 0 if not specified"],
458
512
  'floor_angle': ["", "angle of the floor. 'auto' if not specified"],
459
513
  'xy_origin': ["", "origin of the xy plane. 'auto' if not specified"],
460
514
  'calib_file': ["", "path to calibration file. '' if not specified, eg no calibration file"],
@@ -464,8 +518,7 @@ sports2d --help
464
518
  'use_contacts_muscles': ["", "Use model with contact spheres and muscles. false if not specified"],
465
519
  'participant_mass': ["", "mass of the participant in kg or none. Defaults to 70 if not provided. No influence on kinematics (motion), only on kinetics (forces)"],
466
520
  'close_to_zero_speed_m': ["","Sum for all keypoints: about 50 px/frame or 0.2 m/frame"],
467
- 'multiperson': ["", "multiperson involves tracking: will be faster if set to false. true if not specified"],
468
- 'tracking_mode': ["", "sports2d or rtmlib. sports2d is generally much more accurate and comparable in speed. sports2d if not specified"],
521
+ 'tracking_mode': ["", "'sports2d' or 'deepsort'. 'deepsort' is slower, harder to parametrize but can be more robust if correctly tuned"],
469
522
  'deepsort_params': ["", 'Deepsort tracking parameters: """{dictionary between 3 double quotes}""". \n\
470
523
  Default: max_age:30, n_init:3, nms_max_overlap:0.8, max_cosine_distance:0.3, nn_budget:200, max_iou_distance:0.8, embedder_gpu: True\n\
471
524
  More information there: https://github.com/levan92/deep_sort_realtime/blob/master/deep_sort_realtime/deepsort_tracker.py#L51'],
@@ -496,7 +549,8 @@ sports2d --help
496
549
  'remove_individual_scaling_setup': ["", "remove individual scaling setup files generated during scaling. true if not specified"],
497
550
  'remove_individual_ik_setup': ["", "remove individual IK setup files generated during IK. true if not specified"],
498
551
  'fastest_frames_to_remove_percent': ["", "Frames with high speed are considered as outliers. Defaults to 0.1"],
499
- 'close_to_zero_speed_m': ["","Sum for all keypoints: about 50 px/frame or 0.2 m/frame"],
552
+ 'close_to_zero_speed_m': ["","Sum for all keypoints: about 0.2 m/frame. Defaults to 0.2"],
553
+ 'close_to_zero_speed_px': ["", "Sum for all keypoints: about 50 px/frame. Defaults to 50"],
500
554
  'large_hip_knee_angles': ["", "Hip and knee angles below this value are considered as imprecise and ignored. Defaults to 45"],
501
555
  'trimmed_extrema_percent': ["", "Proportion of the most extreme segment values to remove before calculating their mean. Defaults to 50"],
502
556
  'use_custom_logging': ["", "use custom logging. false if not specified"]
@@ -522,7 +576,6 @@ Note that any detection and pose models can be used (first [deploy them with MMP
522
576
  'pose_input_size':[192,256]}"""
523
577
  ```
524
578
  - Use `--det_frequency 50`: Will detect poses only every 50 frames, and track keypoints in between, which is faster.
525
- - Use `--multiperson false`: Can be used if one single person is present in the video. Otherwise, persons' IDs may be mixed up.
526
579
  - Use `--load_trc_px <path_to_file_px.trc>`: Will use pose estimation results from a file. Useful if you want to use different parameters for pixel to meter conversion or angle calculation without running detection and pose estimation all over.
527
580
  - Make sure you use `--tracking_mode sports2d`: Will use the default Sports2D tracker. Unlike DeepSort, it is faster, does not require any parametrization, and is as good in non-crowded scenes.
528
581
 
@@ -676,10 +729,9 @@ You will be proposed a to-do list, but please feel absolutely free to propose yo
676
729
  - [x] Run again without pose estimation with the option `--load_trc_px` for px .trc file.
677
730
  - [x] **Convert positions to meters** by providing the person height, a calibration file, or 3D points [to click on the image](https://stackoverflow.com/questions/74248955/how-to-display-the-coordinates-of-the-points-clicked-on-the-image-in-google-cola)
678
731
  - [x] Support any detection and/or pose estimation model.
732
+ - [x] Optionally let user select the persons of interest.
733
+ - [x] Perform **Inverse kinematics and dynamics** with OpenSim (cf. [Pose2Sim](https://github.com/perfanalytics/pose2sim), but in 2D). Update [this model](https://github.com/davidpagnon/Sports2D/blob/main/Sports2D/Utilities/2D_gait.osim) (add arms, markers, remove muscles and contact spheres). Add pipeline example.
679
734
 
680
- - [ ] Perform **Inverse kinematics and dynamics** with OpenSim (cf. [Pose2Sim](https://github.com/perfanalytics/pose2sim), but in 2D). Update [this model](https://github.com/davidpagnon/Sports2D/blob/main/Sports2D/Utilities/2D_gait.osim) (add arms, markers, remove muscles and contact spheres). Add pipeline example.
681
- - [ ] Optionally let user select the person of interest in single_person mode:\
682
- `multiperson = true # true, or 'single_auto', or 'single_click'. 'single_auto' selects the person with highest average likelihood, and 'single_click' lets the user manually select the person of interest.`
683
735
  - [ ] Run with the option `--compare_to` to visually compare motion with a trc file. If run with a webcam input, the user can follow the motion of the trc file. Further calculation can then be done to compare specific variables.
684
736
  - [ ] **Colab version**: more user-friendly, usable on a smartphone.
685
737
  - [ ] **GUI applications** for Windows, Mac, and Linux, as well as for Android and iOS.
@@ -690,33 +742,3 @@ You will be proposed a to-do list, but please feel absolutely free to propose yo
690
742
  - [ ] **Pose refinement**. Click and move badly estimated 2D points. See [DeepLabCut](https://www.youtube.com/watch?v=bEuBKB7eqmk) for inspiration.
691
743
  - [ ] Add tools for annotating images, undistort them, take perspective into account, etc. (cf. [Kinovea](https://www.kinovea.org/features.html)).
692
744
 
693
-
694
- BSD 3-Clause License
695
-
696
- Copyright (c) 2022, perfanalytics
697
- All rights reserved.
698
-
699
- Redistribution and use in source and binary forms, with or without
700
- modification, are permitted provided that the following conditions are met:
701
-
702
- 1. Redistributions of source code must retain the above copyright notice, this
703
- list of conditions and the following disclaimer.
704
-
705
- 2. Redistributions in binary form must reproduce the above copyright notice,
706
- this list of conditions and the following disclaimer in the documentation
707
- and/or other materials provided with the distribution.
708
-
709
- 3. Neither the name of the copyright holder nor the names of its
710
- contributors may be used to endorse or promote products derived from
711
- this software without specific prior written permission.
712
-
713
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
714
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
715
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
716
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
717
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
718
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
719
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
720
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
721
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
722
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,15 @@
1
+ Sports2D/Sports2D.py,sha256=0BQ5ainW3EOxElwiXHGywDKVlnHktTIz3EfEH3JhJR0,30460
2
+ Sports2D/__init__.py,sha256=BuUkPEdItxlkeqz4dmoiPwZLkgAfABJK3KWQ1ujTGwE,153
3
+ Sports2D/process.py,sha256=ymiWlS_VakIUy99pEle2mbuZKcQV2KE5AaauAy95Xuo,106637
4
+ Sports2D/Demo/Config_demo.toml,sha256=STcdCLpi4-94RpkP6JjvRUxce_QRQnTzjAny71b6ejI,13829
5
+ Sports2D/Demo/demo.mp4,sha256=2aZkFxhWR7ESMEtXCT8MGA83p2jmoU2sp1ylQfO3gDk,3968304
6
+ Sports2D/Utilities/__init__.py,sha256=BuUkPEdItxlkeqz4dmoiPwZLkgAfABJK3KWQ1ujTGwE,153
7
+ Sports2D/Utilities/common.py,sha256=idMRmesFv5BPX-5g3z5dOVa7SpS_8tNgijvGrOZlR-k,11185
8
+ Sports2D/Utilities/filter.py,sha256=rfZcqofjllKI_5ovZTKEAmyjOZpB_PzbAJ0P874T8Ak,4973
9
+ Sports2D/Utilities/tests.py,sha256=XnPNK63AZ_xlJBmFmPJtOMrzssBXIPXFzYd73CPzchI,4740
10
+ sports2d-0.8.0.dist-info/licenses/LICENSE,sha256=f4qe3nE0Y7ltJho5w-xAR0jI5PUox5Xl-MsYiY7ZRM8,1521
11
+ sports2d-0.8.0.dist-info/METADATA,sha256=QrX8rCAoE8-aHew7HeY5eGsvRBrez7AVVWQBfdCoYyc,39763
12
+ sports2d-0.8.0.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
13
+ sports2d-0.8.0.dist-info/entry_points.txt,sha256=V8dFDIXatz9VvoGgoHzb2wE71C9-f85K6_OjnEQlxww,108
14
+ sports2d-0.8.0.dist-info/top_level.txt,sha256=DoURf9UDB8lQ_9lMUPQMQqhXCvWPFFjJco9NzPlHJ6I,9
15
+ sports2d-0.8.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.2)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ sports2d = Sports2D.Sports2D:main
3
+ tests_sports2d = Sports2D.Utilities.tests:test_workflow