ultralytics 8.3.27__tar.gz → 8.3.28__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.
Files changed (240) hide show
  1. {ultralytics-8.3.27/ultralytics.egg-info → ultralytics-8.3.28}/PKG-INFO +4 -4
  2. {ultralytics-8.3.27 → ultralytics-8.3.28}/README.md +3 -3
  3. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/__init__.py +1 -1
  4. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/__init__.py +143 -3
  5. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/default.yaml +1 -1
  6. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/data/annotator.py +15 -2
  7. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/engine/exporter.py +3 -1
  8. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/solutions/ai_gym.py +2 -4
  9. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/solutions/solutions.py +19 -4
  10. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/__init__.py +1 -0
  11. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/benchmarks.py +7 -3
  12. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/instance.py +1 -1
  13. {ultralytics-8.3.27 → ultralytics-8.3.28/ultralytics.egg-info}/PKG-INFO +4 -4
  14. {ultralytics-8.3.27 → ultralytics-8.3.28}/LICENSE +0 -0
  15. {ultralytics-8.3.27 → ultralytics-8.3.28}/pyproject.toml +0 -0
  16. {ultralytics-8.3.27 → ultralytics-8.3.28}/setup.cfg +0 -0
  17. {ultralytics-8.3.27 → ultralytics-8.3.28}/tests/__init__.py +0 -0
  18. {ultralytics-8.3.27 → ultralytics-8.3.28}/tests/conftest.py +0 -0
  19. {ultralytics-8.3.27 → ultralytics-8.3.28}/tests/test_cli.py +0 -0
  20. {ultralytics-8.3.27 → ultralytics-8.3.28}/tests/test_cuda.py +0 -0
  21. {ultralytics-8.3.27 → ultralytics-8.3.28}/tests/test_engine.py +0 -0
  22. {ultralytics-8.3.27 → ultralytics-8.3.28}/tests/test_exports.py +0 -0
  23. {ultralytics-8.3.27 → ultralytics-8.3.28}/tests/test_integrations.py +0 -0
  24. {ultralytics-8.3.27 → ultralytics-8.3.28}/tests/test_python.py +0 -0
  25. {ultralytics-8.3.27 → ultralytics-8.3.28}/tests/test_solutions.py +0 -0
  26. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/assets/bus.jpg +0 -0
  27. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/assets/zidane.jpg +0 -0
  28. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  29. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  30. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  31. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  32. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  33. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  34. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  35. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  36. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  37. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  38. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  39. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  40. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  41. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/coco.yaml +0 -0
  42. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  43. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  44. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  45. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  46. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  47. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  48. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  49. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  50. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  51. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  52. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  53. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/signature.yaml +0 -0
  54. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  55. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/datasets/xView.yaml +0 -0
  56. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  57. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  58. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  59. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  60. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  61. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  62. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  63. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  64. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  65. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  66. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  67. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  68. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  69. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  70. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  71. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  72. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  73. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  74. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  75. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  76. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  77. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  78. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  79. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  80. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  81. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  82. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  83. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  84. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  85. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  86. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  87. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  88. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  89. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  90. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  91. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  92. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  93. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  94. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  95. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  96. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  97. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  98. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  99. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  100. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  101. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/solutions/default.yaml +0 -0
  102. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  103. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  104. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/data/__init__.py +0 -0
  105. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/data/augment.py +0 -0
  106. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/data/base.py +0 -0
  107. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/data/build.py +0 -0
  108. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/data/converter.py +0 -0
  109. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/data/dataset.py +0 -0
  110. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/data/loaders.py +0 -0
  111. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/data/split_dota.py +0 -0
  112. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/data/utils.py +0 -0
  113. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/engine/__init__.py +0 -0
  114. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/engine/model.py +0 -0
  115. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/engine/predictor.py +0 -0
  116. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/engine/results.py +0 -0
  117. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/engine/trainer.py +0 -0
  118. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/engine/tuner.py +0 -0
  119. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/engine/validator.py +0 -0
  120. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/hub/__init__.py +0 -0
  121. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/hub/auth.py +0 -0
  122. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/hub/google/__init__.py +0 -0
  123. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/hub/session.py +0 -0
  124. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/hub/utils.py +0 -0
  125. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/__init__.py +0 -0
  126. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/fastsam/__init__.py +0 -0
  127. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/fastsam/model.py +0 -0
  128. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/fastsam/predict.py +0 -0
  129. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/fastsam/utils.py +0 -0
  130. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/fastsam/val.py +0 -0
  131. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/nas/__init__.py +0 -0
  132. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/nas/model.py +0 -0
  133. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/nas/predict.py +0 -0
  134. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/nas/val.py +0 -0
  135. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/rtdetr/__init__.py +0 -0
  136. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/rtdetr/model.py +0 -0
  137. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/rtdetr/predict.py +0 -0
  138. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/rtdetr/train.py +0 -0
  139. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/rtdetr/val.py +0 -0
  140. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/sam/__init__.py +0 -0
  141. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/sam/amg.py +0 -0
  142. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/sam/build.py +0 -0
  143. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/sam/model.py +0 -0
  144. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/sam/modules/__init__.py +0 -0
  145. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/sam/modules/blocks.py +0 -0
  146. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/sam/modules/decoders.py +0 -0
  147. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/sam/modules/encoders.py +0 -0
  148. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  149. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/sam/modules/sam.py +0 -0
  150. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  151. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/sam/modules/transformer.py +0 -0
  152. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/sam/modules/utils.py +0 -0
  153. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/sam/predict.py +0 -0
  154. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/utils/__init__.py +0 -0
  155. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/utils/loss.py +0 -0
  156. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/utils/ops.py +0 -0
  157. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/__init__.py +0 -0
  158. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/classify/__init__.py +0 -0
  159. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/classify/predict.py +0 -0
  160. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/classify/train.py +0 -0
  161. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/classify/val.py +0 -0
  162. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/detect/__init__.py +0 -0
  163. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/detect/predict.py +0 -0
  164. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/detect/train.py +0 -0
  165. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/detect/val.py +0 -0
  166. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/model.py +0 -0
  167. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/obb/__init__.py +0 -0
  168. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/obb/predict.py +0 -0
  169. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/obb/train.py +0 -0
  170. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/obb/val.py +0 -0
  171. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/pose/__init__.py +0 -0
  172. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/pose/predict.py +0 -0
  173. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/pose/train.py +0 -0
  174. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/pose/val.py +0 -0
  175. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/segment/__init__.py +0 -0
  176. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/segment/predict.py +0 -0
  177. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/segment/train.py +0 -0
  178. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/segment/val.py +0 -0
  179. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/world/__init__.py +0 -0
  180. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/world/train.py +0 -0
  181. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/models/yolo/world/train_world.py +0 -0
  182. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/nn/__init__.py +0 -0
  183. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/nn/autobackend.py +0 -0
  184. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/nn/modules/__init__.py +0 -0
  185. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/nn/modules/activation.py +0 -0
  186. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/nn/modules/block.py +0 -0
  187. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/nn/modules/conv.py +0 -0
  188. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/nn/modules/head.py +0 -0
  189. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/nn/modules/transformer.py +0 -0
  190. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/nn/modules/utils.py +0 -0
  191. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/nn/tasks.py +0 -0
  192. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/solutions/__init__.py +0 -0
  193. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/solutions/analytics.py +0 -0
  194. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/solutions/distance_calculation.py +0 -0
  195. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/solutions/heatmap.py +0 -0
  196. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/solutions/object_counter.py +0 -0
  197. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/solutions/parking_management.py +0 -0
  198. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/solutions/queue_management.py +0 -0
  199. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/solutions/speed_estimation.py +0 -0
  200. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/solutions/streamlit_inference.py +0 -0
  201. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/trackers/__init__.py +0 -0
  202. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/trackers/basetrack.py +0 -0
  203. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/trackers/bot_sort.py +0 -0
  204. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/trackers/byte_tracker.py +0 -0
  205. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/trackers/track.py +0 -0
  206. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/trackers/utils/__init__.py +0 -0
  207. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/trackers/utils/gmc.py +0 -0
  208. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  209. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/trackers/utils/matching.py +0 -0
  210. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/autobatch.py +0 -0
  211. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/callbacks/__init__.py +0 -0
  212. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/callbacks/base.py +0 -0
  213. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/callbacks/clearml.py +0 -0
  214. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/callbacks/comet.py +0 -0
  215. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/callbacks/dvc.py +0 -0
  216. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/callbacks/hub.py +0 -0
  217. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/callbacks/mlflow.py +0 -0
  218. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/callbacks/neptune.py +0 -0
  219. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/callbacks/raytune.py +0 -0
  220. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  221. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/callbacks/wb.py +0 -0
  222. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/checks.py +0 -0
  223. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/dist.py +0 -0
  224. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/downloads.py +0 -0
  225. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/errors.py +0 -0
  226. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/files.py +0 -0
  227. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/loss.py +0 -0
  228. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/metrics.py +0 -0
  229. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/ops.py +0 -0
  230. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/patches.py +0 -0
  231. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/plotting.py +0 -0
  232. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/tal.py +0 -0
  233. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/torch_utils.py +0 -0
  234. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/triton.py +0 -0
  235. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics/utils/tuner.py +0 -0
  236. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics.egg-info/SOURCES.txt +0 -0
  237. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics.egg-info/dependency_links.txt +0 -0
  238. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics.egg-info/entry_points.txt +0 -0
  239. {ultralytics-8.3.27 → ultralytics-8.3.28}/ultralytics.egg-info/requires.txt +0 -0
  240. {ultralytics-8.3.27 → ultralytics-8.3.28}/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.3.27
3
+ Version: 8.3.28
4
4
  Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -96,8 +96,8 @@ Requires-Dist: pycocotools>=2.0.7; extra == "extra"
96
96
 
97
97
  <div>
98
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>
99
+ <a href="https://pepy.tech/project/ultralytics"><img src="https://static.pepy.tech/badge/ultralytics" alt="Ultralytics Downloads"></a>
99
100
  <a href="https://zenodo.org/badge/latestdoi/264818686"><img src="https://zenodo.org/badge/264818686.svg" alt="Ultralytics YOLO Citation"></a>
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>
101
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
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>
103
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>
@@ -143,7 +143,7 @@ See below for a quickstart install and usage examples, and see our [Docs](https:
143
143
 
144
144
  Pip install the ultralytics package including all [requirements](https://github.com/ultralytics/ultralytics/blob/main/pyproject.toml) in a [**Python>=3.8**](https://www.python.org/) environment with [**PyTorch>=1.8**](https://pytorch.org/get-started/locally/).
145
145
 
146
- [![PyPI - Version](https://img.shields.io/pypi/v/ultralytics?logo=pypi&logoColor=white)](https://pypi.org/project/ultralytics/) [![Downloads](https://static.pepy.tech/badge/ultralytics)](https://pepy.tech/project/ultralytics) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ultralytics?logo=python&logoColor=gold)](https://pypi.org/project/ultralytics/)
146
+ [![PyPI - Version](https://img.shields.io/pypi/v/ultralytics?logo=pypi&logoColor=white)](https://pypi.org/project/ultralytics/) [![Ultralytics Downloads](https://static.pepy.tech/badge/ultralytics)](https://pepy.tech/project/ultralytics) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ultralytics?logo=python&logoColor=gold)](https://pypi.org/project/ultralytics/)
147
147
 
148
148
  ```bash
149
149
  pip install ultralytics
@@ -151,7 +151,7 @@ pip install ultralytics
151
151
 
152
152
  For alternative installation methods including [Conda](https://anaconda.org/conda-forge/ultralytics), [Docker](https://hub.docker.com/r/ultralytics/ultralytics), and Git, please refer to the [Quickstart Guide](https://docs.ultralytics.com/quickstart/).
153
153
 
154
- [![Conda Version](https://img.shields.io/conda/vn/conda-forge/ultralytics?logo=condaforge)](https://anaconda.org/conda-forge/ultralytics) [![Docker Image Version](https://img.shields.io/docker/v/ultralytics/ultralytics?sort=semver&logo=docker)](https://hub.docker.com/r/ultralytics/ultralytics)
154
+ [![Conda Version](https://img.shields.io/conda/vn/conda-forge/ultralytics?logo=condaforge)](https://anaconda.org/conda-forge/ultralytics) [![Docker Image Version](https://img.shields.io/docker/v/ultralytics/ultralytics?sort=semver&logo=docker)](https://hub.docker.com/r/ultralytics/ultralytics) [![Ultralytics Docker Pulls](https://img.shields.io/docker/pulls/ultralytics/ultralytics?logo=docker)](https://hub.docker.com/r/ultralytics/ultralytics)
155
155
 
156
156
  </details>
157
157
 
@@ -8,8 +8,8 @@
8
8
 
9
9
  <div>
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
+ <a href="https://pepy.tech/project/ultralytics"><img src="https://static.pepy.tech/badge/ultralytics" alt="Ultralytics Downloads"></a>
11
12
  <a href="https://zenodo.org/badge/latestdoi/264818686"><img src="https://zenodo.org/badge/264818686.svg" alt="Ultralytics YOLO Citation"></a>
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
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
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>
@@ -55,7 +55,7 @@ See below for a quickstart install and usage examples, and see our [Docs](https:
55
55
 
56
56
  Pip install the ultralytics package including all [requirements](https://github.com/ultralytics/ultralytics/blob/main/pyproject.toml) in a [**Python>=3.8**](https://www.python.org/) environment with [**PyTorch>=1.8**](https://pytorch.org/get-started/locally/).
57
57
 
58
- [![PyPI - Version](https://img.shields.io/pypi/v/ultralytics?logo=pypi&logoColor=white)](https://pypi.org/project/ultralytics/) [![Downloads](https://static.pepy.tech/badge/ultralytics)](https://pepy.tech/project/ultralytics) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ultralytics?logo=python&logoColor=gold)](https://pypi.org/project/ultralytics/)
58
+ [![PyPI - Version](https://img.shields.io/pypi/v/ultralytics?logo=pypi&logoColor=white)](https://pypi.org/project/ultralytics/) [![Ultralytics Downloads](https://static.pepy.tech/badge/ultralytics)](https://pepy.tech/project/ultralytics) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ultralytics?logo=python&logoColor=gold)](https://pypi.org/project/ultralytics/)
59
59
 
60
60
  ```bash
61
61
  pip install ultralytics
@@ -63,7 +63,7 @@ pip install ultralytics
63
63
 
64
64
  For alternative installation methods including [Conda](https://anaconda.org/conda-forge/ultralytics), [Docker](https://hub.docker.com/r/ultralytics/ultralytics), and Git, please refer to the [Quickstart Guide](https://docs.ultralytics.com/quickstart/).
65
65
 
66
- [![Conda Version](https://img.shields.io/conda/vn/conda-forge/ultralytics?logo=condaforge)](https://anaconda.org/conda-forge/ultralytics) [![Docker Image Version](https://img.shields.io/docker/v/ultralytics/ultralytics?sort=semver&logo=docker)](https://hub.docker.com/r/ultralytics/ultralytics)
66
+ [![Conda Version](https://img.shields.io/conda/vn/conda-forge/ultralytics?logo=condaforge)](https://anaconda.org/conda-forge/ultralytics) [![Docker Image Version](https://img.shields.io/docker/v/ultralytics/ultralytics?sort=semver&logo=docker)](https://hub.docker.com/r/ultralytics/ultralytics) [![Ultralytics Docker Pulls](https://img.shields.io/docker/pulls/ultralytics/ultralytics?logo=docker)](https://hub.docker.com/r/ultralytics/ultralytics)
67
67
 
68
68
  </details>
69
69
 
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.3.27"
3
+ __version__ = "8.3.28"
4
4
 
5
5
  import os
6
6
 
@@ -7,11 +7,15 @@ from pathlib import Path
7
7
  from types import SimpleNamespace
8
8
  from typing import Dict, List, Union
9
9
 
10
+ import cv2
11
+
10
12
  from ultralytics.utils import (
11
13
  ASSETS,
14
+ ASSETS_URL,
12
15
  DEFAULT_CFG,
13
16
  DEFAULT_CFG_DICT,
14
17
  DEFAULT_CFG_PATH,
18
+ DEFAULT_SOL_DICT,
15
19
  IS_VSCODE,
16
20
  LOGGER,
17
21
  RANK,
@@ -30,6 +34,17 @@ from ultralytics.utils import (
30
34
  yaml_print,
31
35
  )
32
36
 
37
+ # Define valid solutions
38
+ SOLUTION_MAP = {
39
+ "count": ("ObjectCounter", "count"),
40
+ "heatmap": ("Heatmap", "generate_heatmap"),
41
+ "queue": ("QueueManager", "process_queue"),
42
+ "speed": ("SpeedEstimator", "estimate_speed"),
43
+ "workout": ("AIGym", "monitor"),
44
+ "analytics": ("Analytics", "process_data"),
45
+ "help": None,
46
+ }
47
+
33
48
  # Define valid tasks and modes
34
49
  MODES = {"train", "val", "predict", "export", "track", "benchmark"}
35
50
  TASKS = {"detect", "segment", "classify", "pose", "obb"}
@@ -57,6 +72,31 @@ TASK2METRIC = {
57
72
  MODELS = {TASK2MODEL[task] for task in TASKS}
58
73
 
59
74
  ARGV = sys.argv or ["", ""] # sometimes sys.argv = []
75
+ SOLUTIONS_HELP_MSG = f"""
76
+ Arguments received: {str(['yolo'] + ARGV[1:])}. Ultralytics 'yolo solutions' usage overview:
77
+
78
+ yolo SOLUTIONS SOLUTION ARGS
79
+
80
+ Where SOLUTIONS (required) is a keyword
81
+ SOLUTION (optional) is one of {list(SOLUTION_MAP.keys())}
82
+ ARGS (optional) are any number of custom 'arg=value' pairs like 'show_in=True' that override defaults.
83
+ See all ARGS at https://docs.ultralytics.com/usage/cfg or with 'yolo cfg'
84
+
85
+ 1. Call object counting solution
86
+ yolo solutions count source="path/to/video/file.mp4" region=[(20, 400), (1080, 404), (1080, 360), (20, 360)]
87
+
88
+ 2. Call heatmaps solution
89
+ yolo solutions heatmap colormap=cv2.COLORMAP_PARAULA model=yolo11n.pt
90
+
91
+ 3. Call queue management solution
92
+ yolo solutions queue region=[(20, 400), (1080, 404), (1080, 360), (20, 360)] model=yolo11n.pt
93
+
94
+ 4. Call workouts monitoring solution for push-ups
95
+ yolo solutions workout model=yolo11n-pose.pt kpts=[6, 8, 10]
96
+
97
+ 5. Generate analytical graphs
98
+ yolo solutions analytics analytics_type="pie"
99
+ """
60
100
  CLI_HELP_MSG = f"""
61
101
  Arguments received: {str(['yolo'] + ARGV[1:])}. Ultralytics 'yolo' commands use the following syntax:
62
102
 
@@ -78,19 +118,24 @@ CLI_HELP_MSG = f"""
78
118
 
79
119
  4. Export a YOLO11n classification model to ONNX format at image size 224 by 128 (no TASK required)
80
120
  yolo export model=yolo11n-cls.pt format=onnx imgsz=224,128
81
-
121
+
82
122
  5. Streamlit real-time webcam inference GUI
83
123
  yolo streamlit-predict
84
-
85
- 6. Run special commands:
124
+
125
+ 6. Ultralytics solutions usage
126
+ yolo solutions count or in {list(SOLUTION_MAP.keys())} source="path/to/video/file.mp4"
127
+
128
+ 7. Run special commands:
86
129
  yolo help
87
130
  yolo checks
88
131
  yolo version
89
132
  yolo settings
90
133
  yolo copy-cfg
91
134
  yolo cfg
135
+ yolo solutions help
92
136
 
93
137
  Docs: https://docs.ultralytics.com
138
+ Solutions: https://docs.ultralytics.com/solutions/
94
139
  Community: https://community.ultralytics.com
95
140
  GitHub: https://github.com/ultralytics/ultralytics
96
141
  """
@@ -568,6 +613,100 @@ def handle_yolo_settings(args: List[str]) -> None:
568
613
  LOGGER.warning(f"WARNING ⚠️ settings error: '{e}'. Please see {url} for help.")
569
614
 
570
615
 
616
+ def handle_yolo_solutions(args: List[str]) -> None:
617
+ """
618
+ Processes YOLO solutions arguments and runs the specified computer vision solutions pipeline.
619
+
620
+ Args:
621
+ args (List[str]): Command-line arguments for configuring and running the Ultralytics YOLO
622
+ solutions: https://docs.ultralytics.com/solutions/, It can include solution name, source,
623
+ and other configuration parameters.
624
+
625
+ Returns:
626
+ None: The function processes video frames and saves the output but doesn't return any value.
627
+
628
+ Examples:
629
+ Run people counting solution with default settings:
630
+ >>> handle_yolo_solutions(["count"])
631
+
632
+ Run analytics with custom configuration:
633
+ >>> handle_yolo_solutions(["analytics", "conf=0.25", "source=path/to/video/file.mp4"])
634
+
635
+ Notes:
636
+ - Default configurations are merged from DEFAULT_SOL_DICT and DEFAULT_CFG_DICT
637
+ - Arguments can be provided in the format 'key=value' or as boolean flags
638
+ - Available solutions are defined in SOLUTION_MAP with their respective classes and methods
639
+ - If an invalid solution is provided, defaults to 'count' solution
640
+ - Output videos are saved in 'runs/solution/{solution_name}' directory
641
+ - For 'analytics' solution, frame numbers are tracked for generating analytical graphs
642
+ - Video processing can be interrupted by pressing 'q'
643
+ - Processes video frames sequentially and saves output in .avi format
644
+ - If no source is specified, downloads and uses a default sample video
645
+ """
646
+ full_args_dict = {**DEFAULT_SOL_DICT, **DEFAULT_CFG_DICT} # arguments dictionary
647
+ overrides = {}
648
+
649
+ # check dictionary alignment
650
+ for arg in merge_equals_args(args):
651
+ arg = arg.lstrip("-").rstrip(",")
652
+ if "=" in arg:
653
+ try:
654
+ k, v = parse_key_value_pair(arg)
655
+ overrides[k] = v
656
+ except (NameError, SyntaxError, ValueError, AssertionError) as e:
657
+ check_dict_alignment(full_args_dict, {arg: ""}, e)
658
+ elif arg in full_args_dict and isinstance(full_args_dict.get(arg), bool):
659
+ overrides[arg] = True
660
+ check_dict_alignment(full_args_dict, overrides) # dict alignment
661
+
662
+ # Get solution name
663
+ if args and args[0] in SOLUTION_MAP:
664
+ if args[0] != "help":
665
+ s_n = args.pop(0) # Extract the solution name directly
666
+ else:
667
+ LOGGER.info(SOLUTIONS_HELP_MSG)
668
+ else:
669
+ LOGGER.warning(
670
+ f"⚠️ No valid solution provided. Using default 'count'. Available: {', '.join(SOLUTION_MAP.keys())}"
671
+ )
672
+ s_n = "count" # Default solution if none provided
673
+
674
+ cls, method = SOLUTION_MAP[s_n] # solution class name, method name and default source
675
+
676
+ from ultralytics import solutions # import ultralytics solutions
677
+
678
+ solution = getattr(solutions, cls)(IS_CLI=True, **overrides) # get solution class i.e ObjectCounter
679
+ process = getattr(solution, method) # get specific function of class for processing i.e, count from ObjectCounter
680
+
681
+ cap = cv2.VideoCapture(solution.CFG["source"]) # read the video file
682
+
683
+ # extract width, height and fps of the video file, create save directory and initialize video writer
684
+ import os # for directory creation
685
+ from pathlib import Path
686
+
687
+ from ultralytics.utils.files import increment_path # for output directory path update
688
+
689
+ w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
690
+ if s_n == "analytics": # analytical graphs follow fixed shape for output i.e w=1920, h=1080
691
+ w, h = 1920, 1080
692
+ save_dir = increment_path(Path("runs") / "solutions" / "exp", exist_ok=False)
693
+ save_dir.mkdir(parents=True, exist_ok=True) # create the output directory
694
+ vw = cv2.VideoWriter(os.path.join(save_dir, "solution.avi"), cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
695
+
696
+ try: # Process video frames
697
+ f_n = 0 # frame number, required for analytical graphs
698
+ while cap.isOpened():
699
+ success, frame = cap.read()
700
+ if not success:
701
+ break
702
+ frame = process(frame, f_n := f_n + 1) if s_n == "analytics" else process(frame)
703
+ vw.write(frame)
704
+ if cv2.waitKey(1) & 0xFF == ord("q"):
705
+ break
706
+ finally:
707
+ cap.release()
708
+
709
+
571
710
  def handle_streamlit_inference():
572
711
  """
573
712
  Open the Ultralytics Live Inference Streamlit app for real-time object detection.
@@ -709,6 +848,7 @@ def entrypoint(debug=""):
709
848
  "logout": lambda: handle_yolo_hub(args),
710
849
  "copy-cfg": copy_default_cfg,
711
850
  "streamlit-predict": lambda: handle_streamlit_inference(),
851
+ "solutions": lambda: handle_yolo_solutions(args[1:]),
712
852
  }
713
853
  full_args_dict = {**DEFAULT_CFG_DICT, **{k: None for k in TASKS}, **{k: None for k in MODES}, **special}
714
854
 
@@ -36,7 +36,7 @@ profile: False # (bool) profile ONNX and TensorRT speeds during training for log
36
36
  freeze: None # (int | list, optional) freeze first n layers, or freeze list of layer indices during training
37
37
  multi_scale: False # (bool) Whether to use multiscale during training
38
38
  # Segmentation
39
- overlap_mask: True # (bool) masks should overlap during training (segment train only)
39
+ overlap_mask: True # (bool) merge object masks into a single image mask during training (segment train only)
40
40
  mask_ratio: 4 # (int) mask downsample ratio (segment train only)
41
41
  # Classification
42
42
  dropout: 0.0 # (float) use dropout regularization (classify train only)
@@ -6,7 +6,16 @@ from ultralytics import SAM, YOLO
6
6
 
7
7
 
8
8
  def auto_annotate(
9
- data, det_model="yolo11x.pt", sam_model="sam_b.pt", device="", conf=0.25, iou=0.45, imgsz=640, output_dir=None
9
+ data,
10
+ det_model="yolo11x.pt",
11
+ sam_model="sam_b.pt",
12
+ device="",
13
+ conf=0.25,
14
+ iou=0.45,
15
+ imgsz=640,
16
+ max_det=300,
17
+ classes=None,
18
+ output_dir=None,
10
19
  ):
11
20
  """
12
21
  Automatically annotates images using a YOLO object detection model and a SAM segmentation model.
@@ -22,6 +31,8 @@ def auto_annotate(
22
31
  conf (float): Confidence threshold for detection model; default is 0.25.
23
32
  iou (float): IoU threshold for filtering overlapping boxes in detection results; default is 0.45.
24
33
  imgsz (int): Input image resize dimension; default is 640.
34
+ max_det (int): Limits detections per image to control outputs in dense scenes.
35
+ classes (list): Filters predictions to specified class IDs, returning only relevant detections.
25
36
  output_dir (str | None): Directory to save the annotated results. If None, a default directory is created.
26
37
 
27
38
  Examples:
@@ -41,7 +52,9 @@ def auto_annotate(
41
52
  output_dir = data.parent / f"{data.stem}_auto_annotate_labels"
42
53
  Path(output_dir).mkdir(exist_ok=True, parents=True)
43
54
 
44
- det_results = det_model(data, stream=True, device=device, conf=conf, iou=iou, imgsz=imgsz)
55
+ det_results = det_model(
56
+ data, stream=True, device=device, conf=conf, iou=iou, imgsz=imgsz, max_det=max_det, classes=classes
57
+ )
45
58
 
46
59
  for result in det_results:
47
60
  class_ids = result.boxes.cls.int().tolist() # noqa
@@ -226,6 +226,8 @@ class Exporter:
226
226
  if self.args.optimize:
227
227
  assert not ncnn, "optimize=True not compatible with format='ncnn', i.e. use optimize=False"
228
228
  assert self.device.type == "cpu", "optimize=True not compatible with cuda devices, i.e. use device='cpu'"
229
+ if self.args.int8 and tflite:
230
+ assert not model.end2end, "TFLite INT8 export not supported for end2end models, please use half precision."
229
231
  if edgetpu:
230
232
  if not LINUX:
231
233
  raise SystemError("Edge TPU export only supported on Linux. See https://coral.ai/docs/edgetpu/compiler")
@@ -791,7 +793,7 @@ class Exporter:
791
793
  LOGGER.warning(f"{prefix} WARNING ⚠️ 'dynamic=True' model requires max batch size, i.e. 'batch=16'")
792
794
  profile = builder.create_optimization_profile()
793
795
  min_shape = (1, shape[1], 32, 32) # minimum input shape
794
- max_shape = (*shape[:2], *(max(1, self.args.workspace) * d for d in shape[2:])) # max input shape
796
+ max_shape = (*shape[:2], *(int(max(1, self.args.workspace) * d) for d in shape[2:])) # max input shape
795
797
  for inp in inputs:
796
798
  profile.set_shape(inp.name, min=min_shape, opt=shape, max=max_shape)
797
799
  config.add_optimization_profile(profile)
@@ -19,7 +19,6 @@ class AIGym(BaseSolution):
19
19
  up_angle (float): Angle threshold for considering the 'up' position of an exercise.
20
20
  down_angle (float): Angle threshold for considering the 'down' position of an exercise.
21
21
  kpts (List[int]): Indices of keypoints used for angle calculation.
22
- lw (int): Line width for drawing annotations.
23
22
  annotator (Annotator): Object for drawing annotations on the image.
24
23
 
25
24
  Methods:
@@ -51,7 +50,6 @@ class AIGym(BaseSolution):
51
50
  self.up_angle = float(self.CFG["up_angle"]) # Pose up predefined angle to consider up pose
52
51
  self.down_angle = float(self.CFG["down_angle"]) # Pose down predefined angle to consider down pose
53
52
  self.kpts = self.CFG["kpts"] # User selected kpts of workouts storage for further usage
54
- self.lw = self.CFG["line_width"] # Store line_width for usage
55
53
 
56
54
  def monitor(self, im0):
57
55
  """
@@ -84,14 +82,14 @@ class AIGym(BaseSolution):
84
82
  self.stage += ["-"] * new_human
85
83
 
86
84
  # Initialize annotator
87
- self.annotator = Annotator(im0, line_width=self.lw)
85
+ self.annotator = Annotator(im0, line_width=self.line_width)
88
86
 
89
87
  # Enumerate over keypoints
90
88
  for ind, k in enumerate(reversed(tracks.keypoints.data)):
91
89
  # Get keypoints and estimate the angle
92
90
  kpts = [k[int(self.kpts[i])].cpu() for i in range(3)]
93
91
  self.angle[ind] = self.annotator.estimate_pose_angle(*kpts)
94
- im0 = self.annotator.draw_specific_points(k, self.kpts, radius=self.lw * 3)
92
+ im0 = self.annotator.draw_specific_points(k, self.kpts, radius=self.line_width * 3)
95
93
 
96
94
  # Determine stage and count logic based on angle thresholds
97
95
  if self.angle[ind] < self.down_angle:
@@ -5,7 +5,7 @@ from collections import defaultdict
5
5
  import cv2
6
6
 
7
7
  from ultralytics import YOLO
8
- from ultralytics.utils import DEFAULT_CFG_DICT, DEFAULT_SOL_DICT, LOGGER
8
+ from ultralytics.utils import ASSETS_URL, DEFAULT_CFG_DICT, DEFAULT_SOL_DICT, LOGGER
9
9
  from ultralytics.utils.checks import check_imshow, check_requirements
10
10
 
11
11
 
@@ -42,8 +42,12 @@ class BaseSolution:
42
42
  >>> solution.display_output(image)
43
43
  """
44
44
 
45
- def __init__(self, **kwargs):
46
- """Initializes the BaseSolution class with configuration settings and YOLO model for Ultralytics solutions."""
45
+ def __init__(self, IS_CLI=False, **kwargs):
46
+ """
47
+ Initializes the `BaseSolution` class with configuration settings and the YOLO model for Ultralytics solutions.
48
+
49
+ IS_CLI (optional): Enables CLI mode if set.
50
+ """
47
51
  check_requirements("shapely>=2.0.0")
48
52
  from shapely.geometry import LineString, Point, Polygon
49
53
 
@@ -63,9 +67,20 @@ class BaseSolution:
63
67
  ) # Store line_width for usage
64
68
 
65
69
  # Load Model and store classes names
66
- self.model = YOLO(self.CFG["model"] if self.CFG["model"] else "yolov8n.pt")
70
+ if self.CFG["model"] is None:
71
+ self.CFG["model"] = "yolo11n.pt"
72
+ self.model = YOLO(self.CFG["model"])
67
73
  self.names = self.model.names
68
74
 
75
+ if IS_CLI: # for CLI, download the source and init video writer
76
+ if self.CFG["source"] is None:
77
+ d_s = "solutions_ci_demo.mp4" if "-pose" not in self.CFG["model"] else "solution_ci_pose_demo.mp4"
78
+ LOGGER.warning(f"⚠️ WARNING: source not provided. using default source {ASSETS_URL}/{d_s}")
79
+ from ultralytics.utils.downloads import safe_download
80
+
81
+ safe_download(f"{ASSETS_URL}/{d_s}") # download source from ultralytics assets
82
+ self.CFG["source"] = d_s # set default source
83
+
69
84
  # Initialize environment and region setup
70
85
  self.env_check = check_imshow(warn=True)
71
86
  self.track_history = defaultdict(list)
@@ -37,6 +37,7 @@ ARGV = sys.argv or ["", ""] # sometimes sys.argv = []
37
37
  FILE = Path(__file__).resolve()
38
38
  ROOT = FILE.parents[1] # YOLO
39
39
  ASSETS = ROOT / "assets" # default images
40
+ ASSETS_URL = "https://github.com/ultralytics/assets/releases/download/v0.0.0" # assets GitHub URL
40
41
  DEFAULT_CFG_PATH = ROOT / "cfg/default.yaml"
41
42
  DEFAULT_SOL_CFG_PATH = ROOT / "cfg/solutions/default.yaml" # Ultralytics solutions yaml path
42
43
  NUM_THREADS = min(8, max(1, os.cpu_count() - 1)) # number of YOLO multiprocessing threads
@@ -108,12 +108,16 @@ def benchmark(
108
108
  assert not isinstance(model, YOLOWorld), "YOLOWorldv2 TensorFlow exports not supported by onnx2tf yet"
109
109
  if i in {9, 10}: # TF EdgeTPU and TF.js
110
110
  assert not isinstance(model, YOLOWorld), "YOLOWorldv2 TensorFlow exports not supported by onnx2tf yet"
111
- if i in {11}: # Paddle
111
+ if i == 11: # Paddle
112
112
  assert not isinstance(model, YOLOWorld), "YOLOWorldv2 Paddle exports not supported yet"
113
113
  assert not is_end2end, "End-to-end models not supported by PaddlePaddle yet"
114
114
  assert LINUX or MACOS, "Windows Paddle exports not supported yet"
115
- if i in {12, 13}: # MNN, NCNN
116
- assert not isinstance(model, YOLOWorld), "YOLOWorldv2 MNN, NCNN exports not supported yet"
115
+ if i == 12: # MNN
116
+ assert not isinstance(model, YOLOWorld), "YOLOWorldv2 MNN exports not supported yet"
117
+ assert not IS_RASPBERRYPI, "MNN export not supported on Raspberry Pi"
118
+ assert not IS_JETSON, "MNN export not supported on NVIDIA Jetson"
119
+ if i == 13: # NCNN
120
+ assert not isinstance(model, YOLOWorld), "YOLOWorldv2 NCNN exports not supported yet"
117
121
  if "cpu" in device.type:
118
122
  assert cpu, "inference not supported on CPU"
119
123
  if "cuda" in device.type:
@@ -176,7 +176,7 @@ class Bboxes:
176
176
  length as the number of bounding boxes.
177
177
  """
178
178
  if isinstance(index, int):
179
- return Bboxes(self.bboxes[index].view(1, -1))
179
+ return Bboxes(self.bboxes[index].reshape(1, -1))
180
180
  b = self.bboxes[index]
181
181
  assert b.ndim == 2, f"Indexing on Bboxes with {index} failed to return a matrix!"
182
182
  return Bboxes(b)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.3.27
3
+ Version: 8.3.28
4
4
  Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -96,8 +96,8 @@ Requires-Dist: pycocotools>=2.0.7; extra == "extra"
96
96
 
97
97
  <div>
98
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>
99
+ <a href="https://pepy.tech/project/ultralytics"><img src="https://static.pepy.tech/badge/ultralytics" alt="Ultralytics Downloads"></a>
99
100
  <a href="https://zenodo.org/badge/latestdoi/264818686"><img src="https://zenodo.org/badge/264818686.svg" alt="Ultralytics YOLO Citation"></a>
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>
101
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
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>
103
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>
@@ -143,7 +143,7 @@ See below for a quickstart install and usage examples, and see our [Docs](https:
143
143
 
144
144
  Pip install the ultralytics package including all [requirements](https://github.com/ultralytics/ultralytics/blob/main/pyproject.toml) in a [**Python>=3.8**](https://www.python.org/) environment with [**PyTorch>=1.8**](https://pytorch.org/get-started/locally/).
145
145
 
146
- [![PyPI - Version](https://img.shields.io/pypi/v/ultralytics?logo=pypi&logoColor=white)](https://pypi.org/project/ultralytics/) [![Downloads](https://static.pepy.tech/badge/ultralytics)](https://pepy.tech/project/ultralytics) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ultralytics?logo=python&logoColor=gold)](https://pypi.org/project/ultralytics/)
146
+ [![PyPI - Version](https://img.shields.io/pypi/v/ultralytics?logo=pypi&logoColor=white)](https://pypi.org/project/ultralytics/) [![Ultralytics Downloads](https://static.pepy.tech/badge/ultralytics)](https://pepy.tech/project/ultralytics) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ultralytics?logo=python&logoColor=gold)](https://pypi.org/project/ultralytics/)
147
147
 
148
148
  ```bash
149
149
  pip install ultralytics
@@ -151,7 +151,7 @@ pip install ultralytics
151
151
 
152
152
  For alternative installation methods including [Conda](https://anaconda.org/conda-forge/ultralytics), [Docker](https://hub.docker.com/r/ultralytics/ultralytics), and Git, please refer to the [Quickstart Guide](https://docs.ultralytics.com/quickstart/).
153
153
 
154
- [![Conda Version](https://img.shields.io/conda/vn/conda-forge/ultralytics?logo=condaforge)](https://anaconda.org/conda-forge/ultralytics) [![Docker Image Version](https://img.shields.io/docker/v/ultralytics/ultralytics?sort=semver&logo=docker)](https://hub.docker.com/r/ultralytics/ultralytics)
154
+ [![Conda Version](https://img.shields.io/conda/vn/conda-forge/ultralytics?logo=condaforge)](https://anaconda.org/conda-forge/ultralytics) [![Docker Image Version](https://img.shields.io/docker/v/ultralytics/ultralytics?sort=semver&logo=docker)](https://hub.docker.com/r/ultralytics/ultralytics) [![Ultralytics Docker Pulls](https://img.shields.io/docker/pulls/ultralytics/ultralytics?logo=docker)](https://hub.docker.com/r/ultralytics/ultralytics)
155
155
 
156
156
  </details>
157
157
 
File without changes
File without changes