ultralytics 8.3.87__tar.gz → 8.3.89__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 (258) hide show
  1. {ultralytics-8.3.87/ultralytics.egg-info → ultralytics-8.3.89}/PKG-INFO +2 -2
  2. {ultralytics-8.3.87 → ultralytics-8.3.89}/pyproject.toml +1 -1
  3. {ultralytics-8.3.87 → ultralytics-8.3.89}/tests/test_solutions.py +34 -45
  4. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/__init__.py +1 -1
  5. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/__init__.py +46 -39
  6. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/data/augment.py +2 -2
  7. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/data/base.py +7 -9
  8. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/data/converter.py +30 -29
  9. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/data/utils.py +20 -28
  10. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/engine/model.py +2 -2
  11. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/engine/tuner.py +11 -21
  12. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/hub/__init__.py +13 -17
  13. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/fastsam/model.py +4 -7
  14. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/nas/model.py +8 -14
  15. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/nas/predict.py +7 -9
  16. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/nas/val.py +7 -9
  17. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/rtdetr/predict.py +6 -9
  18. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/rtdetr/train.py +5 -8
  19. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/rtdetr/val.py +5 -8
  20. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/classify/predict.py +6 -9
  21. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/classify/train.py +5 -8
  22. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/classify/val.py +5 -8
  23. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/detect/predict.py +6 -9
  24. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/detect/train.py +5 -8
  25. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/detect/val.py +5 -8
  26. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/obb/predict.py +6 -9
  27. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/obb/train.py +5 -8
  28. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/obb/val.py +10 -15
  29. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/pose/predict.py +6 -9
  30. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/pose/train.py +5 -8
  31. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/pose/val.py +12 -17
  32. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/segment/predict.py +6 -9
  33. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/segment/train.py +5 -8
  34. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/segment/val.py +10 -15
  35. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/world/train.py +5 -8
  36. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/world/train_world.py +21 -25
  37. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/nn/modules/__init__.py +9 -12
  38. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/nn/tasks.py +7 -12
  39. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/solutions/__init__.py +14 -6
  40. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/solutions/ai_gym.py +39 -28
  41. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/solutions/analytics.py +22 -18
  42. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/solutions/distance_calculation.py +25 -25
  43. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/solutions/heatmap.py +40 -38
  44. ultralytics-8.3.89/ultralytics/solutions/instance_segmentation.py +69 -0
  45. ultralytics-8.3.89/ultralytics/solutions/object_blurrer.py +89 -0
  46. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/solutions/object_counter.py +35 -33
  47. ultralytics-8.3.89/ultralytics/solutions/object_cropper.py +84 -0
  48. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/solutions/parking_management.py +21 -9
  49. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/solutions/queue_management.py +20 -39
  50. ultralytics-8.3.89/ultralytics/solutions/region_counter.py +119 -0
  51. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/solutions/security_alarm.py +40 -30
  52. ultralytics-8.3.89/ultralytics/solutions/solutions.py +756 -0
  53. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/solutions/speed_estimation.py +34 -31
  54. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/solutions/streamlit_inference.py +34 -28
  55. ultralytics-8.3.89/ultralytics/solutions/trackzone.py +79 -0
  56. ultralytics-8.3.89/ultralytics/solutions/vision_eye.py +69 -0
  57. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/trackers/utils/kalman_filter.py +23 -23
  58. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/__init__.py +5 -8
  59. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/checks.py +25 -35
  60. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/downloads.py +25 -48
  61. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/instance.py +9 -11
  62. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/ops.py +5 -9
  63. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/plotting.py +8 -428
  64. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/torch_utils.py +23 -33
  65. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/tuner.py +5 -9
  66. {ultralytics-8.3.87 → ultralytics-8.3.89/ultralytics.egg-info}/PKG-INFO +2 -2
  67. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics.egg-info/SOURCES.txt +4 -0
  68. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics.egg-info/requires.txt +1 -1
  69. ultralytics-8.3.87/ultralytics/solutions/region_counter.py +0 -116
  70. ultralytics-8.3.87/ultralytics/solutions/solutions.py +0 -178
  71. ultralytics-8.3.87/ultralytics/solutions/trackzone.py +0 -68
  72. {ultralytics-8.3.87 → ultralytics-8.3.89}/LICENSE +0 -0
  73. {ultralytics-8.3.87 → ultralytics-8.3.89}/README.md +0 -0
  74. {ultralytics-8.3.87 → ultralytics-8.3.89}/setup.cfg +0 -0
  75. {ultralytics-8.3.87 → ultralytics-8.3.89}/tests/__init__.py +0 -0
  76. {ultralytics-8.3.87 → ultralytics-8.3.89}/tests/conftest.py +0 -0
  77. {ultralytics-8.3.87 → ultralytics-8.3.89}/tests/test_cli.py +0 -0
  78. {ultralytics-8.3.87 → ultralytics-8.3.89}/tests/test_cuda.py +0 -0
  79. {ultralytics-8.3.87 → ultralytics-8.3.89}/tests/test_engine.py +0 -0
  80. {ultralytics-8.3.87 → ultralytics-8.3.89}/tests/test_exports.py +0 -0
  81. {ultralytics-8.3.87 → ultralytics-8.3.89}/tests/test_integrations.py +0 -0
  82. {ultralytics-8.3.87 → ultralytics-8.3.89}/tests/test_python.py +0 -0
  83. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/assets/bus.jpg +0 -0
  84. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/assets/zidane.jpg +0 -0
  85. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  86. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  87. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  88. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  89. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  90. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  91. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  92. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  93. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  94. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  95. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  96. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  97. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  98. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/coco.yaml +0 -0
  99. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  100. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  101. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  102. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  103. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  104. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  105. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  106. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  107. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  108. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  109. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  110. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  111. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  112. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/signature.yaml +0 -0
  113. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  114. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/datasets/xView.yaml +0 -0
  115. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/default.yaml +0 -0
  116. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  117. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  118. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  119. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  120. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  121. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  122. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  123. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  124. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  125. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  126. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  127. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  128. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  129. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  130. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  131. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  132. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  133. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  134. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  135. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  136. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  137. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  138. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  139. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  140. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  141. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  142. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  143. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  144. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  145. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  146. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  147. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  148. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  149. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  150. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  151. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  152. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  153. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  154. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  155. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  156. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  157. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  158. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  159. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  160. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  161. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  162. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  163. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  164. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  165. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  166. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  167. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/solutions/default.yaml +0 -0
  168. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  169. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  170. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/data/__init__.py +0 -0
  171. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/data/annotator.py +0 -0
  172. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/data/build.py +0 -0
  173. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/data/dataset.py +0 -0
  174. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/data/loaders.py +0 -0
  175. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/data/split_dota.py +0 -0
  176. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/engine/__init__.py +0 -0
  177. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/engine/exporter.py +0 -0
  178. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/engine/predictor.py +0 -0
  179. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/engine/results.py +0 -0
  180. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/engine/trainer.py +0 -0
  181. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/engine/validator.py +0 -0
  182. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/hub/auth.py +0 -0
  183. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/hub/google/__init__.py +0 -0
  184. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/hub/session.py +0 -0
  185. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/hub/utils.py +0 -0
  186. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/__init__.py +0 -0
  187. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/fastsam/__init__.py +0 -0
  188. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/fastsam/predict.py +0 -0
  189. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/fastsam/utils.py +0 -0
  190. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/fastsam/val.py +0 -0
  191. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/nas/__init__.py +0 -0
  192. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/rtdetr/__init__.py +0 -0
  193. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/rtdetr/model.py +0 -0
  194. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/sam/__init__.py +0 -0
  195. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/sam/amg.py +0 -0
  196. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/sam/build.py +0 -0
  197. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/sam/model.py +0 -0
  198. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/sam/modules/__init__.py +0 -0
  199. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/sam/modules/blocks.py +0 -0
  200. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/sam/modules/decoders.py +0 -0
  201. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/sam/modules/encoders.py +0 -0
  202. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  203. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/sam/modules/sam.py +0 -0
  204. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  205. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/sam/modules/transformer.py +0 -0
  206. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/sam/modules/utils.py +0 -0
  207. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/sam/predict.py +0 -0
  208. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/utils/__init__.py +0 -0
  209. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/utils/loss.py +0 -0
  210. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/utils/ops.py +0 -0
  211. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/__init__.py +0 -0
  212. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/classify/__init__.py +0 -0
  213. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/detect/__init__.py +0 -0
  214. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/model.py +0 -0
  215. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/obb/__init__.py +0 -0
  216. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/pose/__init__.py +0 -0
  217. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/segment/__init__.py +0 -0
  218. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/models/yolo/world/__init__.py +0 -0
  219. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/nn/__init__.py +0 -0
  220. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/nn/autobackend.py +0 -0
  221. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/nn/modules/activation.py +0 -0
  222. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/nn/modules/block.py +0 -0
  223. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/nn/modules/conv.py +0 -0
  224. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/nn/modules/head.py +0 -0
  225. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/nn/modules/transformer.py +0 -0
  226. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/nn/modules/utils.py +0 -0
  227. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/trackers/__init__.py +0 -0
  228. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/trackers/basetrack.py +0 -0
  229. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/trackers/bot_sort.py +0 -0
  230. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/trackers/byte_tracker.py +0 -0
  231. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/trackers/track.py +0 -0
  232. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/trackers/utils/__init__.py +0 -0
  233. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/trackers/utils/gmc.py +0 -0
  234. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/trackers/utils/matching.py +0 -0
  235. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/autobatch.py +0 -0
  236. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/benchmarks.py +0 -0
  237. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/callbacks/__init__.py +0 -0
  238. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/callbacks/base.py +0 -0
  239. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/callbacks/clearml.py +0 -0
  240. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/callbacks/comet.py +0 -0
  241. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/callbacks/dvc.py +0 -0
  242. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/callbacks/hub.py +0 -0
  243. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/callbacks/mlflow.py +0 -0
  244. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/callbacks/neptune.py +0 -0
  245. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/callbacks/raytune.py +0 -0
  246. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  247. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/callbacks/wb.py +0 -0
  248. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/dist.py +0 -0
  249. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/errors.py +0 -0
  250. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/files.py +0 -0
  251. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/loss.py +0 -0
  252. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/metrics.py +0 -0
  253. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/patches.py +0 -0
  254. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/tal.py +0 -0
  255. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics/utils/triton.py +0 -0
  256. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics.egg-info/dependency_links.txt +0 -0
  257. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics.egg-info/entry_points.txt +0 -0
  258. {ultralytics-8.3.87 → ultralytics-8.3.89}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: ultralytics
3
- Version: 8.3.87
3
+ Version: 8.3.89
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>
@@ -65,7 +65,7 @@ Requires-Dist: coremltools>=7.0; (platform_system != "Windows" and python_versio
65
65
  Requires-Dist: scikit-learn>=1.3.2; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
66
66
  Requires-Dist: openvino!=2025.0.0,>=2024.0.0; extra == "export"
67
67
  Requires-Dist: tensorflow>=2.0.0; extra == "export"
68
- Requires-Dist: tensorflowjs>=3.9.0; extra == "export"
68
+ Requires-Dist: tensorflowjs>=4.0.0; extra == "export"
69
69
  Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
70
70
  Requires-Dist: keras; extra == "export"
71
71
  Requires-Dist: flatbuffers<100,>=23.5.26; platform_machine == "aarch64" and extra == "export"
@@ -99,7 +99,7 @@ export = [
99
99
  "scikit-learn>=1.3.2; platform_system != 'Windows' and python_version <= '3.11'", # CoreML k-means quantization
100
100
  "openvino>=2024.0.0,!=2025.0.0", # OpenVINO export
101
101
  "tensorflow>=2.0.0", # TF bug https://github.com/ultralytics/ultralytics/issues/5161
102
- "tensorflowjs>=3.9.0", # TF.js export, automatically installs tensorflow
102
+ "tensorflowjs>=4.0.0", # TF.js export, automatically installs tensorflow
103
103
  "tensorstore>=0.1.63; platform_machine == 'aarch64' and python_version >= '3.9'", # for TF Raspberry Pi exports
104
104
  "keras", # not installed automatically by tensorflow>=2.16
105
105
  "flatbuffers>=23.5.26,<100; platform_machine == 'aarch64'", # update old 'flatbuffers' included inside tensorflow package
@@ -1,11 +1,13 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
+ # This is file for Ultralytics Solutions tests: https://docs.ultralytics.com/solutions/,
3
+ # It includes every solution excluding DistanceCalculation and Security Alarm System.
2
4
 
3
5
  import cv2
4
6
  import pytest
5
7
 
6
8
  from tests import TMP
7
- from ultralytics import YOLO, solutions
8
- from ultralytics.utils import ASSETS_URL, WEIGHTS_DIR
9
+ from ultralytics import solutions
10
+ from ultralytics.utils import ASSETS_URL
9
11
  from ultralytics.utils.downloads import safe_download
10
12
 
11
13
  DEMO_VIDEO = "solutions_ci_demo.mp4" # for all the solutions, except workout and parking
@@ -24,16 +26,23 @@ def test_major_solutions():
24
26
  region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]
25
27
  counter = solutions.ObjectCounter(region=region_points, model="yolo11n.pt", show=False) # Test object counter
26
28
  heatmap = solutions.Heatmap(colormap=cv2.COLORMAP_PARULA, model="yolo11n.pt", show=False) # Test heatmaps
27
- heatmap_count = solutions.Heatmap(
29
+ heatmapcounter = solutions.Heatmap(
28
30
  colormap=cv2.COLORMAP_PARULA, model="yolo11n.pt", show=False, region=region_points
29
31
  ) # Test heatmaps with object counting
30
32
  speed = solutions.SpeedEstimator(region=region_points, model="yolo11n.pt", show=False) # Test queue manager
31
33
  queue = solutions.QueueManager(region=region_points, model="yolo11n.pt", show=False) # Test speed estimation
32
- line_analytics = solutions.Analytics(analytics_type="line", model="yolo11n.pt", show=False) # line analytics
33
- pie_analytics = solutions.Analytics(analytics_type="pie", model="yolo11n.pt", show=False) # line analytics
34
- bar_analytics = solutions.Analytics(analytics_type="bar", model="yolo11n.pt", show=False) # line analytics
35
- area_analytics = solutions.Analytics(analytics_type="area", model="yolo11n.pt", show=False) # line analytics
36
- trackzone = solutions.TrackZone(region=region_points, model="yolo11n.pt", show=False) # Test trackzone
34
+ lineanalytics = solutions.Analytics(analytics_type="line", model="yolo11n.pt", show=False) # line analytics
35
+ pieanalytics = solutions.Analytics(analytics_type="pie", model="yolo11n.pt", show=False) # line analytics
36
+ baranalytics = solutions.Analytics(analytics_type="bar", model="yolo11n.pt", show=False) # line analytics
37
+ areaanalytics = solutions.Analytics(analytics_type="area", model="yolo11n.pt", show=False) # line analytics
38
+ trackzone = solutions.TrackZone(region=region_points, model="yolo11n.pt", show=False) # trackzone
39
+ objectcropper = solutions.ObjectCropper(
40
+ model="yolo11n.pt", show=False, crop_dir=str(TMP / "cropped-detections")
41
+ ) # object cropping
42
+ objectblurrer = solutions.ObjectBlurrer(blur_ratio=0.5, model="yolo11n.pt", show=False) # Object blurring
43
+ isegment = solutions.InstanceSegmentation(model="yolo11n-seg.pt", show=False) # Instance segmentation
44
+ visioneye = solutions.VisionEye(model="yolo11n.pt", show=False) # Visioneye
45
+ regioncounter = solutions.RegionCounter(region=region_points, model="yolo11n.pt", show=False) # Region counter
37
46
  frame_count = 0 # Required for analytics
38
47
  while cap.isOpened():
39
48
  success, im0 = cap.read()
@@ -41,16 +50,21 @@ def test_major_solutions():
41
50
  break
42
51
  frame_count += 1
43
52
  original_im0 = im0.copy()
44
- _ = counter.count(original_im0.copy())
45
- _ = heatmap.generate_heatmap(original_im0.copy())
46
- _ = heatmap_count.generate_heatmap(original_im0.copy())
47
- _ = speed.estimate_speed(original_im0.copy())
48
- _ = queue.process_queue(original_im0.copy())
49
- _ = line_analytics.process_data(original_im0.copy(), frame_count)
50
- _ = pie_analytics.process_data(original_im0.copy(), frame_count)
51
- _ = bar_analytics.process_data(original_im0.copy(), frame_count)
52
- _ = area_analytics.process_data(original_im0.copy(), frame_count)
53
- _ = trackzone.trackzone(original_im0.copy())
53
+ _ = counter(original_im0.copy())
54
+ _ = heatmap(original_im0.copy())
55
+ _ = heatmapcounter(original_im0.copy())
56
+ _ = speed(original_im0.copy())
57
+ _ = queue(original_im0.copy())
58
+ _ = lineanalytics(original_im0.copy(), frame_count)
59
+ _ = pieanalytics(original_im0.copy(), frame_count)
60
+ _ = baranalytics(original_im0.copy(), frame_count)
61
+ _ = areaanalytics(original_im0.copy(), frame_count)
62
+ _ = trackzone(original_im0.copy())
63
+ _ = objectcropper(original_im0.copy())
64
+ _ = isegment(original_im0.copy())
65
+ _ = objectblurrer(original_im0.copy())
66
+ _ = visioneye(original_im0.copy())
67
+ _ = regioncounter(original_im0.copy())
54
68
  cap.release()
55
69
 
56
70
  # Test workouts monitoring
@@ -62,7 +76,7 @@ def test_major_solutions():
62
76
  success, im0 = cap.read()
63
77
  if not success:
64
78
  break
65
- _ = gym.monitor(im0)
79
+ _ = gym(im0)
66
80
  cap.release()
67
81
 
68
82
  # Test parking management
@@ -78,35 +92,10 @@ def test_major_solutions():
78
92
  success, im0 = cap.read()
79
93
  if not success:
80
94
  break
81
- _ = parkingmanager.process_data(im0)
95
+ _ = parkingmanager(im0)
82
96
  cap.release()
83
97
 
84
98
 
85
- @pytest.mark.slow
86
- def test_instance_segmentation():
87
- """Test the instance segmentation solution."""
88
- from ultralytics.utils.plotting import Annotator, colors
89
-
90
- model = YOLO(WEIGHTS_DIR / "yolo11n-seg.pt")
91
- names = model.names
92
- cap = cv2.VideoCapture(TMP / DEMO_VIDEO)
93
- assert cap.isOpened(), "Error reading video file"
94
- while cap.isOpened():
95
- success, im0 = cap.read()
96
- if not success:
97
- break
98
- results = model.predict(im0)
99
- annotator = Annotator(im0, line_width=2)
100
- if results[0].masks is not None:
101
- clss = results[0].boxes.cls.cpu().tolist()
102
- masks = results[0].masks.xy
103
- for mask, cls in zip(masks, clss):
104
- color = colors(int(cls), True)
105
- annotator.seg_bbox(mask=mask, mask_color=color, label=names[int(cls)])
106
- cap.release()
107
- cv2.destroyAllWindows()
108
-
109
-
110
99
  @pytest.mark.slow
111
100
  def test_streamlit_predict():
112
101
  """Test streamlit predict live inference solution."""
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.87"
3
+ __version__ = "8.3.89"
4
4
 
5
5
  import os
6
6
 
@@ -5,7 +5,7 @@ import subprocess
5
5
  import sys
6
6
  from pathlib import Path
7
7
  from types import SimpleNamespace
8
- from typing import Dict, List, Union
8
+ from typing import Any, Dict, List, Union
9
9
 
10
10
  import cv2
11
11
 
@@ -35,14 +35,18 @@ from ultralytics.utils import (
35
35
 
36
36
  # Define valid solutions
37
37
  SOLUTION_MAP = {
38
- "count": ("ObjectCounter", "count"),
39
- "heatmap": ("Heatmap", "generate_heatmap"),
40
- "queue": ("QueueManager", "process_queue"),
41
- "speed": ("SpeedEstimator", "estimate_speed"),
42
- "workout": ("AIGym", "monitor"),
43
- "analytics": ("Analytics", "process_data"),
44
- "trackzone": ("TrackZone", "trackzone"),
45
- "inference": ("Inference", "inference"),
38
+ "count": "ObjectCounter",
39
+ "crop": "ObjectCropper",
40
+ "blur": "ObjectBlurrer",
41
+ "workout": "AIGym",
42
+ "heatmap": "Heatmap",
43
+ "isegment": "InstanceSegmentation",
44
+ "visioneye": "VisionEye",
45
+ "speed": "SpeedEstimator",
46
+ "queue": "QueueManager",
47
+ "analytics": "Analytics",
48
+ "inference": "Inference",
49
+ "trackzone": "TrackZone",
46
50
  "help": None,
47
51
  }
48
52
 
@@ -238,7 +242,7 @@ CFG_BOOL_KEYS = frozenset(
238
242
  )
239
243
 
240
244
 
241
- def cfg2dict(cfg):
245
+ def cfg2dict(cfg: Union[str, Path, Dict, SimpleNamespace]) -> Dict:
242
246
  """
243
247
  Converts a configuration object to a dictionary.
244
248
 
@@ -273,7 +277,7 @@ def cfg2dict(cfg):
273
277
  return cfg
274
278
 
275
279
 
276
- def get_cfg(cfg: Union[str, Path, Dict, SimpleNamespace] = DEFAULT_CFG_DICT, overrides: Dict = None):
280
+ def get_cfg(cfg: Union[str, Path, Dict, SimpleNamespace] = DEFAULT_CFG_DICT, overrides: Dict = None) -> SimpleNamespace:
277
281
  """
278
282
  Load and merge configuration data from a file or dictionary, with optional overrides.
279
283
 
@@ -321,7 +325,7 @@ def get_cfg(cfg: Union[str, Path, Dict, SimpleNamespace] = DEFAULT_CFG_DICT, ove
321
325
  return IterableSimpleNamespace(**cfg)
322
326
 
323
327
 
324
- def check_cfg(cfg, hard=True):
328
+ def check_cfg(cfg: Dict, hard: bool = True) -> None:
325
329
  """
326
330
  Checks configuration argument types and values for the Ultralytics library.
327
331
 
@@ -383,7 +387,7 @@ def check_cfg(cfg, hard=True):
383
387
  cfg[k] = bool(v)
384
388
 
385
389
 
386
- def get_save_dir(args, name=None):
390
+ def get_save_dir(args: SimpleNamespace, name: str = None) -> Path:
387
391
  """
388
392
  Returns the directory path for saving outputs, derived from arguments or default settings.
389
393
 
@@ -415,7 +419,7 @@ def get_save_dir(args, name=None):
415
419
  return Path(save_dir)
416
420
 
417
421
 
418
- def _handle_deprecation(custom):
422
+ def _handle_deprecation(custom: Dict) -> Dict:
419
423
  """
420
424
  Handles deprecated configuration keys by mapping them to current equivalents with deprecation warnings.
421
425
 
@@ -453,7 +457,7 @@ def _handle_deprecation(custom):
453
457
  return custom
454
458
 
455
459
 
456
- def check_dict_alignment(base: Dict, custom: Dict, e=None):
460
+ def check_dict_alignment(base: Dict, custom: Dict, e: Exception = None) -> None:
457
461
  """
458
462
  Checks alignment between custom and base configuration dictionaries, handling deprecated keys and providing error
459
463
  messages for mismatched keys.
@@ -507,7 +511,7 @@ def merge_equals_args(args: List[str]) -> List[str]:
507
511
  args (List[str]): A list of strings where each element represents an argument or fragment.
508
512
 
509
513
  Returns:
510
- List[str]: A list of strings where the arguments around isolated '=' are merged and fragments with brackets are joined.
514
+ (List[str]): A list of strings where the arguments around isolated '=' are merged and fragments with brackets are joined.
511
515
 
512
516
  Examples:
513
517
  >>> args = ["arg1", "=", "value", "arg2=", "value2", "arg3", "=value3", "imgsz=[3,", "640,", "640]"]
@@ -634,9 +638,6 @@ def handle_yolo_solutions(args: List[str]) -> None:
634
638
  solutions: https://docs.ultralytics.com/solutions/, It can include solution name, source,
635
639
  and other configuration parameters.
636
640
 
637
- Returns:
638
- None: The function processes video frames and saves the output but doesn't return any value.
639
-
640
641
  Examples:
641
642
  Run people counting solution with default settings:
642
643
  >>> handle_yolo_solutions(["count"])
@@ -660,7 +661,13 @@ def handle_yolo_solutions(args: List[str]) -> None:
660
661
  - The inference solution will be launched using the 'streamlit run' command.
661
662
  - The Streamlit app file is located in the Ultralytics package directory.
662
663
  """
663
- full_args_dict = {**DEFAULT_SOL_DICT, **DEFAULT_CFG_DICT} # arguments dictionary
664
+ full_args_dict = {
665
+ **DEFAULT_SOL_DICT,
666
+ **DEFAULT_CFG_DICT,
667
+ "blur_ratio": 0.5,
668
+ "vision_point": (20, 20),
669
+ "crop_dir": "cropped-detections",
670
+ } # arguments dictionary
664
671
  overrides = {}
665
672
 
666
673
  # check dictionary alignment
@@ -705,21 +712,19 @@ def handle_yolo_solutions(args: List[str]) -> None:
705
712
  else:
706
713
  from ultralytics import solutions
707
714
 
708
- cls, method = SOLUTION_MAP[solution_name] # solution class name, method name and default source
709
- solution = getattr(solutions, cls)(IS_CLI=True, **overrides) # get solution class i.e ObjectCounter
710
- process = getattr(
711
- solution, method
712
- ) # get specific function of class for processing i.e, count from ObjectCounter
715
+ solution = getattr(solutions, SOLUTION_MAP[solution_name])(is_cli=True, **overrides) # class i.e ObjectCounter
713
716
 
714
717
  cap = cv2.VideoCapture(solution.CFG["source"]) # read the video file
715
-
716
- # extract width, height and fps of the video file, create save directory and initialize video writer
717
- w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
718
- if solution_name == "analytics": # analytical graphs follow fixed shape for output i.e w=1920, h=1080
719
- w, h = 1920, 1080
720
- save_dir = get_save_dir(SimpleNamespace(project="runs/solutions", name="exp", exist_ok=False))
721
- save_dir.mkdir(parents=True) # create the output directory i.e. runs/solutions/exp
722
- vw = cv2.VideoWriter(str(save_dir / f"{solution_name}.avi"), cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
718
+ if solution_name != "crop":
719
+ # extract width, height and fps of the video file, create save directory and initialize video writer
720
+ w, h, fps = (
721
+ int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS)
722
+ )
723
+ if solution_name == "analytics": # analytical graphs follow fixed shape for output i.e w=1920, h=1080
724
+ w, h = 1280, 720
725
+ save_dir = get_save_dir(SimpleNamespace(project="runs/solutions", name="exp", exist_ok=False))
726
+ save_dir.mkdir(parents=True) # create the output directory i.e. runs/solutions/exp
727
+ vw = cv2.VideoWriter(str(save_dir / f"{solution_name}.avi"), cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
723
728
 
724
729
  try: # Process video frames
725
730
  f_n = 0 # frame number, required for analytical graphs
@@ -727,15 +732,17 @@ def handle_yolo_solutions(args: List[str]) -> None:
727
732
  success, frame = cap.read()
728
733
  if not success:
729
734
  break
730
- frame = process(frame, f_n := f_n + 1) if solution_name == "analytics" else process(frame)
731
- vw.write(frame)
735
+ results = solution(frame, f_n := f_n + 1) if solution_name == "analytics" else solution(frame)
736
+ LOGGER.info(f"🚀 Results: {results}")
737
+ if solution_name != "crop":
738
+ vw.write(results.plot_im)
732
739
  if cv2.waitKey(1) & 0xFF == ord("q"):
733
740
  break
734
741
  finally:
735
742
  cap.release()
736
743
 
737
744
 
738
- def parse_key_value_pair(pair: str = "key=value"):
745
+ def parse_key_value_pair(pair: str = "key=value") -> tuple:
739
746
  """
740
747
  Parses a key-value pair string into separate key and value components.
741
748
 
@@ -769,7 +776,7 @@ def parse_key_value_pair(pair: str = "key=value"):
769
776
  return k, smart_value(v)
770
777
 
771
778
 
772
- def smart_value(v):
779
+ def smart_value(v: str) -> Any:
773
780
  """
774
781
  Converts a string representation of a value to its appropriate Python type.
775
782
 
@@ -814,7 +821,7 @@ def smart_value(v):
814
821
  return v
815
822
 
816
823
 
817
- def entrypoint(debug=""):
824
+ def entrypoint(debug: str = "") -> None:
818
825
  """
819
826
  Ultralytics entrypoint function for parsing and executing command-line arguments.
820
827
 
@@ -986,7 +993,7 @@ def entrypoint(debug=""):
986
993
 
987
994
 
988
995
  # Special modes --------------------------------------------------------------------------------------------------------
989
- def copy_default_cfg():
996
+ def copy_default_cfg() -> None:
990
997
  """
991
998
  Copies the default configuration file and creates a new one with '_copy' appended to its name.
992
999
 
@@ -1193,8 +1193,8 @@ class RandomPerspective:
1193
1193
  Args:
1194
1194
  labels (Dict): A dictionary containing image data and annotations.
1195
1195
  Must include:
1196
- 'img' (ndarray): The input image.
1197
- 'cls' (ndarray): Class labels.
1196
+ 'img' (np.ndarray): The input image.
1197
+ 'cls' (np.ndarray): Class labels.
1198
1198
  'instances' (Instances): Object instances with bounding boxes, segments, and keypoints.
1199
1199
  May include:
1200
1200
  'mosaic_border' (Tuple[int, int]): Border size for mosaic augmentation.
@@ -312,15 +312,13 @@ class BaseDataset(Dataset):
312
312
  """
313
313
  Users can customize augmentations here.
314
314
 
315
- Example:
316
- ```python
317
- if self.augment:
318
- # Training transforms
319
- return Compose([])
320
- else:
321
- # Val transforms
322
- return Compose([])
323
- ```
315
+ Examples:
316
+ >>> if self.augment:
317
+ ... # Training transforms
318
+ ... return Compose([])
319
+ >>> else:
320
+ ... # Val transforms
321
+ ... return Compose([])
324
322
  """
325
323
  raise NotImplementedError
326
324
 
@@ -124,15 +124,16 @@ def coco80_to_coco91_class():
124
124
  Converts 80-index (val2014) to 91-index (paper).
125
125
  For details see https://tech.amikelive.com/node-718/what-object-categories-labels-are-in-coco-dataset/.
126
126
 
127
- Example:
128
- ```python
129
- import numpy as np
130
-
131
- a = np.loadtxt("data/coco.names", dtype="str", delimiter="\n")
132
- b = np.loadtxt("data/coco_paper.names", dtype="str", delimiter="\n")
133
- x1 = [list(a[i] == b).index(True) + 1 for i in range(80)] # darknet to coco
134
- x2 = [list(b[i] == a).index(True) if any(b[i] == a) else None for i in range(91)] # coco to darknet
135
- ```
127
+ Examples:
128
+ >>> import numpy as np
129
+ >>> a = np.loadtxt("data/coco.names", dtype="str", delimiter="\n")
130
+ >>> b = np.loadtxt("data/coco_paper.names", dtype="str", delimiter="\n")
131
+
132
+ Convert the darknet to COCO format
133
+ >>> x1 = [list(a[i] == b).index(True) + 1 for i in range(80)]
134
+
135
+ Convert the COCO to darknet format
136
+ >>> x2 = [list(b[i] == a).index(True) if any(b[i] == a) else None for i in range(91)]
136
137
  """
137
138
  return [
138
139
  1,
@@ -237,15 +238,20 @@ def convert_coco(
237
238
  cls91to80 (bool, optional): Whether to map 91 COCO class IDs to the corresponding 80 COCO class IDs.
238
239
  lvis (bool, optional): Whether to convert data in lvis dataset way.
239
240
 
240
- Example:
241
- ```python
242
- from ultralytics.data.converter import convert_coco
241
+ Examples:
242
+ >>> from ultralytics.data.converter import convert_coco
243
+
244
+ Convert COCO annotations to YOLO format
245
+ >>> convert_coco("../datasets/coco/annotations/", use_segments=True, use_keypoints=False, cls91to80=False)
243
246
 
244
- convert_coco("../datasets/coco/annotations/", use_segments=True, use_keypoints=False, cls91to80=False)
245
- convert_coco(
246
- "../datasets/lvis/annotations/", use_segments=True, use_keypoints=False, cls91to80=False, lvis=True
247
- )
248
- ```
247
+ Convert LVIS annotations to YOLO format
248
+ >>> convert_coco(
249
+ >>> "../datasets/lvis/annotations/",
250
+ ... use_segments=True,
251
+ ... use_keypoints=False,
252
+ ... cls91to80=False,
253
+ ... lvis=True
254
+ ... )
249
255
 
250
256
  Output:
251
257
  Generates output files in the specified output directory.
@@ -353,13 +359,11 @@ def convert_segment_masks_to_yolo_seg(masks_dir, output_dir, classes):
353
359
  output_dir (str): The path to the directory where the converted YOLO segmentation masks will be stored.
354
360
  classes (int): Total classes in the dataset i.e. for COCO classes=80
355
361
 
356
- Example:
357
- ```python
358
- from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
362
+ Examples:
363
+ >>> from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
359
364
 
360
- # The classes here is the total classes in the dataset, for COCO dataset we have 80 classes
361
- convert_segment_masks_to_yolo_seg("path/to/masks_directory", "path/to/output/directory", classes=80)
362
- ```
365
+ The classes here is the total classes in the dataset, for COCO dataset we have 80 classes
366
+ >>> convert_segment_masks_to_yolo_seg("path/to/masks_directory", "path/to/output/directory", classes=80)
363
367
 
364
368
  Notes:
365
369
  The expected directory structure for the masks is:
@@ -429,12 +433,9 @@ def convert_dota_to_yolo_obb(dota_root_path: str):
429
433
  Args:
430
434
  dota_root_path (str): The root directory path of the DOTA dataset.
431
435
 
432
- Example:
433
- ```python
434
- from ultralytics.data.converter import convert_dota_to_yolo_obb
435
-
436
- convert_dota_to_yolo_obb("path/to/DOTA")
437
- ```
436
+ Examples:
437
+ >>> from ultralytics.data.converter import convert_dota_to_yolo_obb
438
+ >>> convert_dota_to_yolo_obb("path/to/DOTA")
438
439
 
439
440
  Notes:
440
441
  The directory structure assumed for the DOTA dataset:
@@ -478,21 +478,19 @@ class HUBDatasetStats:
478
478
  task (str): Dataset task. Options are 'detect', 'segment', 'pose', 'classify'. Default is 'detect'.
479
479
  autodownload (bool): Attempt to download dataset if not found locally. Default is False.
480
480
 
481
- Example:
481
+ Note:
482
482
  Download *.zip files from https://github.com/ultralytics/hub/tree/main/example_datasets
483
- i.e. https://github.com/ultralytics/hub/raw/main/example_datasets/coco8.zip for coco8.zip.
484
- ```python
485
- from ultralytics.data.utils import HUBDatasetStats
486
-
487
- stats = HUBDatasetStats("path/to/coco8.zip", task="detect") # detect dataset
488
- stats = HUBDatasetStats("path/to/coco8-seg.zip", task="segment") # segment dataset
489
- stats = HUBDatasetStats("path/to/coco8-pose.zip", task="pose") # pose dataset
490
- stats = HUBDatasetStats("path/to/dota8.zip", task="obb") # OBB dataset
491
- stats = HUBDatasetStats("path/to/imagenet10.zip", task="classify") # classification dataset
492
-
493
- stats.get_json(save=True)
494
- stats.process_images()
495
- ```
483
+ i.e. https://github.com/ultralytics/hub/raw/main/example_datasets/coco8.zip for coco8.zip.
484
+
485
+ Examples:
486
+ >>> from ultralytics.data.utils import HUBDatasetStats
487
+ >>> stats = HUBDatasetStats("path/to/coco8.zip", task="detect") # detect dataset
488
+ >>> stats = HUBDatasetStats("path/to/coco8-seg.zip", task="segment") # segment dataset
489
+ >>> stats = HUBDatasetStats("path/to/coco8-pose.zip", task="pose") # pose dataset
490
+ >>> stats = HUBDatasetStats("path/to/dota8.zip", task="obb") # OBB dataset
491
+ >>> stats = HUBDatasetStats("path/to/imagenet10.zip", task="classify") # classification dataset
492
+ >>> stats.get_json(save=True)
493
+ >>> stats.process_images()
496
494
  """
497
495
 
498
496
  def __init__(self, path="coco8.yaml", task="detect", autodownload=False):
@@ -639,14 +637,11 @@ def compress_one_image(f, f_new=None, max_dim=1920, quality=50):
639
637
  max_dim (int, optional): The maximum dimension (width or height) of the output image. Default is 1920 pixels.
640
638
  quality (int, optional): The image compression quality as a percentage. Default is 50%.
641
639
 
642
- Example:
643
- ```python
644
- from pathlib import Path
645
- from ultralytics.data.utils import compress_one_image
646
-
647
- for f in Path("path/to/dataset").rglob("*.jpg"):
648
- compress_one_image(f)
649
- ```
640
+ Examples:
641
+ >>> from pathlib import Path
642
+ >>> from ultralytics.data.utils import compress_one_image
643
+ >>> for f in Path("path/to/dataset").rglob("*.jpg"):
644
+ >>> compress_one_image(f)
650
645
  """
651
646
  try: # use PIL
652
647
  im = Image.open(f)
@@ -673,12 +668,9 @@ def autosplit(path=DATASETS_DIR / "coco8/images", weights=(0.9, 0.1, 0.0), annot
673
668
  weights (list | tuple, optional): Train, validation, and test split fractions. Defaults to (0.9, 0.1, 0.0).
674
669
  annotated_only (bool, optional): If True, only images with an associated txt file are used. Defaults to False.
675
670
 
676
- Example:
677
- ```python
678
- from ultralytics.data.utils import autosplit
679
-
680
- autosplit()
681
- ```
671
+ Examples:
672
+ >>> from ultralytics.data.utils import autosplit
673
+ >>> autosplit()
682
674
  """
683
675
  path = Path(path) # images dir
684
676
  files = sorted(x for x in path.rglob("*.*") if x.suffix[1:].lower() in IMG_FORMATS) # image files only
@@ -1146,8 +1146,8 @@ class Model(torch.nn.Module):
1146
1146
  (Model): The model instance with evaluation mode set.
1147
1147
 
1148
1148
  Examples:
1149
- >> model = YOLO("yolo11n.pt")
1150
- >> model.eval()
1149
+ >>> model = YOLO("yolo11n.pt")
1150
+ >>> model.eval()
1151
1151
  """
1152
1152
  self.model.eval()
1153
1153
  return self
@@ -7,14 +7,11 @@ Hyperparameter tuning is the process of systematically searching for the optimal
7
7
  that yield the best model performance. This is particularly crucial in deep learning models like YOLO,
8
8
  where small changes in hyperparameters can lead to significant differences in model accuracy and efficiency.
9
9
 
10
- Example:
10
+ Examples:
11
11
  Tune hyperparameters for YOLO11n on COCO8 at imgsz=640 and epochs=30 for 300 tuning iterations.
12
- ```python
13
- from ultralytics import YOLO
14
-
15
- model = YOLO("yolo11n.pt")
16
- model.tune(data="coco8.yaml", epochs=10, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)
17
- ```
12
+ >>> from ultralytics import YOLO
13
+ >>> model = YOLO("yolo11n.pt")
14
+ >>> model.tune(data="coco8.yaml", epochs=10, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)
18
15
  """
19
16
 
20
17
  import random
@@ -49,22 +46,15 @@ class Tuner:
49
46
  __call__():
50
47
  Executes the hyperparameter evolution across multiple iterations.
51
48
 
52
- Example:
49
+ Examples:
53
50
  Tune hyperparameters for YOLO11n on COCO8 at imgsz=640 and epochs=30 for 300 tuning iterations.
54
- ```python
55
- from ultralytics import YOLO
56
-
57
- model = YOLO("yolo11n.pt")
58
- model.tune(data="coco8.yaml", epochs=10, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)
59
- ```
60
-
51
+ >>> from ultralytics import YOLO
52
+ >>> model = YOLO("yolo11n.pt")
53
+ >>> model.tune(
54
+ ... data="coco8.yaml", epochs=10, iterations=300, optimizer="AdamW", plots=False, save=False, val=False
55
+ ... )
61
56
  Tune with custom search space.
62
- ```python
63
- from ultralytics import YOLO
64
-
65
- model = YOLO("yolo11n.pt")
66
- model.tune(space={key1: val1, key2: val2}) # custom search space dictionary
67
- ```
57
+ >>> model.tune(space={key1: val1, key2: val2}) # custom search space dictionary
68
58
  """
69
59
 
70
60
  def __init__(self, args=DEFAULT_CFG, _callbacks=None):