ultralytics 8.3.5__tar.gz → 8.3.6__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 (248) hide show
  1. {ultralytics-8.3.5/ultralytics.egg-info → ultralytics-8.3.6}/PKG-INFO +8 -9
  2. {ultralytics-8.3.5 → ultralytics-8.3.6}/README.md +7 -7
  3. {ultralytics-8.3.5 → ultralytics-8.3.6}/pyproject.toml +0 -1
  4. {ultralytics-8.3.5 → ultralytics-8.3.6}/tests/test_solutions.py +6 -8
  5. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/__init__.py +1 -1
  6. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/solutions/default.yaml +4 -0
  7. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/engine/exporter.py +3 -4
  8. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/engine/trainer.py +4 -4
  9. ultralytics-8.3.6/ultralytics/solutions/ai_gym.py +79 -0
  10. ultralytics-8.3.6/ultralytics/solutions/heatmap.py +93 -0
  11. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/solutions/object_counter.py +19 -17
  12. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/solutions/solutions.py +9 -4
  13. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/__init__.py +47 -46
  14. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/checks.py +36 -20
  15. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/plotting.py +50 -70
  16. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/torch_utils.py +7 -2
  17. {ultralytics-8.3.5 → ultralytics-8.3.6/ultralytics.egg-info}/PKG-INFO +8 -9
  18. ultralytics-8.3.5/ultralytics/solutions/ai_gym.py +0 -127
  19. ultralytics-8.3.5/ultralytics/solutions/heatmap.py +0 -249
  20. {ultralytics-8.3.5 → ultralytics-8.3.6}/LICENSE +0 -0
  21. {ultralytics-8.3.5 → ultralytics-8.3.6}/setup.cfg +0 -0
  22. {ultralytics-8.3.5 → ultralytics-8.3.6}/tests/__init__.py +0 -0
  23. {ultralytics-8.3.5 → ultralytics-8.3.6}/tests/conftest.py +0 -0
  24. {ultralytics-8.3.5 → ultralytics-8.3.6}/tests/test_cli.py +0 -0
  25. {ultralytics-8.3.5 → ultralytics-8.3.6}/tests/test_cuda.py +0 -0
  26. {ultralytics-8.3.5 → ultralytics-8.3.6}/tests/test_engine.py +0 -0
  27. {ultralytics-8.3.5 → ultralytics-8.3.6}/tests/test_explorer.py +0 -0
  28. {ultralytics-8.3.5 → ultralytics-8.3.6}/tests/test_exports.py +0 -0
  29. {ultralytics-8.3.5 → ultralytics-8.3.6}/tests/test_integrations.py +0 -0
  30. {ultralytics-8.3.5 → ultralytics-8.3.6}/tests/test_python.py +0 -0
  31. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/assets/bus.jpg +0 -0
  32. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/assets/zidane.jpg +0 -0
  33. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/__init__.py +0 -0
  34. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  35. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  36. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  37. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  38. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  39. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  40. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  41. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  42. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  43. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  44. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  45. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  46. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  47. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/coco.yaml +0 -0
  48. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  49. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  50. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  51. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  52. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  53. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  54. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  55. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  56. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  57. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  58. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  59. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/signature.yaml +0 -0
  60. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  61. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/datasets/xView.yaml +0 -0
  62. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/default.yaml +0 -0
  63. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  64. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  65. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  66. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  67. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  68. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  69. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  70. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  71. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  72. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  73. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  74. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  75. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  76. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  77. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  78. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  79. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  80. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  81. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  82. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  83. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  84. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  85. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  86. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  87. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  88. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  89. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  90. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  91. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  92. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  93. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  94. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  95. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  96. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  97. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  98. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  99. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  100. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  101. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  102. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  103. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  104. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  105. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  106. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  107. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  108. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  109. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  110. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/__init__.py +0 -0
  111. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/annotator.py +0 -0
  112. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/augment.py +0 -0
  113. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/base.py +0 -0
  114. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/build.py +0 -0
  115. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/converter.py +0 -0
  116. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/dataset.py +0 -0
  117. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/explorer/__init__.py +0 -0
  118. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/explorer/explorer.py +0 -0
  119. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/explorer/gui/__init__.py +0 -0
  120. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/explorer/gui/dash.py +0 -0
  121. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/explorer/utils.py +0 -0
  122. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/loaders.py +0 -0
  123. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/split_dota.py +0 -0
  124. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/data/utils.py +0 -0
  125. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/engine/__init__.py +0 -0
  126. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/engine/model.py +0 -0
  127. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/engine/predictor.py +0 -0
  128. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/engine/results.py +0 -0
  129. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/engine/tuner.py +0 -0
  130. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/engine/validator.py +0 -0
  131. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/hub/__init__.py +0 -0
  132. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/hub/auth.py +0 -0
  133. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/hub/google/__init__.py +0 -0
  134. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/hub/session.py +0 -0
  135. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/hub/utils.py +0 -0
  136. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/__init__.py +0 -0
  137. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/fastsam/__init__.py +0 -0
  138. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/fastsam/model.py +0 -0
  139. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/fastsam/predict.py +0 -0
  140. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/fastsam/utils.py +0 -0
  141. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/fastsam/val.py +0 -0
  142. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/nas/__init__.py +0 -0
  143. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/nas/model.py +0 -0
  144. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/nas/predict.py +0 -0
  145. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/nas/val.py +0 -0
  146. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/rtdetr/__init__.py +0 -0
  147. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/rtdetr/model.py +0 -0
  148. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/rtdetr/predict.py +0 -0
  149. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/rtdetr/train.py +0 -0
  150. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/rtdetr/val.py +0 -0
  151. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/sam/__init__.py +0 -0
  152. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/sam/amg.py +0 -0
  153. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/sam/build.py +0 -0
  154. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/sam/model.py +0 -0
  155. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/sam/modules/__init__.py +0 -0
  156. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/sam/modules/blocks.py +0 -0
  157. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/sam/modules/decoders.py +0 -0
  158. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/sam/modules/encoders.py +0 -0
  159. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  160. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/sam/modules/sam.py +0 -0
  161. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  162. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/sam/modules/transformer.py +0 -0
  163. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/sam/modules/utils.py +0 -0
  164. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/sam/predict.py +0 -0
  165. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/utils/__init__.py +0 -0
  166. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/utils/loss.py +0 -0
  167. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/utils/ops.py +0 -0
  168. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/__init__.py +0 -0
  169. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/classify/__init__.py +0 -0
  170. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/classify/predict.py +0 -0
  171. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/classify/train.py +0 -0
  172. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/classify/val.py +0 -0
  173. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/detect/__init__.py +0 -0
  174. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/detect/predict.py +0 -0
  175. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/detect/train.py +0 -0
  176. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/detect/val.py +0 -0
  177. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/model.py +0 -0
  178. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/obb/__init__.py +0 -0
  179. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/obb/predict.py +0 -0
  180. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/obb/train.py +0 -0
  181. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/obb/val.py +0 -0
  182. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/pose/__init__.py +0 -0
  183. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/pose/predict.py +0 -0
  184. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/pose/train.py +0 -0
  185. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/pose/val.py +0 -0
  186. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/segment/__init__.py +0 -0
  187. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/segment/predict.py +0 -0
  188. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/segment/train.py +0 -0
  189. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/segment/val.py +0 -0
  190. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/world/__init__.py +0 -0
  191. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/world/train.py +0 -0
  192. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/models/yolo/world/train_world.py +0 -0
  193. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/nn/__init__.py +0 -0
  194. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/nn/autobackend.py +0 -0
  195. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/nn/modules/__init__.py +0 -0
  196. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/nn/modules/activation.py +0 -0
  197. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/nn/modules/block.py +0 -0
  198. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/nn/modules/conv.py +0 -0
  199. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/nn/modules/head.py +0 -0
  200. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/nn/modules/transformer.py +0 -0
  201. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/nn/modules/utils.py +0 -0
  202. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/nn/tasks.py +0 -0
  203. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/solutions/__init__.py +0 -0
  204. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/solutions/analytics.py +0 -0
  205. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/solutions/distance_calculation.py +0 -0
  206. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/solutions/parking_management.py +0 -0
  207. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/solutions/queue_management.py +0 -0
  208. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/solutions/speed_estimation.py +0 -0
  209. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/solutions/streamlit_inference.py +0 -0
  210. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/trackers/__init__.py +0 -0
  211. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/trackers/basetrack.py +0 -0
  212. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/trackers/bot_sort.py +0 -0
  213. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/trackers/byte_tracker.py +0 -0
  214. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/trackers/track.py +0 -0
  215. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/trackers/utils/__init__.py +0 -0
  216. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/trackers/utils/gmc.py +0 -0
  217. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  218. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/trackers/utils/matching.py +0 -0
  219. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/autobatch.py +0 -0
  220. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/benchmarks.py +0 -0
  221. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/callbacks/__init__.py +0 -0
  222. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/callbacks/base.py +0 -0
  223. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/callbacks/clearml.py +0 -0
  224. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/callbacks/comet.py +0 -0
  225. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/callbacks/dvc.py +0 -0
  226. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/callbacks/hub.py +0 -0
  227. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/callbacks/mlflow.py +0 -0
  228. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/callbacks/neptune.py +0 -0
  229. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/callbacks/raytune.py +0 -0
  230. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  231. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/callbacks/wb.py +0 -0
  232. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/dist.py +0 -0
  233. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/downloads.py +0 -0
  234. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/errors.py +0 -0
  235. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/files.py +0 -0
  236. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/instance.py +0 -0
  237. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/loss.py +0 -0
  238. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/metrics.py +0 -0
  239. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/ops.py +0 -0
  240. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/patches.py +0 -0
  241. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/tal.py +0 -0
  242. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/triton.py +0 -0
  243. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics/utils/tuner.py +0 -0
  244. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics.egg-info/SOURCES.txt +0 -0
  245. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics.egg-info/dependency_links.txt +0 -0
  246. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics.egg-info/entry_points.txt +0 -0
  247. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics.egg-info/requires.txt +0 -0
  248. {ultralytics-8.3.5 → ultralytics-8.3.6}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,8 +1,7 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.3.5
3
+ Version: 8.3.6
4
4
  Summary: Ultralytics YOLO for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
- Author: Ayush Chaurasia
6
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
7
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
8
7
  License: AGPL-3.0
@@ -99,8 +98,8 @@ Requires-Dist: pycocotools>=2.0.7; extra == "extra"
99
98
  <a href="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml"><img src="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml/badge.svg" alt="Ultralytics CI"></a>
100
99
  <a href="https://zenodo.org/badge/latestdoi/264818686"><img src="https://zenodo.org/badge/264818686.svg" alt="Ultralytics YOLO Citation"></a>
101
100
  <a href="https://hub.docker.com/r/ultralytics/ultralytics"><img src="https://img.shields.io/docker/pulls/ultralytics/ultralytics?logo=docker" alt="Ultralytics Docker Pulls"></a>
102
- <a href="https://ultralytics.com/discord"><img alt="Ultralytics Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
103
- <a href="https://community.ultralytics.com"><img alt="Ultralytics Forums" src="https://img.shields.io/discourse/users?server=https%3A%2F%2Fcommunity.ultralytics.com&logo=discourse&label=Forums&color=blue"></a>
101
+ <a href="https://discord.com/invite/ultralytics"><img alt="Ultralytics Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
102
+ <a href="https://community.ultralytics.com/"><img alt="Ultralytics Forums" src="https://img.shields.io/discourse/users?server=https%3A%2F%2Fcommunity.ultralytics.com&logo=discourse&label=Forums&color=blue"></a>
104
103
  <a href="https://reddit.com/r/ultralytics"><img alt="Ultralytics Reddit" src="https://img.shields.io/reddit/subreddit-subscribers/ultralytics?style=flat&logo=reddit&logoColor=white&label=Reddit&color=blue"></a>
105
104
  <br>
106
105
  <a href="https://console.paperspace.com/github/ultralytics/ultralytics"><img src="https://assets.paperspace.io/img/gradient-badge.svg" alt="Run Ultralytics on Gradient"></a>
@@ -111,7 +110,7 @@ Requires-Dist: pycocotools>=2.0.7; extra == "extra"
111
110
 
112
111
  [Ultralytics](https://www.ultralytics.com/) [YOLO11](https://github.com/ultralytics/ultralytics) is a cutting-edge, state-of-the-art (SOTA) model that builds upon the success of previous YOLO versions and introduces new features and improvements to further boost performance and flexibility. YOLO11 is designed to be fast, accurate, and easy to use, making it an excellent choice for a wide range of object detection and tracking, instance segmentation, image classification and pose estimation tasks.
113
112
 
114
- We hope that the resources here will help you get the most out of YOLO. Please browse the Ultralytics <a href="https://docs.ultralytics.com/">Docs</a> for details, raise an issue on <a href="https://github.com/ultralytics/ultralytics/issues/new/choose">GitHub</a> for support, questions, or discussions, become a member of the Ultralytics <a href="https://ultralytics.com/discord">Discord</a>, <a href="https://reddit.com/r/ultralytics">Reddit</a> and <a href="https://community.ultralytics.com">Forums</a>!
113
+ We hope that the resources here will help you get the most out of YOLO. Please browse the Ultralytics <a href="https://docs.ultralytics.com/">Docs</a> for details, raise an issue on <a href="https://github.com/ultralytics/ultralytics/issues/new/choose">GitHub</a> for support, questions, or discussions, become a member of the Ultralytics <a href="https://discord.com/invite/ultralytics">Discord</a>, <a href="https://reddit.com/r/ultralytics">Reddit</a> and <a href="https://community.ultralytics.com/">Forums</a>!
115
114
 
116
115
  To request an Enterprise License please complete the form at [Ultralytics Licensing](https://www.ultralytics.com/license).
117
116
 
@@ -130,7 +129,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
130
129
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
131
130
  <a href="https://ultralytics.com/bilibili"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-bilibili.png" width="2%" alt="Ultralytics BiliBili"></a>
132
131
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
133
- <a href="https://ultralytics.com/discord"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="2%" alt="Ultralytics Discord"></a>
132
+ <a href="https://discord.com/invite/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="2%" alt="Ultralytics Discord"></a>
134
133
  </div>
135
134
  </div>
136
135
 
@@ -299,7 +298,7 @@ See [OBB Docs](https://docs.ultralytics.com/tasks/obb/) for usage examples with
299
298
  Our key integrations with leading AI platforms extend the functionality of Ultralytics' offerings, enhancing tasks like dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with [Roboflow](https://roboflow.com/?ref=ultralytics), ClearML, [Comet](https://bit.ly/yolov8-readme-comet), Neural Magic and [OpenVINO](https://docs.ultralytics.com/integrations/openvino/), can optimize your AI workflow.
300
299
 
301
300
  <br>
302
- <a href="https://ultralytics.com/hub" target="_blank">
301
+ <a href="https://www.ultralytics.com/hub" target="_blank">
303
302
  <img width="100%" src="https://github.com/ultralytics/assets/raw/main/yolov8/banner-integrations.png" alt="Ultralytics active learning integrations"></a>
304
303
  <br>
305
304
  <br>
@@ -326,7 +325,7 @@ Our key integrations with leading AI platforms extend the functionality of Ultra
326
325
 
327
326
  Experience seamless AI with [Ultralytics HUB](https://www.ultralytics.com/hub) ⭐, the all-in-one solution for data visualization, YOLO11 🚀 model training and deployment, without any coding. Transform images into actionable insights and bring your AI visions to life with ease using our cutting-edge platform and user-friendly [Ultralytics App](https://www.ultralytics.com/app-install). Start your journey for **Free** now!
328
327
 
329
- <a href="https://ultralytics.com/hub" target="_blank">
328
+ <a href="https://www.ultralytics.com/hub" target="_blank">
330
329
  <img width="100%" src="https://github.com/ultralytics/assets/raw/main/im/ultralytics-hub.png" alt="Ultralytics HUB preview image"></a>
331
330
 
332
331
  ## <div align="center">Contribute</div>
@@ -363,5 +362,5 @@ For Ultralytics bug reports and feature requests please visit [GitHub Issues](ht
363
362
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
364
363
  <a href="https://ultralytics.com/bilibili"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-bilibili.png" width="3%" alt="Ultralytics BiliBili"></a>
365
364
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
366
- <a href="https://ultralytics.com/discord"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="3%" alt="Ultralytics Discord"></a>
365
+ <a href="https://discord.com/invite/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="3%" alt="Ultralytics Discord"></a>
367
366
  </div>
@@ -10,8 +10,8 @@
10
10
  <a href="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml"><img src="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml/badge.svg" alt="Ultralytics CI"></a>
11
11
  <a href="https://zenodo.org/badge/latestdoi/264818686"><img src="https://zenodo.org/badge/264818686.svg" alt="Ultralytics YOLO Citation"></a>
12
12
  <a href="https://hub.docker.com/r/ultralytics/ultralytics"><img src="https://img.shields.io/docker/pulls/ultralytics/ultralytics?logo=docker" alt="Ultralytics Docker Pulls"></a>
13
- <a href="https://ultralytics.com/discord"><img alt="Ultralytics Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
14
- <a href="https://community.ultralytics.com"><img alt="Ultralytics Forums" src="https://img.shields.io/discourse/users?server=https%3A%2F%2Fcommunity.ultralytics.com&logo=discourse&label=Forums&color=blue"></a>
13
+ <a href="https://discord.com/invite/ultralytics"><img alt="Ultralytics Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
14
+ <a href="https://community.ultralytics.com/"><img alt="Ultralytics Forums" src="https://img.shields.io/discourse/users?server=https%3A%2F%2Fcommunity.ultralytics.com&logo=discourse&label=Forums&color=blue"></a>
15
15
  <a href="https://reddit.com/r/ultralytics"><img alt="Ultralytics Reddit" src="https://img.shields.io/reddit/subreddit-subscribers/ultralytics?style=flat&logo=reddit&logoColor=white&label=Reddit&color=blue"></a>
16
16
  <br>
17
17
  <a href="https://console.paperspace.com/github/ultralytics/ultralytics"><img src="https://assets.paperspace.io/img/gradient-badge.svg" alt="Run Ultralytics on Gradient"></a>
@@ -22,7 +22,7 @@
22
22
 
23
23
  [Ultralytics](https://www.ultralytics.com/) [YOLO11](https://github.com/ultralytics/ultralytics) is a cutting-edge, state-of-the-art (SOTA) model that builds upon the success of previous YOLO versions and introduces new features and improvements to further boost performance and flexibility. YOLO11 is designed to be fast, accurate, and easy to use, making it an excellent choice for a wide range of object detection and tracking, instance segmentation, image classification and pose estimation tasks.
24
24
 
25
- We hope that the resources here will help you get the most out of YOLO. Please browse the Ultralytics <a href="https://docs.ultralytics.com/">Docs</a> for details, raise an issue on <a href="https://github.com/ultralytics/ultralytics/issues/new/choose">GitHub</a> for support, questions, or discussions, become a member of the Ultralytics <a href="https://ultralytics.com/discord">Discord</a>, <a href="https://reddit.com/r/ultralytics">Reddit</a> and <a href="https://community.ultralytics.com">Forums</a>!
25
+ We hope that the resources here will help you get the most out of YOLO. Please browse the Ultralytics <a href="https://docs.ultralytics.com/">Docs</a> for details, raise an issue on <a href="https://github.com/ultralytics/ultralytics/issues/new/choose">GitHub</a> for support, questions, or discussions, become a member of the Ultralytics <a href="https://discord.com/invite/ultralytics">Discord</a>, <a href="https://reddit.com/r/ultralytics">Reddit</a> and <a href="https://community.ultralytics.com/">Forums</a>!
26
26
 
27
27
  To request an Enterprise License please complete the form at [Ultralytics Licensing](https://www.ultralytics.com/license).
28
28
 
@@ -41,7 +41,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
41
41
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
42
42
  <a href="https://ultralytics.com/bilibili"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-bilibili.png" width="2%" alt="Ultralytics BiliBili"></a>
43
43
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
44
- <a href="https://ultralytics.com/discord"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="2%" alt="Ultralytics Discord"></a>
44
+ <a href="https://discord.com/invite/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="2%" alt="Ultralytics Discord"></a>
45
45
  </div>
46
46
  </div>
47
47
 
@@ -210,7 +210,7 @@ See [OBB Docs](https://docs.ultralytics.com/tasks/obb/) for usage examples with
210
210
  Our key integrations with leading AI platforms extend the functionality of Ultralytics' offerings, enhancing tasks like dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with [Roboflow](https://roboflow.com/?ref=ultralytics), ClearML, [Comet](https://bit.ly/yolov8-readme-comet), Neural Magic and [OpenVINO](https://docs.ultralytics.com/integrations/openvino/), can optimize your AI workflow.
211
211
 
212
212
  <br>
213
- <a href="https://ultralytics.com/hub" target="_blank">
213
+ <a href="https://www.ultralytics.com/hub" target="_blank">
214
214
  <img width="100%" src="https://github.com/ultralytics/assets/raw/main/yolov8/banner-integrations.png" alt="Ultralytics active learning integrations"></a>
215
215
  <br>
216
216
  <br>
@@ -237,7 +237,7 @@ Our key integrations with leading AI platforms extend the functionality of Ultra
237
237
 
238
238
  Experience seamless AI with [Ultralytics HUB](https://www.ultralytics.com/hub) ⭐, the all-in-one solution for data visualization, YOLO11 🚀 model training and deployment, without any coding. Transform images into actionable insights and bring your AI visions to life with ease using our cutting-edge platform and user-friendly [Ultralytics App](https://www.ultralytics.com/app-install). Start your journey for **Free** now!
239
239
 
240
- <a href="https://ultralytics.com/hub" target="_blank">
240
+ <a href="https://www.ultralytics.com/hub" target="_blank">
241
241
  <img width="100%" src="https://github.com/ultralytics/assets/raw/main/im/ultralytics-hub.png" alt="Ultralytics HUB preview image"></a>
242
242
 
243
243
  ## <div align="center">Contribute</div>
@@ -274,5 +274,5 @@ For Ultralytics bug reports and feature requests please visit [GitHub Issues](ht
274
274
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
275
275
  <a href="https://ultralytics.com/bilibili"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-bilibili.png" width="3%" alt="Ultralytics BiliBili"></a>
276
276
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
277
- <a href="https://ultralytics.com/discord"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="3%" alt="Ultralytics Discord"></a>
277
+ <a href="https://discord.com/invite/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="3%" alt="Ultralytics Discord"></a>
278
278
  </div>
@@ -34,7 +34,6 @@ keywords = ["machine-learning", "deep-learning", "computer-vision", "ML", "DL",
34
34
  authors = [
35
35
  { name = "Glenn Jocher", email = "glenn.jocher@ultralytics.com" },
36
36
  { name = "Jing Qiu", email = "jing.qiu@ultralytics.com" },
37
- { name = "Ayush Chaurasia" },
38
37
  ]
39
38
  maintainers = [
40
39
  { name = "Ultralytics", email = "hello@ultralytics.com" },
@@ -19,8 +19,8 @@ def test_major_solutions():
19
19
  cap = cv2.VideoCapture("solutions_ci_demo.mp4")
20
20
  assert cap.isOpened(), "Error reading video file"
21
21
  region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]
22
- # counter = solutions.ObjectCounter(reg_pts=region_points, names=names, view_img=False)
23
- heatmap = solutions.Heatmap(colormap=cv2.COLORMAP_PARULA, names=names, view_img=False)
22
+ counter = solutions.ObjectCounter(region=region_points, model="yolo11n.pt", show=False)
23
+ heatmap = solutions.Heatmap(colormap=cv2.COLORMAP_PARULA, model="yolo11n.pt", show=False)
24
24
  speed = solutions.SpeedEstimator(reg_pts=region_points, names=names, view_img=False)
25
25
  queue = solutions.QueueManager(names=names, reg_pts=region_points, view_img=False)
26
26
  while cap.isOpened():
@@ -29,8 +29,8 @@ def test_major_solutions():
29
29
  break
30
30
  original_im0 = im0.copy()
31
31
  tracks = model.track(im0, persist=True, show=False)
32
- # _ = counter.start_counting(original_im0.copy(), tracks)
33
- _ = heatmap.generate_heatmap(original_im0.copy(), tracks)
32
+ _ = counter.count(original_im0.copy())
33
+ _ = heatmap.generate_heatmap(original_im0.copy())
34
34
  _ = speed.estimate_speed(original_im0.copy(), tracks)
35
35
  _ = queue.process_queue(original_im0.copy(), tracks)
36
36
  cap.release()
@@ -41,16 +41,14 @@ def test_major_solutions():
41
41
  def test_aigym():
42
42
  """Test the workouts monitoring solution."""
43
43
  safe_download(url=WORKOUTS_SOLUTION_DEMO)
44
- model = YOLO("yolo11n-pose.pt")
45
44
  cap = cv2.VideoCapture("solution_ci_pose_demo.mp4")
46
45
  assert cap.isOpened(), "Error reading video file"
47
- gym_object = solutions.AIGym(line_thickness=2, pose_type="squat", kpts_to_check=[5, 11, 13])
46
+ gym = solutions.AIGym(line_width=2, kpts=[5, 11, 13])
48
47
  while cap.isOpened():
49
48
  success, im0 = cap.read()
50
49
  if not success:
51
50
  break
52
- results = model.track(im0, verbose=False)
53
- _ = gym_object.start_counting(im0, results)
51
+ _ = gym.monitor(im0)
54
52
  cap.release()
55
53
  cv2.destroyAllWindows()
56
54
 
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.3.5"
3
+ __version__ = "8.3.6"
4
4
 
5
5
  import os
6
6
 
@@ -10,3 +10,7 @@ show: True # Flag to control whether to display output image or not
10
10
  show_in: True # Flag to display objects moving *into* the defined region
11
11
  show_out: True # Flag to display objects moving *out of* the defined region
12
12
  classes: # To count specific classes
13
+ up_angle: 145.0 # Workouts up_angle for counts, 145.0 is default value
14
+ down_angle: 90 # Workouts down_angle for counts, 90 is default value
15
+ kpts: [6, 8, 10] # Keypoints for workouts monitoring
16
+ colormap: # Colormap for heatmap
@@ -183,11 +183,10 @@ class Exporter:
183
183
 
184
184
  # Get the closest match if format is invalid
185
185
  matches = difflib.get_close_matches(fmt, fmts, n=1, cutoff=0.6) # 60% similarity required to match
186
- if matches:
187
- LOGGER.warning(f"WARNING ⚠️ Invalid export format='{fmt}', updating to format='{matches[0]}'")
188
- fmt = matches[0]
189
- else:
186
+ if not matches:
190
187
  raise ValueError(f"Invalid export format='{fmt}'. Valid formats are {fmts}")
188
+ LOGGER.warning(f"WARNING ⚠️ Invalid export format='{fmt}', updating to format='{matches[0]}'")
189
+ fmt = matches[0]
191
190
  flags = [x == fmt for x in fmts]
192
191
  if sum(flags) != 1:
193
192
  raise ValueError(f"Invalid export format='{fmt}'. Valid formats are {fmts}")
@@ -469,11 +469,11 @@ class BaseTrainer:
469
469
 
470
470
  if RANK in {-1, 0}:
471
471
  # Do final val with best.pt
472
- LOGGER.info(
473
- f"\n{epoch - self.start_epoch + 1} epochs completed in "
474
- f"{(time.time() - self.train_time_start) / 3600:.3f} hours."
475
- )
472
+ epochs = epoch - self.start_epoch + 1 # total training epochs
473
+ seconds = time.time() - self.train_time_start # total training seconds
474
+ LOGGER.info(f"\n{epochs} epochs completed in {seconds / 3600:.3f} hours.")
476
475
  self.final_eval()
476
+ self.validator.metrics.training = {"epochs": epochs, "seconds": seconds} # add training speed
477
477
  if self.args.plots:
478
478
  self.plot_metrics()
479
479
  self.run_callbacks("on_train_end")
@@ -0,0 +1,79 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+
3
+ from ultralytics.solutions.solutions import BaseSolution # Import a parent class
4
+ from ultralytics.utils.plotting import Annotator
5
+
6
+
7
+ class AIGym(BaseSolution):
8
+ """A class to manage the gym steps of people in a real-time video stream based on their poses."""
9
+
10
+ def __init__(self, **kwargs):
11
+ """Initialization function for AiGYM class, a child class of BaseSolution class, can be used for workouts
12
+ monitoring.
13
+ """
14
+ # Check if the model name ends with '-pose'
15
+ if "model" in kwargs and "-pose" not in kwargs["model"]:
16
+ kwargs["model"] = "yolo11n-pose.pt"
17
+ elif "model" not in kwargs:
18
+ kwargs["model"] = "yolo11n-pose.pt"
19
+
20
+ super().__init__(**kwargs)
21
+ self.count = [] # List for counts, necessary where there are multiple objects in frame
22
+ self.angle = [] # List for angle, necessary where there are multiple objects in frame
23
+ self.stage = [] # List for stage, necessary where there are multiple objects in frame
24
+
25
+ # Extract details from CFG single time for usage later
26
+ self.initial_stage = None
27
+ self.up_angle = float(self.CFG["up_angle"]) # Pose up predefined angle to consider up pose
28
+ self.down_angle = float(self.CFG["down_angle"]) # Pose down predefined angle to consider down pose
29
+ self.kpts = self.CFG["kpts"] # User selected kpts of workouts storage for further usage
30
+ self.lw = self.CFG["line_width"] # Store line_width for usage
31
+
32
+ def monitor(self, im0):
33
+ """
34
+ Monitor the workouts using Ultralytics YOLOv8 Pose Model: https://docs.ultralytics.com/tasks/pose/.
35
+
36
+ Args:
37
+ im0 (ndarray): The input image that will be used for processing
38
+ Returns
39
+ im0 (ndarray): The processed image for more usage
40
+ """
41
+ # Extract tracks
42
+ tracks = self.model.track(source=im0, persist=True, classes=self.CFG["classes"])[0]
43
+
44
+ if tracks.boxes.id is not None:
45
+ # Extract and check keypoints
46
+ if len(tracks) > len(self.count):
47
+ new_human = len(tracks) - len(self.count)
48
+ self.angle += [0] * new_human
49
+ self.count += [0] * new_human
50
+ self.stage += ["-"] * new_human
51
+
52
+ # Initialize annotator
53
+ self.annotator = Annotator(im0, line_width=self.lw)
54
+
55
+ # Enumerate over keypoints
56
+ for ind, k in enumerate(reversed(tracks.keypoints.data)):
57
+ # Get keypoints and estimate the angle
58
+ kpts = [k[int(self.kpts[i])].cpu() for i in range(3)]
59
+ self.angle[ind] = self.annotator.estimate_pose_angle(*kpts)
60
+ im0 = self.annotator.draw_specific_points(k, self.kpts, radius=self.lw * 3)
61
+
62
+ # Determine stage and count logic based on angle thresholds
63
+ if self.angle[ind] < self.down_angle:
64
+ if self.stage[ind] == "up":
65
+ self.count[ind] += 1
66
+ self.stage[ind] = "down"
67
+ elif self.angle[ind] > self.up_angle:
68
+ self.stage[ind] = "up"
69
+
70
+ # Display angle, count, and stage text
71
+ self.annotator.plot_angle_and_count_and_stage(
72
+ angle_text=self.angle[ind], # angle text for display
73
+ count_text=self.count[ind], # count text for workouts
74
+ stage_text=self.stage[ind], # stage position text
75
+ center_kpt=k[int(self.kpts[1])], # center keypoint for display
76
+ )
77
+
78
+ self.display_output(im0) # Display output image, if environment support display
79
+ return im0 # return an image for writing or further usage
@@ -0,0 +1,93 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+
3
+ import cv2
4
+ import numpy as np
5
+
6
+ from ultralytics.solutions.object_counter import ObjectCounter # Import object counter class
7
+ from ultralytics.utils.plotting import Annotator
8
+
9
+
10
+ class Heatmap(ObjectCounter):
11
+ """A class to draw heatmaps in real-time video stream based on their tracks."""
12
+
13
+ def __init__(self, **kwargs):
14
+ """Initializes function for heatmap class with default values."""
15
+ super().__init__(**kwargs)
16
+
17
+ self.initialized = False # bool variable for heatmap initialization
18
+ if self.region is not None: # check if user provided the region coordinates
19
+ self.initialize_region()
20
+
21
+ # store colormap
22
+ self.colormap = cv2.COLORMAP_PARULA if self.CFG["colormap"] is None else self.CFG["colormap"]
23
+
24
+ def heatmap_effect(self, box):
25
+ """
26
+ Efficient calculation of heatmap area and effect location for applying colormap.
27
+
28
+ Args:
29
+ box (list): Bounding Box coordinates data [x0, y0, x1, y1]
30
+ """
31
+ x0, y0, x1, y1 = map(int, box)
32
+ radius_squared = (min(x1 - x0, y1 - y0) // 2) ** 2
33
+
34
+ # Create a meshgrid with region of interest (ROI) for vectorized distance calculations
35
+ xv, yv = np.meshgrid(np.arange(x0, x1), np.arange(y0, y1))
36
+
37
+ # Calculate squared distances from the center
38
+ dist_squared = (xv - ((x0 + x1) // 2)) ** 2 + (yv - ((y0 + y1) // 2)) ** 2
39
+
40
+ # Create a mask of points within the radius
41
+ within_radius = dist_squared <= radius_squared
42
+
43
+ # Update only the values within the bounding box in a single vectorized operation
44
+ self.heatmap[y0:y1, x0:x1][within_radius] += 2
45
+
46
+ def generate_heatmap(self, im0):
47
+ """
48
+ Generate heatmap for each frame using Ultralytics.
49
+
50
+ Args:
51
+ im0 (ndarray): Input image array for processing
52
+ Returns:
53
+ im0 (ndarray): Processed image for further usage
54
+ """
55
+ self.heatmap = np.zeros_like(im0, dtype=np.float32) * 0.99 if not self.initialized else self.heatmap
56
+ self.initialized = True # Initialize heatmap only once
57
+
58
+ self.annotator = Annotator(im0, line_width=self.line_width) # Initialize annotator
59
+ self.extract_tracks(im0) # Extract tracks
60
+
61
+ # Iterate over bounding boxes, track ids and classes index
62
+ for box, track_id, cls in zip(self.boxes, self.track_ids, self.clss):
63
+ # Draw bounding box and counting region
64
+ self.heatmap_effect(box)
65
+
66
+ if self.region is not None:
67
+ self.annotator.draw_region(reg_pts=self.region, color=(104, 0, 123), thickness=self.line_width * 2)
68
+ self.store_tracking_history(track_id, box) # Store track history
69
+ self.store_classwise_counts(cls) # store classwise counts in dict
70
+
71
+ # Store tracking previous position and perform object counting
72
+ prev_position = self.track_history[track_id][-2] if len(self.track_history[track_id]) > 1 else None
73
+ self.count_objects(self.track_line, box, track_id, prev_position, cls) # Perform object counting
74
+
75
+ self.display_counts(im0) if self.region is not None else None # Display the counts on the frame
76
+
77
+ # Normalize, apply colormap to heatmap and combine with original image
78
+ im0 = (
79
+ im0
80
+ if self.track_data.id is None
81
+ else cv2.addWeighted(
82
+ im0,
83
+ 0.5,
84
+ cv2.applyColorMap(
85
+ cv2.normalize(self.heatmap, None, 0, 255, cv2.NORM_MINMAX).astype(np.uint8), self.colormap
86
+ ),
87
+ 0.5,
88
+ 0,
89
+ )
90
+ )
91
+
92
+ self.display_output(im0) # display output with base class function
93
+ return im0 # return output image for more usage
@@ -19,8 +19,7 @@ class ObjectCounter(BaseSolution):
19
19
  self.out_count = 0 # Counter for objects moving outward
20
20
  self.counted_ids = [] # List of IDs of objects that have been counted
21
21
  self.classwise_counts = {} # Dictionary for counts, categorized by object class
22
-
23
- self.initialize_region() # Setup region and counting areas
22
+ self.region_initialized = False # Bool variable for region initialization
24
23
 
25
24
  self.show_in = self.CFG["show_in"]
26
25
  self.show_out = self.CFG["show_out"]
@@ -99,6 +98,10 @@ class ObjectCounter(BaseSolution):
99
98
  Returns
100
99
  im0 (ndarray): The processed image for more usage
101
100
  """
101
+ if not self.region_initialized:
102
+ self.initialize_region()
103
+ self.region_initialized = True
104
+
102
105
  self.annotator = Annotator(im0, line_width=self.line_width) # Initialize annotator
103
106
  self.extract_tracks(im0) # Extract tracks
104
107
 
@@ -107,21 +110,20 @@ class ObjectCounter(BaseSolution):
107
110
  ) # Draw region
108
111
 
109
112
  # Iterate over bounding boxes, track ids and classes index
110
- if self.track_data is not None and self.track_data.id is not None:
111
- for box, track_id, cls in zip(self.boxes, self.track_ids, self.clss):
112
- # Draw bounding box and counting region
113
- self.annotator.box_label(box, label=self.names[cls], color=colors(track_id, True))
114
- self.store_tracking_history(track_id, box) # Store track history
115
- self.store_classwise_counts(cls) # store classwise counts in dict
116
-
117
- # Draw centroid of objects
118
- self.annotator.draw_centroid_and_tracks(
119
- self.track_line, color=colors(int(track_id), True), track_thickness=self.line_width
120
- )
121
-
122
- # store previous position of track for object counting
123
- prev_position = self.track_history[track_id][-2] if len(self.track_history[track_id]) > 1 else None
124
- self.count_objects(self.track_line, box, track_id, prev_position, cls) # Perform object counting
113
+ for box, track_id, cls in zip(self.boxes, self.track_ids, self.clss):
114
+ # Draw bounding box and counting region
115
+ self.annotator.box_label(box, label=self.names[cls], color=colors(track_id, True))
116
+ self.store_tracking_history(track_id, box) # Store track history
117
+ self.store_classwise_counts(cls) # store classwise counts in dict
118
+
119
+ # Draw centroid of objects
120
+ self.annotator.draw_centroid_and_tracks(
121
+ self.track_line, color=colors(int(track_id), True), track_thickness=self.line_width
122
+ )
123
+
124
+ # store previous position of track for object counting
125
+ prev_position = self.track_history[track_id][-2] if len(self.track_history[track_id]) > 1 else None
126
+ self.count_objects(self.track_line, box, track_id, prev_position, cls) # Perform object counting
125
127
 
126
128
  self.display_counts(im0) # Display the counts on the frame
127
129
  self.display_output(im0) # display output with base class function
@@ -4,11 +4,13 @@ from collections import defaultdict
4
4
  from pathlib import Path
5
5
 
6
6
  import cv2
7
- from shapely.geometry import LineString, Polygon
8
7
 
9
8
  from ultralytics import YOLO
10
- from ultralytics.utils import yaml_load
11
- from ultralytics.utils.checks import check_imshow
9
+ from ultralytics.utils import LOGGER, yaml_load
10
+ from ultralytics.utils.checks import check_imshow, check_requirements
11
+
12
+ check_requirements("shapely>=2.0.0")
13
+ from shapely.geometry import LineString, Polygon
12
14
 
13
15
  DEFAULT_SOL_CFG_PATH = Path(__file__).resolve().parents[1] / "cfg/solutions/default.yaml"
14
16
 
@@ -25,7 +27,7 @@ class BaseSolution:
25
27
  # Load config and update with args
26
28
  self.CFG = yaml_load(DEFAULT_SOL_CFG_PATH)
27
29
  self.CFG.update(kwargs)
28
- print("Ultralytics Solutions: ✅", self.CFG)
30
+ LOGGER.info(f"Ultralytics Solutions: ✅ {self.CFG}")
29
31
 
30
32
  self.region = self.CFG["region"] # Store region data for other classes usage
31
33
  self.line_width = self.CFG["line_width"] # Store line_width for usage
@@ -54,6 +56,9 @@ class BaseSolution:
54
56
  self.boxes = self.track_data.xyxy.cpu()
55
57
  self.clss = self.track_data.cls.cpu().tolist()
56
58
  self.track_ids = self.track_data.id.int().cpu().tolist()
59
+ else:
60
+ LOGGER.warning("WARNING ⚠️ no tracks found!")
61
+ self.boxes, self.clss, self.track_ids = [], [], []
57
62
 
58
63
  def store_tracking_history(self, track_id, box):
59
64
  """
@@ -989,55 +989,56 @@ def set_sentry():
989
989
  Additionally, the function sets custom tags and user information for Sentry events.
990
990
  """
991
991
  if (
992
- SETTINGS["sync"]
993
- and RANK in {-1, 0}
994
- and Path(ARGV[0]).name == "yolo"
995
- and not TESTS_RUNNING
996
- and ONLINE
997
- and IS_PIP_PACKAGE
998
- and not IS_GIT_DIR
992
+ not SETTINGS["sync"]
993
+ or RANK not in {-1, 0}
994
+ or Path(ARGV[0]).name != "yolo"
995
+ or TESTS_RUNNING
996
+ or not ONLINE
997
+ or not IS_PIP_PACKAGE
998
+ or IS_GIT_DIR
999
999
  ):
1000
- # If sentry_sdk package is not installed then return and do not use Sentry
1001
- try:
1002
- import sentry_sdk # noqa
1003
- except ImportError:
1004
- return
1005
-
1006
- def before_send(event, hint):
1007
- """
1008
- Modify the event before sending it to Sentry based on specific exception types and messages.
1000
+ return
1001
+ # If sentry_sdk package is not installed then return and do not use Sentry
1002
+ try:
1003
+ import sentry_sdk # noqa
1004
+ except ImportError:
1005
+ return
1006
+
1007
+ def before_send(event, hint):
1008
+ """
1009
+ Modify the event before sending it to Sentry based on specific exception types and messages.
1009
1010
 
1010
- Args:
1011
- event (dict): The event dictionary containing information about the error.
1012
- hint (dict): A dictionary containing additional information about the error.
1011
+ Args:
1012
+ event (dict): The event dictionary containing information about the error.
1013
+ hint (dict): A dictionary containing additional information about the error.
1013
1014
 
1014
- Returns:
1015
- dict: The modified event or None if the event should not be sent to Sentry.
1016
- """
1017
- if "exc_info" in hint:
1018
- exc_type, exc_value, _ = hint["exc_info"]
1019
- if exc_type in {KeyboardInterrupt, FileNotFoundError} or "out of memory" in str(exc_value):
1020
- return None # do not send event
1021
-
1022
- event["tags"] = {
1023
- "sys_argv": ARGV[0],
1024
- "sys_argv_name": Path(ARGV[0]).name,
1025
- "install": "git" if IS_GIT_DIR else "pip" if IS_PIP_PACKAGE else "other",
1026
- "os": ENVIRONMENT,
1027
- }
1028
- return event
1029
-
1030
- sentry_sdk.init(
1031
- dsn="https://888e5a0778212e1d0314c37d4b9aae5d@o4504521589325824.ingest.us.sentry.io/4504521592406016",
1032
- debug=False,
1033
- auto_enabling_integrations=False,
1034
- traces_sample_rate=1.0,
1035
- release=__version__,
1036
- environment="production", # 'dev' or 'production'
1037
- before_send=before_send,
1038
- ignore_errors=[KeyboardInterrupt, FileNotFoundError],
1039
- )
1040
- sentry_sdk.set_user({"id": SETTINGS["uuid"]}) # SHA-256 anonymized UUID hash
1015
+ Returns:
1016
+ dict: The modified event or None if the event should not be sent to Sentry.
1017
+ """
1018
+ if "exc_info" in hint:
1019
+ exc_type, exc_value, _ = hint["exc_info"]
1020
+ if exc_type in {KeyboardInterrupt, FileNotFoundError} or "out of memory" in str(exc_value):
1021
+ return None # do not send event
1022
+
1023
+ event["tags"] = {
1024
+ "sys_argv": ARGV[0],
1025
+ "sys_argv_name": Path(ARGV[0]).name,
1026
+ "install": "git" if IS_GIT_DIR else "pip" if IS_PIP_PACKAGE else "other",
1027
+ "os": ENVIRONMENT,
1028
+ }
1029
+ return event
1030
+
1031
+ sentry_sdk.init(
1032
+ dsn="https://888e5a0778212e1d0314c37d4b9aae5d@o4504521589325824.ingest.us.sentry.io/4504521592406016",
1033
+ debug=False,
1034
+ auto_enabling_integrations=False,
1035
+ traces_sample_rate=1.0,
1036
+ release=__version__,
1037
+ environment="production", # 'dev' or 'production'
1038
+ before_send=before_send,
1039
+ ignore_errors=[KeyboardInterrupt, FileNotFoundError],
1040
+ )
1041
+ sentry_sdk.set_user({"id": SETTINGS["uuid"]}) # SHA-256 anonymized UUID hash
1041
1042
 
1042
1043
 
1043
1044
  class JSONDict(dict):