ultralytics 8.2.17__tar.gz → 8.2.18__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 (221) hide show
  1. {ultralytics-8.2.17 → ultralytics-8.2.18}/PKG-INFO +1 -1
  2. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/__init__.py +1 -1
  3. ultralytics-8.2.18/ultralytics/solutions/__init__.py +19 -0
  4. ultralytics-8.2.18/ultralytics/solutions/ai_gym.py +124 -0
  5. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/solutions/distance_calculation.py +66 -71
  6. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/solutions/heatmap.py +95 -133
  7. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/solutions/object_counter.py +62 -82
  8. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/solutions/parking_management.py +22 -9
  9. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/solutions/queue_management.py +63 -82
  10. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/solutions/speed_estimation.py +50 -68
  11. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/plotting.py +40 -42
  12. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics.egg-info/PKG-INFO +1 -1
  13. ultralytics-8.2.17/ultralytics/solutions/ai_gym.py +0 -150
  14. ultralytics-8.2.17/ultralytics/trackers/utils/__init__.py +0 -1
  15. {ultralytics-8.2.17 → ultralytics-8.2.18}/LICENSE +0 -0
  16. {ultralytics-8.2.17 → ultralytics-8.2.18}/README.md +0 -0
  17. {ultralytics-8.2.17 → ultralytics-8.2.18}/pyproject.toml +0 -0
  18. {ultralytics-8.2.17 → ultralytics-8.2.18}/setup.cfg +0 -0
  19. {ultralytics-8.2.17 → ultralytics-8.2.18}/tests/test_cli.py +0 -0
  20. {ultralytics-8.2.17 → ultralytics-8.2.18}/tests/test_cuda.py +0 -0
  21. {ultralytics-8.2.17 → ultralytics-8.2.18}/tests/test_engine.py +0 -0
  22. {ultralytics-8.2.17 → ultralytics-8.2.18}/tests/test_explorer.py +0 -0
  23. {ultralytics-8.2.17 → ultralytics-8.2.18}/tests/test_exports.py +0 -0
  24. {ultralytics-8.2.17 → ultralytics-8.2.18}/tests/test_integrations.py +0 -0
  25. {ultralytics-8.2.17 → ultralytics-8.2.18}/tests/test_python.py +0 -0
  26. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/assets/bus.jpg +0 -0
  27. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/assets/zidane.jpg +0 -0
  28. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/__init__.py +0 -0
  29. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  30. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  31. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  32. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  33. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  34. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  35. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  36. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  37. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  38. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  39. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  40. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  41. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  42. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/coco.yaml +0 -0
  43. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  44. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  45. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  46. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  47. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  48. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  49. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  50. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  51. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  52. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  53. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  54. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/datasets/xView.yaml +0 -0
  55. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/default.yaml +0 -0
  56. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  57. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  58. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  59. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  60. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  61. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  62. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  63. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  64. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  65. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  66. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  67. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  68. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  69. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  70. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  71. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  72. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  73. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  74. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  75. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  76. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  77. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  78. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  79. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  80. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  81. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  82. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  83. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  84. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  85. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  86. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  87. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  88. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  89. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/__init__.py +0 -0
  90. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/annotator.py +0 -0
  91. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/augment.py +0 -0
  92. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/base.py +0 -0
  93. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/build.py +0 -0
  94. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/converter.py +0 -0
  95. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/dataset.py +0 -0
  96. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/explorer/__init__.py +0 -0
  97. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/explorer/explorer.py +0 -0
  98. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/explorer/gui/__init__.py +0 -0
  99. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/explorer/gui/dash.py +0 -0
  100. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/explorer/utils.py +0 -0
  101. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/loaders.py +0 -0
  102. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/split_dota.py +0 -0
  103. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/data/utils.py +0 -0
  104. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/engine/__init__.py +0 -0
  105. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/engine/exporter.py +0 -0
  106. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/engine/model.py +0 -0
  107. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/engine/predictor.py +0 -0
  108. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/engine/results.py +0 -0
  109. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/engine/trainer.py +0 -0
  110. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/engine/tuner.py +0 -0
  111. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/engine/validator.py +0 -0
  112. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/hub/__init__.py +0 -0
  113. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/hub/auth.py +0 -0
  114. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/hub/session.py +0 -0
  115. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/hub/utils.py +0 -0
  116. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/__init__.py +0 -0
  117. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/fastsam/__init__.py +0 -0
  118. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/fastsam/model.py +0 -0
  119. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/fastsam/predict.py +0 -0
  120. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/fastsam/prompt.py +0 -0
  121. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/fastsam/utils.py +0 -0
  122. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/fastsam/val.py +0 -0
  123. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/nas/__init__.py +0 -0
  124. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/nas/model.py +0 -0
  125. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/nas/predict.py +0 -0
  126. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/nas/val.py +0 -0
  127. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/rtdetr/__init__.py +0 -0
  128. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/rtdetr/model.py +0 -0
  129. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/rtdetr/predict.py +0 -0
  130. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/rtdetr/train.py +0 -0
  131. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/rtdetr/val.py +0 -0
  132. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/sam/__init__.py +0 -0
  133. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/sam/amg.py +0 -0
  134. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/sam/build.py +0 -0
  135. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/sam/model.py +0 -0
  136. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/sam/modules/__init__.py +0 -0
  137. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/sam/modules/decoders.py +0 -0
  138. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/sam/modules/encoders.py +0 -0
  139. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/sam/modules/sam.py +0 -0
  140. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  141. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/sam/modules/transformer.py +0 -0
  142. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/sam/predict.py +0 -0
  143. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/utils/__init__.py +0 -0
  144. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/utils/loss.py +0 -0
  145. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/utils/ops.py +0 -0
  146. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/__init__.py +0 -0
  147. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/classify/__init__.py +0 -0
  148. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/classify/predict.py +0 -0
  149. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/classify/train.py +0 -0
  150. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/classify/val.py +0 -0
  151. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/detect/__init__.py +0 -0
  152. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/detect/predict.py +0 -0
  153. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/detect/train.py +0 -0
  154. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/detect/val.py +0 -0
  155. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/model.py +0 -0
  156. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/obb/__init__.py +0 -0
  157. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/obb/predict.py +0 -0
  158. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/obb/train.py +0 -0
  159. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/obb/val.py +0 -0
  160. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/pose/__init__.py +0 -0
  161. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/pose/predict.py +0 -0
  162. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/pose/train.py +0 -0
  163. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/pose/val.py +0 -0
  164. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/segment/__init__.py +0 -0
  165. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/segment/predict.py +0 -0
  166. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/segment/train.py +0 -0
  167. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/segment/val.py +0 -0
  168. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/world/__init__.py +0 -0
  169. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/world/train.py +0 -0
  170. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/models/yolo/world/train_world.py +0 -0
  171. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/nn/__init__.py +0 -0
  172. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/nn/autobackend.py +0 -0
  173. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/nn/modules/__init__.py +0 -0
  174. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/nn/modules/block.py +0 -0
  175. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/nn/modules/conv.py +0 -0
  176. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/nn/modules/head.py +0 -0
  177. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/nn/modules/transformer.py +0 -0
  178. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/nn/modules/utils.py +0 -0
  179. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/nn/tasks.py +0 -0
  180. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/trackers/__init__.py +0 -0
  181. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/trackers/basetrack.py +0 -0
  182. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/trackers/bot_sort.py +0 -0
  183. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/trackers/byte_tracker.py +0 -0
  184. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/trackers/track.py +0 -0
  185. {ultralytics-8.2.17/ultralytics/solutions → ultralytics-8.2.18/ultralytics/trackers/utils}/__init__.py +0 -0
  186. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/trackers/utils/gmc.py +0 -0
  187. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  188. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/trackers/utils/matching.py +0 -0
  189. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/__init__.py +0 -0
  190. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/autobatch.py +0 -0
  191. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/benchmarks.py +0 -0
  192. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/callbacks/__init__.py +0 -0
  193. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/callbacks/base.py +0 -0
  194. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/callbacks/clearml.py +0 -0
  195. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/callbacks/comet.py +0 -0
  196. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/callbacks/dvc.py +0 -0
  197. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/callbacks/hub.py +0 -0
  198. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/callbacks/mlflow.py +0 -0
  199. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/callbacks/neptune.py +0 -0
  200. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/callbacks/raytune.py +0 -0
  201. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  202. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/callbacks/wb.py +0 -0
  203. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/checks.py +0 -0
  204. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/dist.py +0 -0
  205. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/downloads.py +0 -0
  206. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/errors.py +0 -0
  207. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/files.py +0 -0
  208. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/instance.py +0 -0
  209. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/loss.py +0 -0
  210. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/metrics.py +0 -0
  211. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/ops.py +0 -0
  212. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/patches.py +0 -0
  213. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/tal.py +0 -0
  214. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/torch_utils.py +0 -0
  215. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/triton.py +0 -0
  216. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics/utils/tuner.py +0 -0
  217. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics.egg-info/SOURCES.txt +0 -0
  218. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics.egg-info/dependency_links.txt +0 -0
  219. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics.egg-info/entry_points.txt +0 -0
  220. {ultralytics-8.2.17 → ultralytics-8.2.18}/ultralytics.egg-info/requires.txt +0 -0
  221. {ultralytics-8.2.17 → ultralytics-8.2.18}/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.18
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
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.17"
3
+ __version__ = "8.2.18"
4
4
 
5
5
  from ultralytics.data.explorer.explorer import Explorer
6
6
  from ultralytics.models import RTDETR, SAM, YOLO, YOLOWorld
@@ -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)
@@ -9,94 +9,78 @@ from ultralytics.utils.plotting import Annotator, colors
9
9
 
10
10
 
11
11
  class DistanceCalculation:
12
- """A class to calculate distance between two objects in real-time video stream based on their tracks."""
12
+ """A class to calculate distance between two objects in a real-time video stream based on their tracks."""
13
13
 
14
- def __init__(self):
15
- """Initializes the distance calculation class with default values for Visual, Image, track and distance
16
- parameters.
14
+ def __init__(
15
+ self,
16
+ names,
17
+ pixels_per_meter=10,
18
+ view_img=False,
19
+ line_thickness=2,
20
+ line_color=(255, 255, 0),
21
+ centroid_color=(255, 0, 255),
22
+ ):
17
23
  """
24
+ Initializes the DistanceCalculation class with the given parameters.
18
25
 
19
- # Visual & im0 information
26
+ Args:
27
+ names (dict): Dictionary mapping class indices to class names.
28
+ pixels_per_meter (int, optional): Conversion factor from pixels to meters. Defaults to 10.
29
+ view_img (bool, optional): Flag to indicate if the video stream should be displayed. Defaults to False.
30
+ line_thickness (int, optional): Thickness of the lines drawn on the image. Defaults to 2.
31
+ line_color (tuple, optional): Color of the lines drawn on the image (BGR format). Defaults to (255, 255, 0).
32
+ centroid_color (tuple, optional): Color of the centroids drawn (BGR format). Defaults to (255, 0, 255).
33
+ """
34
+ # Visual & image information
20
35
  self.im0 = None
21
36
  self.annotator = None
22
- self.view_img = False
23
- self.line_color = (255, 255, 0)
24
- self.centroid_color = (255, 0, 255)
37
+ self.view_img = view_img
38
+ self.line_color = line_color
39
+ self.centroid_color = centroid_color
25
40
 
26
- # Predict/track information
41
+ # Prediction & tracking information
27
42
  self.clss = None
28
- self.names = None
43
+ self.names = names
29
44
  self.boxes = None
30
- self.line_thickness = 2
45
+ self.line_thickness = line_thickness
31
46
  self.trk_ids = None
32
47
 
33
48
  # Distance calculation information
34
49
  self.centroids = []
35
- self.pixel_per_meter = 10
50
+ self.pixel_per_meter = pixels_per_meter
36
51
 
37
- # Mouse event
52
+ # Mouse event information
38
53
  self.left_mouse_count = 0
39
54
  self.selected_boxes = {}
40
55
 
41
- # Check if environment support imshow
56
+ # Check if environment supports imshow
42
57
  self.env_check = check_imshow(warn=True)
43
58
 
44
- def set_args(
45
- self,
46
- names,
47
- pixels_per_meter=10,
48
- view_img=False,
49
- line_thickness=2,
50
- line_color=(255, 255, 0),
51
- centroid_color=(255, 0, 255),
52
- ):
53
- """
54
- Configures the distance calculation and display parameters.
55
-
56
- Args:
57
- names (dict): object detection classes names
58
- pixels_per_meter (int): Number of pixels in meter
59
- view_img (bool): Flag indicating frame display
60
- line_thickness (int): Line thickness for bounding boxes.
61
- line_color (RGB): color of centroids line
62
- centroid_color (RGB): colors of bbox centroids
63
- """
64
- self.names = names
65
- self.pixel_per_meter = pixels_per_meter
66
- self.view_img = view_img
67
- self.line_thickness = line_thickness
68
- self.line_color = line_color
69
- self.centroid_color = centroid_color
70
-
71
59
  def mouse_event_for_distance(self, event, x, y, flags, param):
72
60
  """
73
- This function is designed to move region with mouse events in a real-time video stream.
61
+ Handles mouse events to select regions in a real-time video stream.
74
62
 
75
63
  Args:
76
- event (int): The type of mouse event (e.g., cv2.EVENT_MOUSEMOVE, cv2.EVENT_LBUTTONDOWN, etc.).
77
- x (int): The x-coordinate of the mouse pointer.
78
- y (int): The y-coordinate of the mouse pointer.
79
- flags (int): Any flags associated with the event (e.g., cv2.EVENT_FLAG_CTRLKEY,
80
- cv2.EVENT_FLAG_SHIFTKEY, etc.).
81
- param (dict): Additional parameters you may want to pass to the function.
64
+ event (int): Type of mouse event (e.g., cv2.EVENT_MOUSEMOVE, cv2.EVENT_LBUTTONDOWN, etc.).
65
+ x (int): X-coordinate of the mouse pointer.
66
+ y (int): Y-coordinate of the mouse pointer.
67
+ flags (int): Flags associated with the event (e.g., cv2.EVENT_FLAG_CTRLKEY, cv2.EVENT_FLAG_SHIFTKEY, etc.).
68
+ param (dict): Additional parameters passed to the function.
82
69
  """
83
- global selected_boxes
84
- global left_mouse_count
85
70
  if event == cv2.EVENT_LBUTTONDOWN:
86
71
  self.left_mouse_count += 1
87
72
  if self.left_mouse_count <= 2:
88
73
  for box, track_id in zip(self.boxes, self.trk_ids):
89
74
  if box[0] < x < box[2] and box[1] < y < box[3] and track_id not in self.selected_boxes:
90
- self.selected_boxes[track_id] = []
91
75
  self.selected_boxes[track_id] = box
92
76
 
93
- if event == cv2.EVENT_RBUTTONDOWN:
77
+ elif event == cv2.EVENT_RBUTTONDOWN:
94
78
  self.selected_boxes = {}
95
79
  self.left_mouse_count = 0
96
80
 
97
81
  def extract_tracks(self, tracks):
98
82
  """
99
- Extracts results from the provided data.
83
+ Extracts tracking results from the provided data.
100
84
 
101
85
  Args:
102
86
  tracks (list): List of tracks obtained from the object tracking process.
@@ -105,55 +89,65 @@ class DistanceCalculation:
105
89
  self.clss = tracks[0].boxes.cls.cpu().tolist()
106
90
  self.trk_ids = tracks[0].boxes.id.int().cpu().tolist()
107
91
 
108
- def calculate_centroid(self, box):
92
+ @staticmethod
93
+ def calculate_centroid(box):
109
94
  """
110
- Calculate the centroid of bounding box.
95
+ Calculates the centroid of a bounding box.
111
96
 
112
97
  Args:
113
- box (list): Bounding box data
98
+ box (list): Bounding box coordinates [x1, y1, x2, y2].
99
+
100
+ Returns:
101
+ (tuple): Centroid coordinates (x, y).
114
102
  """
115
103
  return int((box[0] + box[2]) // 2), int((box[1] + box[3]) // 2)
116
104
 
117
105
  def calculate_distance(self, centroid1, centroid2):
118
106
  """
119
- Calculate distance between two centroids.
107
+ Calculates the distance between two centroids.
120
108
 
121
109
  Args:
122
- centroid1 (point): First bounding box data
123
- centroid2 (point): Second bounding box data
110
+ centroid1 (tuple): Coordinates of the first centroid (x, y).
111
+ centroid2 (tuple): Coordinates of the second centroid (x, y).
112
+
113
+ Returns:
114
+ (tuple): Distance in meters and millimeters.
124
115
  """
125
116
  pixel_distance = math.sqrt((centroid1[0] - centroid2[0]) ** 2 + (centroid1[1] - centroid2[1]) ** 2)
126
- return pixel_distance / self.pixel_per_meter, (pixel_distance / self.pixel_per_meter) * 1000
117
+ distance_m = pixel_distance / self.pixel_per_meter
118
+ distance_mm = distance_m * 1000
119
+ return distance_m, distance_mm
127
120
 
128
121
  def start_process(self, im0, tracks):
129
122
  """
130
- Calculate distance between two bounding boxes based on tracking data.
123
+ Processes the video frame and calculates the distance between two bounding boxes.
131
124
 
132
125
  Args:
133
- im0 (nd array): Image
126
+ im0 (ndarray): The image frame.
134
127
  tracks (list): List of tracks obtained from the object tracking process.
128
+
129
+ Returns:
130
+ (ndarray): The processed image frame.
135
131
  """
136
132
  self.im0 = im0
137
133
  if tracks[0].boxes.id is None:
138
134
  if self.view_img:
139
135
  self.display_frames()
140
- return
141
- self.extract_tracks(tracks)
136
+ return im0
142
137
 
143
- self.annotator = Annotator(self.im0, line_width=2)
138
+ self.extract_tracks(tracks)
139
+ self.annotator = Annotator(self.im0, line_width=self.line_thickness)
144
140
 
145
141
  for box, cls, track_id in zip(self.boxes, self.clss, self.trk_ids):
146
142
  self.annotator.box_label(box, color=colors(int(cls), True), label=self.names[int(cls)])
147
143
 
148
144
  if len(self.selected_boxes) == 2:
149
- for trk_id, _ in self.selected_boxes.items():
145
+ for trk_id in self.selected_boxes.keys():
150
146
  if trk_id == track_id:
151
147
  self.selected_boxes[track_id] = box
152
148
 
153
149
  if len(self.selected_boxes) == 2:
154
- for trk_id, box in self.selected_boxes.items():
155
- centroid = self.calculate_centroid(self.selected_boxes[trk_id])
156
- self.centroids.append(centroid)
150
+ self.centroids = [self.calculate_centroid(self.selected_boxes[trk_id]) for trk_id in self.selected_boxes]
157
151
 
158
152
  distance_m, distance_mm = self.calculate_distance(self.centroids[0], self.centroids[1])
159
153
  self.annotator.plot_distance_and_line(
@@ -168,7 +162,7 @@ class DistanceCalculation:
168
162
  return im0
169
163
 
170
164
  def display_frames(self):
171
- """Display frame."""
165
+ """Displays the current frame with annotations."""
172
166
  cv2.namedWindow("Ultralytics Distance Estimation")
173
167
  cv2.setMouseCallback("Ultralytics Distance Estimation", self.mouse_event_for_distance)
174
168
  cv2.imshow("Ultralytics Distance Estimation", self.im0)
@@ -178,4 +172,5 @@ class DistanceCalculation:
178
172
 
179
173
 
180
174
  if __name__ == "__main__":
181
- DistanceCalculation()
175
+ names = {0: "person", 1: "car"} # example class names
176
+ distance_calculation = DistanceCalculation(names)