ultralytics 8.2.17__tar.gz → 8.2.19__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.

Potentially problematic release.


This version of ultralytics might be problematic. Click here for more details.

Files changed (226) hide show
  1. {ultralytics-8.2.17 → ultralytics-8.2.19}/PKG-INFO +1 -1
  2. {ultralytics-8.2.17 → ultralytics-8.2.19}/tests/test_cli.py +1 -1
  3. {ultralytics-8.2.17 → ultralytics-8.2.19}/tests/test_cuda.py +1 -1
  4. {ultralytics-8.2.17 → ultralytics-8.2.19}/tests/test_engine.py +1 -1
  5. {ultralytics-8.2.17 → ultralytics-8.2.19}/tests/test_exports.py +1 -2
  6. {ultralytics-8.2.17 → ultralytics-8.2.19}/tests/test_integrations.py +1 -1
  7. {ultralytics-8.2.17 → ultralytics-8.2.19}/tests/test_python.py +4 -4
  8. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/__init__.py +1 -1
  9. ultralytics-8.2.19/ultralytics/cfg/datasets/signature.yaml +20 -0
  10. ultralytics-8.2.19/ultralytics/cfg/models/v9/yolov9c-seg.yaml +38 -0
  11. ultralytics-8.2.19/ultralytics/cfg/models/v9/yolov9c.yaml +38 -0
  12. ultralytics-8.2.19/ultralytics/cfg/models/v9/yolov9e-seg.yaml +61 -0
  13. ultralytics-8.2.19/ultralytics/cfg/models/v9/yolov9e.yaml +61 -0
  14. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/build.py +1 -1
  15. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/exporter.py +3 -0
  16. ultralytics-8.2.19/ultralytics/solutions/__init__.py +19 -0
  17. ultralytics-8.2.19/ultralytics/solutions/ai_gym.py +124 -0
  18. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/solutions/distance_calculation.py +66 -71
  19. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/solutions/heatmap.py +95 -133
  20. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/solutions/object_counter.py +62 -82
  21. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/solutions/parking_management.py +22 -9
  22. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/solutions/queue_management.py +63 -82
  23. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/solutions/speed_estimation.py +50 -68
  24. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/plotting.py +40 -42
  25. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics.egg-info/PKG-INFO +1 -1
  26. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics.egg-info/SOURCES.txt +1 -0
  27. ultralytics-8.2.17/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -38
  28. ultralytics-8.2.17/ultralytics/cfg/models/v9/yolov9c.yaml +0 -38
  29. ultralytics-8.2.17/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -61
  30. ultralytics-8.2.17/ultralytics/cfg/models/v9/yolov9e.yaml +0 -61
  31. ultralytics-8.2.17/ultralytics/solutions/ai_gym.py +0 -150
  32. ultralytics-8.2.17/ultralytics/trackers/utils/__init__.py +0 -1
  33. {ultralytics-8.2.17 → ultralytics-8.2.19}/LICENSE +0 -0
  34. {ultralytics-8.2.17 → ultralytics-8.2.19}/README.md +0 -0
  35. {ultralytics-8.2.17 → ultralytics-8.2.19}/pyproject.toml +0 -0
  36. {ultralytics-8.2.17 → ultralytics-8.2.19}/setup.cfg +0 -0
  37. {ultralytics-8.2.17 → ultralytics-8.2.19}/tests/test_explorer.py +0 -0
  38. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/assets/bus.jpg +0 -0
  39. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/assets/zidane.jpg +0 -0
  40. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/__init__.py +0 -0
  41. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  42. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  43. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  44. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  45. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  46. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  47. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  48. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  49. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  50. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  51. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  52. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  53. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  54. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/coco.yaml +0 -0
  55. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  56. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  57. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  58. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  59. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  60. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  61. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  62. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  63. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  64. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  65. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  66. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/xView.yaml +0 -0
  67. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/default.yaml +0 -0
  68. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  69. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  70. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  71. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  72. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  73. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  74. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  75. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  76. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  77. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  78. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  79. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  80. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  81. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  82. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  83. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  84. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  85. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  86. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  87. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  88. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  89. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  90. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  91. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  92. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  93. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  94. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  95. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  96. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  97. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/__init__.py +0 -0
  98. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/annotator.py +0 -0
  99. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/augment.py +0 -0
  100. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/base.py +0 -0
  101. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/converter.py +0 -0
  102. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/dataset.py +0 -0
  103. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/explorer/__init__.py +0 -0
  104. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/explorer/explorer.py +0 -0
  105. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/explorer/gui/__init__.py +0 -0
  106. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/explorer/gui/dash.py +0 -0
  107. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/explorer/utils.py +0 -0
  108. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/loaders.py +0 -0
  109. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/split_dota.py +0 -0
  110. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/utils.py +0 -0
  111. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/__init__.py +0 -0
  112. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/model.py +0 -0
  113. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/predictor.py +0 -0
  114. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/results.py +0 -0
  115. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/trainer.py +0 -0
  116. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/tuner.py +0 -0
  117. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/validator.py +0 -0
  118. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/hub/__init__.py +0 -0
  119. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/hub/auth.py +0 -0
  120. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/hub/session.py +0 -0
  121. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/hub/utils.py +0 -0
  122. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/__init__.py +0 -0
  123. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/fastsam/__init__.py +0 -0
  124. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/fastsam/model.py +0 -0
  125. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/fastsam/predict.py +0 -0
  126. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/fastsam/prompt.py +0 -0
  127. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/fastsam/utils.py +0 -0
  128. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/fastsam/val.py +0 -0
  129. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/nas/__init__.py +0 -0
  130. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/nas/model.py +0 -0
  131. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/nas/predict.py +0 -0
  132. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/nas/val.py +0 -0
  133. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/rtdetr/__init__.py +0 -0
  134. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/rtdetr/model.py +0 -0
  135. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/rtdetr/predict.py +0 -0
  136. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/rtdetr/train.py +0 -0
  137. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/rtdetr/val.py +0 -0
  138. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/__init__.py +0 -0
  139. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/amg.py +0 -0
  140. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/build.py +0 -0
  141. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/model.py +0 -0
  142. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/modules/__init__.py +0 -0
  143. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/modules/decoders.py +0 -0
  144. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/modules/encoders.py +0 -0
  145. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/modules/sam.py +0 -0
  146. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  147. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/modules/transformer.py +0 -0
  148. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/predict.py +0 -0
  149. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/utils/__init__.py +0 -0
  150. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/utils/loss.py +0 -0
  151. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/utils/ops.py +0 -0
  152. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/__init__.py +0 -0
  153. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/classify/__init__.py +0 -0
  154. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/classify/predict.py +0 -0
  155. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/classify/train.py +0 -0
  156. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/classify/val.py +0 -0
  157. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/detect/__init__.py +0 -0
  158. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/detect/predict.py +0 -0
  159. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/detect/train.py +0 -0
  160. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/detect/val.py +0 -0
  161. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/model.py +0 -0
  162. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/obb/__init__.py +0 -0
  163. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/obb/predict.py +0 -0
  164. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/obb/train.py +0 -0
  165. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/obb/val.py +0 -0
  166. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/pose/__init__.py +0 -0
  167. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/pose/predict.py +0 -0
  168. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/pose/train.py +0 -0
  169. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/pose/val.py +0 -0
  170. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/segment/__init__.py +0 -0
  171. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/segment/predict.py +0 -0
  172. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/segment/train.py +0 -0
  173. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/segment/val.py +0 -0
  174. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/world/__init__.py +0 -0
  175. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/world/train.py +0 -0
  176. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/world/train_world.py +0 -0
  177. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/__init__.py +0 -0
  178. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/autobackend.py +0 -0
  179. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/modules/__init__.py +0 -0
  180. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/modules/block.py +0 -0
  181. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/modules/conv.py +0 -0
  182. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/modules/head.py +0 -0
  183. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/modules/transformer.py +0 -0
  184. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/modules/utils.py +0 -0
  185. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/tasks.py +0 -0
  186. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/__init__.py +0 -0
  187. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/basetrack.py +0 -0
  188. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/bot_sort.py +0 -0
  189. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/byte_tracker.py +0 -0
  190. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/track.py +0 -0
  191. {ultralytics-8.2.17/ultralytics/solutions → ultralytics-8.2.19/ultralytics/trackers/utils}/__init__.py +0 -0
  192. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/utils/gmc.py +0 -0
  193. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  194. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/utils/matching.py +0 -0
  195. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/__init__.py +0 -0
  196. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/autobatch.py +0 -0
  197. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/benchmarks.py +0 -0
  198. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/__init__.py +0 -0
  199. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/base.py +0 -0
  200. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/clearml.py +0 -0
  201. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/comet.py +0 -0
  202. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/dvc.py +0 -0
  203. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/hub.py +0 -0
  204. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/mlflow.py +0 -0
  205. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/neptune.py +0 -0
  206. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/raytune.py +0 -0
  207. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  208. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/wb.py +0 -0
  209. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/checks.py +0 -0
  210. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/dist.py +0 -0
  211. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/downloads.py +0 -0
  212. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/errors.py +0 -0
  213. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/files.py +0 -0
  214. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/instance.py +0 -0
  215. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/loss.py +0 -0
  216. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/metrics.py +0 -0
  217. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/ops.py +0 -0
  218. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/patches.py +0 -0
  219. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/tal.py +0 -0
  220. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/torch_utils.py +0 -0
  221. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/triton.py +0 -0
  222. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/tuner.py +0 -0
  223. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics.egg-info/dependency_links.txt +0 -0
  224. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics.egg-info/entry_points.txt +0 -0
  225. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics.egg-info/requires.txt +0 -0
  226. {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.17
3
+ Version: 8.2.19
4
4
  Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
6
6
  Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
@@ -7,7 +7,7 @@ import pytest
7
7
  from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS
8
8
  from ultralytics.utils import ASSETS, WEIGHTS_DIR, checks
9
9
 
10
- from . import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE
10
+ from tests import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE
11
11
 
12
12
  # Constants
13
13
  TASK_MODEL_DATA = [(task, WEIGHTS_DIR / TASK2MODEL[task], TASK2DATA[task]) for task in TASKS]
@@ -10,7 +10,7 @@ from ultralytics import YOLO
10
10
  from ultralytics.utils import ASSETS, WEIGHTS_DIR
11
11
  from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS
12
12
 
13
- from . import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE, MODEL, SOURCE
13
+ from tests import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE, MODEL, SOURCE
14
14
 
15
15
 
16
16
  def test_checks():
@@ -9,7 +9,7 @@ from ultralytics.engine.exporter import Exporter
9
9
  from ultralytics.models.yolo import classify, detect, segment
10
10
  from ultralytics.utils import ASSETS, DEFAULT_CFG, WEIGHTS_DIR
11
11
 
12
- from . import MODEL
12
+ from tests import MODEL
13
13
 
14
14
 
15
15
  def test_func(*args): # noqa
@@ -18,8 +18,7 @@ from ultralytics.utils import (
18
18
  checks,
19
19
  )
20
20
  from ultralytics.utils.torch_utils import TORCH_1_9, TORCH_1_13
21
-
22
- from . import MODEL, SOURCE
21
+ from tests import MODEL, SOURCE
23
22
 
24
23
 
25
24
  def test_export_torchscript():
@@ -12,7 +12,7 @@ from ultralytics import YOLO, download
12
12
  from ultralytics.utils import DATASETS_DIR, SETTINGS
13
13
  from ultralytics.utils.checks import check_requirements
14
14
 
15
- from . import MODEL, SOURCE, TMP
15
+ from tests import MODEL, SOURCE, TMP
16
16
 
17
17
 
18
18
  @pytest.mark.skipif(not check_requirements("ray", install=False), reason="ray[tune] not installed")
@@ -25,10 +25,9 @@ from ultralytics.utils import (
25
25
  Retry,
26
26
  checks,
27
27
  )
28
- from ultralytics.utils.downloads import download
28
+ from ultralytics.utils.downloads import download, is_url
29
29
  from ultralytics.utils.torch_utils import TORCH_1_9
30
-
31
- from . import CFG, IS_TMP_WRITEABLE, MODEL, SOURCE, TMP
30
+ from tests import CFG, IS_TMP_WRITEABLE, MODEL, SOURCE, TMP
32
31
 
33
32
 
34
33
  def test_model_forward():
@@ -102,7 +101,7 @@ def test_predict_img(model_name):
102
101
  def test_predict_visualize(model):
103
102
  """Test model predict methods with 'visualize=True' arguments."""
104
103
  YOLO(WEIGHTS_DIR / model)(SOURCE, imgsz=32, visualize=True)
105
-
104
+
106
105
 
107
106
  def test_predict_grey_and_4ch():
108
107
  """Test YOLO prediction on SOURCE converted to greyscale and 4-channel images."""
@@ -131,6 +130,7 @@ def test_predict_grey_and_4ch():
131
130
 
132
131
  @pytest.mark.slow
133
132
  @pytest.mark.skipif(not ONLINE, reason="environment is offline")
133
+ @pytest.mark.skipif(not is_url("https://youtu.be/G17sBkb38XQ"), reason="YouTube URL issue")
134
134
  @Retry(times=3, delay=10)
135
135
  def test_youtube():
136
136
  """
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.17"
3
+ __version__ = "8.2.19"
4
4
 
5
5
  from ultralytics.data.explorer.explorer import Explorer
6
6
  from ultralytics.models import RTDETR, SAM, YOLO, YOLOWorld
@@ -0,0 +1,20 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+ # Signature dataset by Ultralytics
3
+ # Documentation: https://docs.ultralytics.com/datasets/detect/signature/
4
+ # Example usage: yolo train data=signature.yaml
5
+ # parent
6
+ # ├── ultralytics
7
+ # └── datasets
8
+ # └── signature ← downloads here (11.2 MB)
9
+
10
+ # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
11
+ path: ../datasets/signature # dataset root dir
12
+ train: train/images # train images (relative to 'path') 143 images
13
+ val: valid/images # val images (relative to 'path') 35 images
14
+
15
+ # Classes
16
+ names:
17
+ 0: signature
18
+
19
+ # Download script/URL (optional)
20
+ download: https://ultralytics.com/assets/signature.zip
@@ -0,0 +1,38 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+ # YOLOv9c-seg
3
+ # 654 layers, 27897120 parameters, 159.4 GFLOPs
4
+
5
+ # parameters
6
+ nc: 80 # number of classes
7
+
8
+ # gelan backbone
9
+ backbone:
10
+ - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
11
+ - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
12
+ - [-1, 1, RepNCSPELAN4, [256, 128, 64, 1]] # 2
13
+ - [-1, 1, ADown, [256]] # 3-P3/8
14
+ - [-1, 1, RepNCSPELAN4, [512, 256, 128, 1]] # 4
15
+ - [-1, 1, ADown, [512]] # 5-P4/16
16
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 6
17
+ - [-1, 1, ADown, [512]] # 7-P5/32
18
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 8
19
+ - [-1, 1, SPPELAN, [512, 256]] # 9
20
+
21
+ head:
22
+ - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
23
+ - [[-1, 6], 1, Concat, [1]] # cat backbone P4
24
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 12
25
+
26
+ - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
27
+ - [[-1, 4], 1, Concat, [1]] # cat backbone P3
28
+ - [-1, 1, RepNCSPELAN4, [256, 256, 128, 1]] # 15 (P3/8-small)
29
+
30
+ - [-1, 1, ADown, [256]]
31
+ - [[-1, 12], 1, Concat, [1]] # cat head P4
32
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 18 (P4/16-medium)
33
+
34
+ - [-1, 1, ADown, [512]]
35
+ - [[-1, 9], 1, Concat, [1]] # cat head P5
36
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 21 (P5/32-large)
37
+
38
+ - [[15, 18, 21], 1, Segment, [nc, 32, 256]] # Segment(P3, P4, P5)
@@ -0,0 +1,38 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+ # YOLOv9c
3
+ # 618 layers, 25590912 parameters, 104.0 GFLOPs
4
+
5
+ # parameters
6
+ nc: 80 # number of classes
7
+
8
+ # gelan backbone
9
+ backbone:
10
+ - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
11
+ - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
12
+ - [-1, 1, RepNCSPELAN4, [256, 128, 64, 1]] # 2
13
+ - [-1, 1, ADown, [256]] # 3-P3/8
14
+ - [-1, 1, RepNCSPELAN4, [512, 256, 128, 1]] # 4
15
+ - [-1, 1, ADown, [512]] # 5-P4/16
16
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 6
17
+ - [-1, 1, ADown, [512]] # 7-P5/32
18
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 8
19
+ - [-1, 1, SPPELAN, [512, 256]] # 9
20
+
21
+ head:
22
+ - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
23
+ - [[-1, 6], 1, Concat, [1]] # cat backbone P4
24
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 12
25
+
26
+ - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
27
+ - [[-1, 4], 1, Concat, [1]] # cat backbone P3
28
+ - [-1, 1, RepNCSPELAN4, [256, 256, 128, 1]] # 15 (P3/8-small)
29
+
30
+ - [-1, 1, ADown, [256]]
31
+ - [[-1, 12], 1, Concat, [1]] # cat head P4
32
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 18 (P4/16-medium)
33
+
34
+ - [-1, 1, ADown, [512]]
35
+ - [[-1, 9], 1, Concat, [1]] # cat head P5
36
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 21 (P5/32-large)
37
+
38
+ - [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5)
@@ -0,0 +1,61 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+ # YOLOv9c-seg
3
+ # 1261 layers, 60512800 parameters, 248.4 GFLOPs
4
+
5
+ # parameters
6
+ nc: 80 # number of classes
7
+
8
+ # gelan backbone
9
+ backbone:
10
+ - [-1, 1, Silence, []]
11
+ - [-1, 1, Conv, [64, 3, 2]] # 1-P1/2
12
+ - [-1, 1, Conv, [128, 3, 2]] # 2-P2/4
13
+ - [-1, 1, RepNCSPELAN4, [256, 128, 64, 2]] # 3
14
+ - [-1, 1, ADown, [256]] # 4-P3/8
15
+ - [-1, 1, RepNCSPELAN4, [512, 256, 128, 2]] # 5
16
+ - [-1, 1, ADown, [512]] # 6-P4/16
17
+ - [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 7
18
+ - [-1, 1, ADown, [1024]] # 8-P5/32
19
+ - [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 9
20
+
21
+ - [1, 1, CBLinear, [[64]]] # 10
22
+ - [3, 1, CBLinear, [[64, 128]]] # 11
23
+ - [5, 1, CBLinear, [[64, 128, 256]]] # 12
24
+ - [7, 1, CBLinear, [[64, 128, 256, 512]]] # 13
25
+ - [9, 1, CBLinear, [[64, 128, 256, 512, 1024]]] # 14
26
+
27
+ - [0, 1, Conv, [64, 3, 2]] # 15-P1/2
28
+ - [[10, 11, 12, 13, 14, -1], 1, CBFuse, [[0, 0, 0, 0, 0]]] # 16
29
+ - [-1, 1, Conv, [128, 3, 2]] # 17-P2/4
30
+ - [[11, 12, 13, 14, -1], 1, CBFuse, [[1, 1, 1, 1]]] # 18
31
+ - [-1, 1, RepNCSPELAN4, [256, 128, 64, 2]] # 19
32
+ - [-1, 1, ADown, [256]] # 20-P3/8
33
+ - [[12, 13, 14, -1], 1, CBFuse, [[2, 2, 2]]] # 21
34
+ - [-1, 1, RepNCSPELAN4, [512, 256, 128, 2]] # 22
35
+ - [-1, 1, ADown, [512]] # 23-P4/16
36
+ - [[13, 14, -1], 1, CBFuse, [[3, 3]]] # 24
37
+ - [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 25
38
+ - [-1, 1, ADown, [1024]] # 26-P5/32
39
+ - [[14, -1], 1, CBFuse, [[4]]] # 27
40
+ - [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 28
41
+ - [-1, 1, SPPELAN, [512, 256]] # 29
42
+
43
+ # gelan head
44
+ head:
45
+ - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
46
+ - [[-1, 25], 1, Concat, [1]] # cat backbone P4
47
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 2]] # 32
48
+
49
+ - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
50
+ - [[-1, 22], 1, Concat, [1]] # cat backbone P3
51
+ - [-1, 1, RepNCSPELAN4, [256, 256, 128, 2]] # 35 (P3/8-small)
52
+
53
+ - [-1, 1, ADown, [256]]
54
+ - [[-1, 32], 1, Concat, [1]] # cat head P4
55
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 2]] # 38 (P4/16-medium)
56
+
57
+ - [-1, 1, ADown, [512]]
58
+ - [[-1, 29], 1, Concat, [1]] # cat head P5
59
+ - [-1, 1, RepNCSPELAN4, [512, 1024, 512, 2]] # 41 (P5/32-large)
60
+
61
+ - [[35, 38, 41], 1, Segment, [nc, 32, 256]] # Segment (P3, P4, P5)
@@ -0,0 +1,61 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+ # YOLOv9e
3
+ # 1225 layers, 58206592 parameters, 193.0 GFLOPs
4
+
5
+ # parameters
6
+ nc: 80 # number of classes
7
+
8
+ # gelan backbone
9
+ backbone:
10
+ - [-1, 1, Silence, []]
11
+ - [-1, 1, Conv, [64, 3, 2]] # 1-P1/2
12
+ - [-1, 1, Conv, [128, 3, 2]] # 2-P2/4
13
+ - [-1, 1, RepNCSPELAN4, [256, 128, 64, 2]] # 3
14
+ - [-1, 1, ADown, [256]] # 4-P3/8
15
+ - [-1, 1, RepNCSPELAN4, [512, 256, 128, 2]] # 5
16
+ - [-1, 1, ADown, [512]] # 6-P4/16
17
+ - [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 7
18
+ - [-1, 1, ADown, [1024]] # 8-P5/32
19
+ - [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 9
20
+
21
+ - [1, 1, CBLinear, [[64]]] # 10
22
+ - [3, 1, CBLinear, [[64, 128]]] # 11
23
+ - [5, 1, CBLinear, [[64, 128, 256]]] # 12
24
+ - [7, 1, CBLinear, [[64, 128, 256, 512]]] # 13
25
+ - [9, 1, CBLinear, [[64, 128, 256, 512, 1024]]] # 14
26
+
27
+ - [0, 1, Conv, [64, 3, 2]] # 15-P1/2
28
+ - [[10, 11, 12, 13, 14, -1], 1, CBFuse, [[0, 0, 0, 0, 0]]] # 16
29
+ - [-1, 1, Conv, [128, 3, 2]] # 17-P2/4
30
+ - [[11, 12, 13, 14, -1], 1, CBFuse, [[1, 1, 1, 1]]] # 18
31
+ - [-1, 1, RepNCSPELAN4, [256, 128, 64, 2]] # 19
32
+ - [-1, 1, ADown, [256]] # 20-P3/8
33
+ - [[12, 13, 14, -1], 1, CBFuse, [[2, 2, 2]]] # 21
34
+ - [-1, 1, RepNCSPELAN4, [512, 256, 128, 2]] # 22
35
+ - [-1, 1, ADown, [512]] # 23-P4/16
36
+ - [[13, 14, -1], 1, CBFuse, [[3, 3]]] # 24
37
+ - [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 25
38
+ - [-1, 1, ADown, [1024]] # 26-P5/32
39
+ - [[14, -1], 1, CBFuse, [[4]]] # 27
40
+ - [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 28
41
+ - [-1, 1, SPPELAN, [512, 256]] # 29
42
+
43
+ # gelan head
44
+ head:
45
+ - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
46
+ - [[-1, 25], 1, Concat, [1]] # cat backbone P4
47
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 2]] # 32
48
+
49
+ - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
50
+ - [[-1, 22], 1, Concat, [1]] # cat backbone P3
51
+ - [-1, 1, RepNCSPELAN4, [256, 256, 128, 2]] # 35 (P3/8-small)
52
+
53
+ - [-1, 1, ADown, [256]]
54
+ - [[-1, 32], 1, Concat, [1]] # cat head P4
55
+ - [-1, 1, RepNCSPELAN4, [512, 512, 256, 2]] # 38 (P4/16-medium)
56
+
57
+ - [-1, 1, ADown, [512]]
58
+ - [[-1, 29], 1, Concat, [1]] # cat head P5
59
+ - [-1, 1, RepNCSPELAN4, [512, 1024, 512, 2]] # 41 (P5/32-large)
60
+
61
+ - [[35, 38, 41], 1, Detect, [nc]] # Detect(P3, P4, P5)
@@ -128,7 +128,7 @@ def build_dataloader(dataset, batch, workers, shuffle=True, rank=-1):
128
128
  """Return an InfiniteDataLoader or DataLoader for training or validation set."""
129
129
  batch = min(batch, len(dataset))
130
130
  nd = torch.cuda.device_count() # number of CUDA devices
131
- nw = min([os.cpu_count() // max(nd, 1), workers]) # number of workers
131
+ nw = min(os.cpu_count() // max(nd, 1), workers) # number of workers
132
132
  sampler = None if rank == -1 else distributed.DistributedSampler(dataset, shuffle=shuffle)
133
133
  generator = torch.Generator()
134
134
  generator.manual_seed(6148914691236517205 + RANK)
@@ -195,6 +195,9 @@ class Exporter:
195
195
  if not hasattr(model, "names"):
196
196
  model.names = default_class_names()
197
197
  model.names = check_class_names(model.names)
198
+ if self.args.half and self.args.int8:
199
+ LOGGER.warning("WARNING ⚠️ half=True and int8=True are mutually exclusive, setting half=False.")
200
+ self.args.half = False
198
201
  if self.args.half and onnx and self.device.type == "cpu":
199
202
  LOGGER.warning("WARNING ⚠️ half=True only compatible with GPU export, i.e. use device=0")
200
203
  self.args.half = False
@@ -0,0 +1,19 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+
3
+ from .ai_gym import AIGym
4
+ from .distance_calculation import DistanceCalculation
5
+ from .heatmap import Heatmap
6
+ from .object_counter import ObjectCounter
7
+ from .parking_management import ParkingManagement
8
+ from .queue_management import QueueManager
9
+ from .speed_estimation import SpeedEstimator
10
+
11
+ __all__ = (
12
+ "AIGym",
13
+ "DistanceCalculation",
14
+ "Heatmap",
15
+ "ObjectCounter",
16
+ "ParkingManagement",
17
+ "QueueManager",
18
+ "SpeedEstimator",
19
+ )
@@ -0,0 +1,124 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+
3
+ import cv2
4
+
5
+ from ultralytics.utils.checks import check_imshow
6
+ from ultralytics.utils.plotting import Annotator
7
+
8
+
9
+ class AIGym:
10
+ """A class to manage the gym steps of people in a real-time video stream based on their poses."""
11
+
12
+ def __init__(
13
+ self,
14
+ kpts_to_check,
15
+ line_thickness=2,
16
+ view_img=False,
17
+ pose_up_angle=145.0,
18
+ pose_down_angle=90.0,
19
+ pose_type="pullup",
20
+ ):
21
+ """
22
+ Initializes the AIGym class with the specified parameters.
23
+
24
+ Args:
25
+ kpts_to_check (list): Indices of keypoints to check.
26
+ line_thickness (int, optional): Thickness of the lines drawn. Defaults to 2.
27
+ view_img (bool, optional): Flag to display the image. Defaults to False.
28
+ pose_up_angle (float, optional): Angle threshold for the 'up' pose. Defaults to 145.0.
29
+ pose_down_angle (float, optional): Angle threshold for the 'down' pose. Defaults to 90.0.
30
+ pose_type (str, optional): Type of pose to detect ('pullup', 'pushup', 'abworkout'). Defaults to "pullup".
31
+ """
32
+
33
+ # Image and line thickness
34
+ self.im0 = None
35
+ self.tf = line_thickness
36
+
37
+ # Keypoints and count information
38
+ self.keypoints = None
39
+ self.poseup_angle = pose_up_angle
40
+ self.posedown_angle = pose_down_angle
41
+ self.threshold = 0.001
42
+
43
+ # Store stage, count and angle information
44
+ self.angle = None
45
+ self.count = None
46
+ self.stage = None
47
+ self.pose_type = pose_type
48
+ self.kpts_to_check = kpts_to_check
49
+
50
+ # Visual Information
51
+ self.view_img = view_img
52
+ self.annotator = None
53
+
54
+ # Check if environment supports imshow
55
+ self.env_check = check_imshow(warn=True)
56
+
57
+ def start_counting(self, im0, results, frame_count):
58
+ """
59
+ Function used to count the gym steps.
60
+
61
+ Args:
62
+ im0 (ndarray): Current frame from the video stream.
63
+ results (list): Pose estimation data.
64
+ frame_count (int): Current frame count.
65
+ """
66
+
67
+ self.im0 = im0
68
+
69
+ # Initialize count, angle, and stage lists on the first frame
70
+ if frame_count == 1:
71
+ self.count = [0] * len(results[0])
72
+ self.angle = [0] * len(results[0])
73
+ self.stage = ["-" for _ in results[0]]
74
+
75
+ self.keypoints = results[0].keypoints.data
76
+ self.annotator = Annotator(im0, line_width=2)
77
+
78
+ for ind, k in enumerate(reversed(self.keypoints)):
79
+ # Estimate angle and draw specific points based on pose type
80
+ if self.pose_type in {"pushup", "pullup", "abworkout"}:
81
+ self.angle[ind] = self.annotator.estimate_pose_angle(
82
+ k[int(self.kpts_to_check[0])].cpu(),
83
+ k[int(self.kpts_to_check[1])].cpu(),
84
+ k[int(self.kpts_to_check[2])].cpu(),
85
+ )
86
+ self.im0 = self.annotator.draw_specific_points(k, self.kpts_to_check, shape=(640, 640), radius=10)
87
+
88
+ # Check and update pose stages and counts based on angle
89
+ if self.pose_type in {"abworkout", "pullup"}:
90
+ if self.angle[ind] > self.poseup_angle:
91
+ self.stage[ind] = "down"
92
+ if self.angle[ind] < self.posedown_angle and self.stage[ind] == "down":
93
+ self.stage[ind] = "up"
94
+ self.count[ind] += 1
95
+
96
+ elif self.pose_type == "pushup":
97
+ if self.angle[ind] > self.poseup_angle:
98
+ self.stage[ind] = "up"
99
+ if self.angle[ind] < self.posedown_angle and self.stage[ind] == "up":
100
+ self.stage[ind] = "down"
101
+ self.count[ind] += 1
102
+
103
+ self.annotator.plot_angle_and_count_and_stage(
104
+ angle_text=self.angle[ind],
105
+ count_text=self.count[ind],
106
+ stage_text=self.stage[ind],
107
+ center_kpt=k[int(self.kpts_to_check[1])],
108
+ )
109
+
110
+ # Draw keypoints
111
+ self.annotator.kpts(k, shape=(640, 640), radius=1, kpt_line=True)
112
+
113
+ # Display the image if environment supports it and view_img is True
114
+ if self.env_check and self.view_img:
115
+ cv2.imshow("Ultralytics YOLOv8 AI GYM", self.im0)
116
+ if cv2.waitKey(1) & 0xFF == ord("q"):
117
+ return
118
+
119
+ return self.im0
120
+
121
+
122
+ if __name__ == "__main__":
123
+ kpts_to_check = [0, 1, 2] # example keypoints
124
+ aigym = AIGym(kpts_to_check)