ultralytics 8.3.86__tar.gz → 8.3.88__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 (259) hide show
  1. {ultralytics-8.3.86/ultralytics.egg-info → ultralytics-8.3.88}/PKG-INFO +8 -8
  2. {ultralytics-8.3.86 → ultralytics-8.3.88}/README.md +6 -6
  3. {ultralytics-8.3.86 → ultralytics-8.3.88}/pyproject.toml +1 -1
  4. ultralytics-8.3.88/tests/test_solutions.py +102 -0
  5. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/__init__.py +1 -1
  6. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/__init__.py +58 -55
  7. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +1 -1
  8. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/11/yolo11-cls.yaml +6 -6
  9. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/augment.py +2 -2
  10. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/loaders.py +1 -1
  11. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/exporter.py +1 -1
  12. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/results.py +76 -41
  13. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/trainer.py +11 -5
  14. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/tuner.py +3 -2
  15. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/autobackend.py +1 -1
  16. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/tasks.py +1 -1
  17. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/__init__.py +14 -6
  18. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/ai_gym.py +39 -28
  19. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/analytics.py +22 -18
  20. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/distance_calculation.py +25 -25
  21. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/heatmap.py +40 -38
  22. ultralytics-8.3.88/ultralytics/solutions/instance_segmentation.py +69 -0
  23. ultralytics-8.3.88/ultralytics/solutions/object_blurrer.py +89 -0
  24. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/object_counter.py +35 -33
  25. ultralytics-8.3.88/ultralytics/solutions/object_cropper.py +84 -0
  26. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/parking_management.py +40 -13
  27. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/queue_management.py +20 -39
  28. ultralytics-8.3.88/ultralytics/solutions/region_counter.py +119 -0
  29. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/security_alarm.py +40 -30
  30. ultralytics-8.3.88/ultralytics/solutions/solutions.py +756 -0
  31. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/speed_estimation.py +34 -31
  32. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/solutions/streamlit_inference.py +34 -28
  33. ultralytics-8.3.88/ultralytics/solutions/trackzone.py +79 -0
  34. ultralytics-8.3.88/ultralytics/solutions/vision_eye.py +69 -0
  35. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/utils/kalman_filter.py +23 -23
  36. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/__init__.py +2 -3
  37. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/comet.py +37 -5
  38. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/instance.py +3 -3
  39. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/plotting.py +0 -414
  40. {ultralytics-8.3.86 → ultralytics-8.3.88/ultralytics.egg-info}/PKG-INFO +8 -8
  41. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics.egg-info/SOURCES.txt +4 -0
  42. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics.egg-info/requires.txt +1 -1
  43. ultralytics-8.3.86/tests/test_solutions.py +0 -94
  44. ultralytics-8.3.86/ultralytics/solutions/region_counter.py +0 -116
  45. ultralytics-8.3.86/ultralytics/solutions/solutions.py +0 -178
  46. ultralytics-8.3.86/ultralytics/solutions/trackzone.py +0 -68
  47. {ultralytics-8.3.86 → ultralytics-8.3.88}/LICENSE +0 -0
  48. {ultralytics-8.3.86 → ultralytics-8.3.88}/setup.cfg +0 -0
  49. {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/__init__.py +0 -0
  50. {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/conftest.py +0 -0
  51. {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/test_cli.py +0 -0
  52. {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/test_cuda.py +0 -0
  53. {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/test_engine.py +0 -0
  54. {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/test_exports.py +0 -0
  55. {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/test_integrations.py +0 -0
  56. {ultralytics-8.3.86 → ultralytics-8.3.88}/tests/test_python.py +0 -0
  57. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/assets/bus.jpg +0 -0
  58. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/assets/zidane.jpg +0 -0
  59. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  60. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  61. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  62. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  63. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  64. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  65. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  66. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  67. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  68. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  69. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  70. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  71. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  72. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/coco.yaml +0 -0
  73. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  74. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  75. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  76. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  77. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  78. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  79. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  80. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  81. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  82. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  83. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  84. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  85. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  86. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/signature.yaml +0 -0
  87. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  88. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/datasets/xView.yaml +0 -0
  89. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/default.yaml +0 -0
  90. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  91. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  92. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  93. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  94. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  95. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  96. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  97. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  98. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  99. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  100. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  101. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  102. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  103. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  104. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  105. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  106. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  107. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  108. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  109. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  110. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  111. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  112. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  113. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  114. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  115. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  116. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  117. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  118. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  119. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  120. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  121. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  122. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  123. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  124. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  125. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  126. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  127. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  128. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  129. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  130. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  131. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  132. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  133. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  134. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  135. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  136. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  137. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  138. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  139. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/solutions/default.yaml +0 -0
  140. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  141. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  142. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/__init__.py +0 -0
  143. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/annotator.py +0 -0
  144. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/base.py +0 -0
  145. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/build.py +0 -0
  146. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/converter.py +0 -0
  147. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/dataset.py +0 -0
  148. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/split_dota.py +0 -0
  149. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/data/utils.py +0 -0
  150. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/__init__.py +0 -0
  151. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/model.py +0 -0
  152. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/predictor.py +0 -0
  153. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/engine/validator.py +0 -0
  154. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/hub/__init__.py +0 -0
  155. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/hub/auth.py +0 -0
  156. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/hub/google/__init__.py +0 -0
  157. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/hub/session.py +0 -0
  158. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/hub/utils.py +0 -0
  159. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/__init__.py +0 -0
  160. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/fastsam/__init__.py +0 -0
  161. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/fastsam/model.py +0 -0
  162. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/fastsam/predict.py +0 -0
  163. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/fastsam/utils.py +0 -0
  164. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/fastsam/val.py +0 -0
  165. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/nas/__init__.py +0 -0
  166. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/nas/model.py +0 -0
  167. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/nas/predict.py +0 -0
  168. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/nas/val.py +0 -0
  169. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/rtdetr/__init__.py +0 -0
  170. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/rtdetr/model.py +0 -0
  171. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/rtdetr/predict.py +0 -0
  172. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/rtdetr/train.py +0 -0
  173. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/rtdetr/val.py +0 -0
  174. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/__init__.py +0 -0
  175. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/amg.py +0 -0
  176. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/build.py +0 -0
  177. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/model.py +0 -0
  178. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/__init__.py +0 -0
  179. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/blocks.py +0 -0
  180. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/decoders.py +0 -0
  181. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/encoders.py +0 -0
  182. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  183. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/sam.py +0 -0
  184. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  185. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/transformer.py +0 -0
  186. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/modules/utils.py +0 -0
  187. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/sam/predict.py +0 -0
  188. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/utils/__init__.py +0 -0
  189. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/utils/loss.py +0 -0
  190. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/utils/ops.py +0 -0
  191. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/__init__.py +0 -0
  192. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/classify/__init__.py +0 -0
  193. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/classify/predict.py +0 -0
  194. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/classify/train.py +0 -0
  195. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/classify/val.py +0 -0
  196. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/detect/__init__.py +0 -0
  197. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/detect/predict.py +0 -0
  198. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/detect/train.py +0 -0
  199. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/detect/val.py +0 -0
  200. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/model.py +0 -0
  201. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/obb/__init__.py +0 -0
  202. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/obb/predict.py +0 -0
  203. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/obb/train.py +0 -0
  204. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/obb/val.py +0 -0
  205. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/pose/__init__.py +0 -0
  206. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/pose/predict.py +0 -0
  207. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/pose/train.py +0 -0
  208. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/pose/val.py +0 -0
  209. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/segment/__init__.py +0 -0
  210. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/segment/predict.py +0 -0
  211. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/segment/train.py +0 -0
  212. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/segment/val.py +0 -0
  213. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/world/__init__.py +0 -0
  214. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/world/train.py +0 -0
  215. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/models/yolo/world/train_world.py +0 -0
  216. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/__init__.py +0 -0
  217. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/modules/__init__.py +0 -0
  218. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/modules/activation.py +0 -0
  219. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/modules/block.py +0 -0
  220. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/modules/conv.py +0 -0
  221. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/modules/head.py +0 -0
  222. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/modules/transformer.py +0 -0
  223. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/nn/modules/utils.py +0 -0
  224. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/__init__.py +0 -0
  225. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/basetrack.py +0 -0
  226. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/bot_sort.py +0 -0
  227. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/byte_tracker.py +0 -0
  228. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/track.py +0 -0
  229. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/utils/__init__.py +0 -0
  230. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/utils/gmc.py +0 -0
  231. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/trackers/utils/matching.py +0 -0
  232. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/autobatch.py +0 -0
  233. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/benchmarks.py +0 -0
  234. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/__init__.py +0 -0
  235. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/base.py +0 -0
  236. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/clearml.py +0 -0
  237. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/dvc.py +0 -0
  238. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/hub.py +0 -0
  239. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/mlflow.py +0 -0
  240. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/neptune.py +0 -0
  241. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/raytune.py +0 -0
  242. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  243. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/callbacks/wb.py +0 -0
  244. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/checks.py +0 -0
  245. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/dist.py +0 -0
  246. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/downloads.py +0 -0
  247. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/errors.py +0 -0
  248. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/files.py +0 -0
  249. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/loss.py +0 -0
  250. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/metrics.py +0 -0
  251. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/ops.py +0 -0
  252. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/patches.py +0 -0
  253. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/tal.py +0 -0
  254. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/torch_utils.py +0 -0
  255. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/triton.py +0 -0
  256. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics/utils/tuner.py +0 -0
  257. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics.egg-info/dependency_links.txt +0 -0
  258. {ultralytics-8.3.86 → ultralytics-8.3.88}/ultralytics.egg-info/entry_points.txt +0 -0
  259. {ultralytics-8.3.86 → ultralytics-8.3.88}/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.86
3
+ Version: 8.3.88
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>
@@ -63,7 +63,7 @@ Provides-Extra: export
63
63
  Requires-Dist: onnx>=1.12.0; extra == "export"
64
64
  Requires-Dist: coremltools>=7.0; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
65
65
  Requires-Dist: scikit-learn>=1.3.2; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
66
- Requires-Dist: openvino<2025.0.0,>=2024.0.0; extra == "export"
66
+ Requires-Dist: openvino!=2025.0.0,>=2024.0.0; extra == "export"
67
67
  Requires-Dist: tensorflow>=2.0.0; extra == "export"
68
68
  Requires-Dist: tensorflowjs>=3.9.0; extra == "export"
69
69
  Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
@@ -248,13 +248,13 @@ See [Segmentation Docs](https://docs.ultralytics.com/tasks/segment/) for usage e
248
248
 
249
249
  See [Classification Docs](https://docs.ultralytics.com/tasks/classify/) for usage examples with these models trained on [ImageNet](https://docs.ultralytics.com/datasets/classify/imagenet/), which include 1000 pretrained classes.
250
250
 
251
- | Model | size<br><sup>(pixels) | acc<br><sup>top1 | acc<br><sup>top5 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>T4 TensorRT10<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) at 640 |
251
+ | Model | size<br><sup>(pixels) | acc<br><sup>top1 | acc<br><sup>top5 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>T4 TensorRT10<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) at 224 |
252
252
  | -------------------------------------------------------------------------------------------- | --------------------- | ---------------- | ---------------- | ------------------------------ | ----------------------------------- | ------------------ | ------------------------ |
253
- | [YOLO11n-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-cls.pt) | 224 | 70.0 | 89.4 | 5.0 ± 0.3 | 1.1 ± 0.0 | 1.6 | 3.3 |
254
- | [YOLO11s-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-cls.pt) | 224 | 75.4 | 92.7 | 7.9 ± 0.2 | 1.3 ± 0.0 | 5.5 | 12.1 |
255
- | [YOLO11m-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-cls.pt) | 224 | 77.3 | 93.9 | 17.2 ± 0.4 | 2.0 ± 0.0 | 10.4 | 39.3 |
256
- | [YOLO11l-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-cls.pt) | 224 | 78.3 | 94.3 | 23.2 ± 0.3 | 2.8 ± 0.0 | 12.9 | 49.4 |
257
- | [YOLO11x-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-cls.pt) | 224 | 79.5 | 94.9 | 41.4 ± 0.9 | 3.8 ± 0.0 | 28.4 | 110.4 |
253
+ | [YOLO11n-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-cls.pt) | 224 | 70.0 | 89.4 | 5.0 ± 0.3 | 1.1 ± 0.0 | 1.6 | 0.5 |
254
+ | [YOLO11s-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-cls.pt) | 224 | 75.4 | 92.7 | 7.9 ± 0.2 | 1.3 ± 0.0 | 5.5 | 1.6 |
255
+ | [YOLO11m-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-cls.pt) | 224 | 77.3 | 93.9 | 17.2 ± 0.4 | 2.0 ± 0.0 | 10.4 | 5.0 |
256
+ | [YOLO11l-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-cls.pt) | 224 | 78.3 | 94.3 | 23.2 ± 0.3 | 2.8 ± 0.0 | 12.9 | 6.2 |
257
+ | [YOLO11x-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-cls.pt) | 224 | 79.5 | 94.9 | 41.4 ± 0.9 | 3.8 ± 0.0 | 28.4 | 13.7 |
258
258
 
259
259
  - **acc** values are model accuracies on the [ImageNet](https://www.image-net.org/) dataset validation set. <br>Reproduce by `yolo val classify data=path/to/ImageNet device=0`
260
260
  - **Speed** averaged over ImageNet val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance. <br>Reproduce by `yolo val classify data=path/to/ImageNet batch=1 device=0|cpu`
@@ -163,13 +163,13 @@ See [Segmentation Docs](https://docs.ultralytics.com/tasks/segment/) for usage e
163
163
 
164
164
  See [Classification Docs](https://docs.ultralytics.com/tasks/classify/) for usage examples with these models trained on [ImageNet](https://docs.ultralytics.com/datasets/classify/imagenet/), which include 1000 pretrained classes.
165
165
 
166
- | Model | size<br><sup>(pixels) | acc<br><sup>top1 | acc<br><sup>top5 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>T4 TensorRT10<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) at 640 |
166
+ | Model | size<br><sup>(pixels) | acc<br><sup>top1 | acc<br><sup>top5 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>T4 TensorRT10<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) at 224 |
167
167
  | -------------------------------------------------------------------------------------------- | --------------------- | ---------------- | ---------------- | ------------------------------ | ----------------------------------- | ------------------ | ------------------------ |
168
- | [YOLO11n-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-cls.pt) | 224 | 70.0 | 89.4 | 5.0 ± 0.3 | 1.1 ± 0.0 | 1.6 | 3.3 |
169
- | [YOLO11s-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-cls.pt) | 224 | 75.4 | 92.7 | 7.9 ± 0.2 | 1.3 ± 0.0 | 5.5 | 12.1 |
170
- | [YOLO11m-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-cls.pt) | 224 | 77.3 | 93.9 | 17.2 ± 0.4 | 2.0 ± 0.0 | 10.4 | 39.3 |
171
- | [YOLO11l-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-cls.pt) | 224 | 78.3 | 94.3 | 23.2 ± 0.3 | 2.8 ± 0.0 | 12.9 | 49.4 |
172
- | [YOLO11x-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-cls.pt) | 224 | 79.5 | 94.9 | 41.4 ± 0.9 | 3.8 ± 0.0 | 28.4 | 110.4 |
168
+ | [YOLO11n-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-cls.pt) | 224 | 70.0 | 89.4 | 5.0 ± 0.3 | 1.1 ± 0.0 | 1.6 | 0.5 |
169
+ | [YOLO11s-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-cls.pt) | 224 | 75.4 | 92.7 | 7.9 ± 0.2 | 1.3 ± 0.0 | 5.5 | 1.6 |
170
+ | [YOLO11m-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11m-cls.pt) | 224 | 77.3 | 93.9 | 17.2 ± 0.4 | 2.0 ± 0.0 | 10.4 | 5.0 |
171
+ | [YOLO11l-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11l-cls.pt) | 224 | 78.3 | 94.3 | 23.2 ± 0.3 | 2.8 ± 0.0 | 12.9 | 6.2 |
172
+ | [YOLO11x-cls](https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11x-cls.pt) | 224 | 79.5 | 94.9 | 41.4 ± 0.9 | 3.8 ± 0.0 | 28.4 | 13.7 |
173
173
 
174
174
  - **acc** values are model accuracies on the [ImageNet](https://www.image-net.org/) dataset validation set. <br>Reproduce by `yolo val classify data=path/to/ImageNet device=0`
175
175
  - **Speed** averaged over ImageNet val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance. <br>Reproduce by `yolo val classify data=path/to/ImageNet batch=1 device=0|cpu`
@@ -97,7 +97,7 @@ export = [
97
97
  "onnx>=1.12.0", # ONNX export
98
98
  "coremltools>=7.0; platform_system != 'Windows' and python_version <= '3.11'", # CoreML supported on macOS and Linux
99
99
  "scikit-learn>=1.3.2; platform_system != 'Windows' and python_version <= '3.11'", # CoreML k-means quantization
100
- "openvino>=2024.0.0,<2025.0.0", # OpenVINO export
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
102
  "tensorflowjs>=3.9.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
@@ -0,0 +1,102 @@
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.
4
+
5
+ import cv2
6
+ import pytest
7
+
8
+ from tests import TMP
9
+ from ultralytics import solutions
10
+ from ultralytics.utils import ASSETS_URL
11
+ from ultralytics.utils.downloads import safe_download
12
+
13
+ DEMO_VIDEO = "solutions_ci_demo.mp4" # for all the solutions, except workout and parking
14
+ POSE_VIDEO = "solution_ci_pose_demo.mp4" # only for workouts monitoring solution
15
+ PARKING_VIDEO = "solution_ci_parking_demo.mp4" # only for parking management solution
16
+ PARKING_AREAS_JSON = "solution_ci_parking_areas.json" # only for parking management solution
17
+ PARKING_MODEL = "solutions_ci_parking_model.pt" # only for parking management solution
18
+
19
+
20
+ @pytest.mark.slow
21
+ def test_major_solutions():
22
+ """Test the object counting, heatmap, speed estimation, trackzone and queue management solution."""
23
+ safe_download(url=f"{ASSETS_URL}/{DEMO_VIDEO}", dir=TMP)
24
+ cap = cv2.VideoCapture(str(TMP / DEMO_VIDEO))
25
+ assert cap.isOpened(), "Error reading video file"
26
+ region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]
27
+ counter = solutions.ObjectCounter(region=region_points, model="yolo11n.pt", show=False) # Test object counter
28
+ heatmap = solutions.Heatmap(colormap=cv2.COLORMAP_PARULA, model="yolo11n.pt", show=False) # Test heatmaps
29
+ heatmapcounter = solutions.Heatmap(
30
+ colormap=cv2.COLORMAP_PARULA, model="yolo11n.pt", show=False, region=region_points
31
+ ) # Test heatmaps with object counting
32
+ speed = solutions.SpeedEstimator(region=region_points, model="yolo11n.pt", show=False) # Test queue manager
33
+ queue = solutions.QueueManager(region=region_points, model="yolo11n.pt", show=False) # Test speed estimation
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
46
+ frame_count = 0 # Required for analytics
47
+ while cap.isOpened():
48
+ success, im0 = cap.read()
49
+ if not success:
50
+ break
51
+ frame_count += 1
52
+ original_im0 = 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())
68
+ cap.release()
69
+
70
+ # Test workouts monitoring
71
+ safe_download(url=f"{ASSETS_URL}/{POSE_VIDEO}", dir=TMP)
72
+ cap = cv2.VideoCapture(str(TMP / POSE_VIDEO))
73
+ assert cap.isOpened(), "Error reading video file"
74
+ gym = solutions.AIGym(kpts=[5, 11, 13], show=False)
75
+ while cap.isOpened():
76
+ success, im0 = cap.read()
77
+ if not success:
78
+ break
79
+ _ = gym(im0)
80
+ cap.release()
81
+
82
+ # Test parking management
83
+ safe_download(url=f"{ASSETS_URL}/{PARKING_VIDEO}", dir=TMP)
84
+ safe_download(url=f"{ASSETS_URL}/{PARKING_AREAS_JSON}", dir=TMP)
85
+ safe_download(url=f"{ASSETS_URL}/{PARKING_MODEL}", dir=TMP)
86
+ cap = cv2.VideoCapture(str(TMP / PARKING_VIDEO))
87
+ assert cap.isOpened(), "Error reading video file"
88
+ parkingmanager = solutions.ParkingManagement(
89
+ json_file=str(TMP / PARKING_AREAS_JSON), model=str(TMP / PARKING_MODEL), show=False
90
+ )
91
+ while cap.isOpened():
92
+ success, im0 = cap.read()
93
+ if not success:
94
+ break
95
+ _ = parkingmanager(im0)
96
+ cap.release()
97
+
98
+
99
+ @pytest.mark.slow
100
+ def test_streamlit_predict():
101
+ """Test streamlit predict live inference solution."""
102
+ solutions.Inference().inference()
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.86"
3
+ __version__ = "8.3.88"
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"])
@@ -656,14 +657,17 @@ def handle_yolo_solutions(args: List[str]) -> None:
656
657
  - For 'analytics' solution, frame numbers are tracked for generating analytical graphs
657
658
  - Video processing can be interrupted by pressing 'q'
658
659
  - Processes video frames sequentially and saves output in .avi format
659
- - If no source is specified, downloads and uses a default sample video\
660
+ - If no source is specified, downloads and uses a default sample video
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
- from ultralytics import solutions
664
- from ultralytics.utils.files import increment_path
665
-
666
- 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
667
671
  overrides = {}
668
672
 
669
673
  # check dictionary alignment
@@ -680,21 +684,19 @@ def handle_yolo_solutions(args: List[str]) -> None:
680
684
  check_dict_alignment(full_args_dict, overrides) # dict alignment
681
685
 
682
686
  # Get solution name
683
- if args and args[0] in SOLUTION_MAP:
684
- if args[0] != "help":
685
- s_n = args.pop(0) # Extract the solution name directly
686
- else:
687
- LOGGER.info(SOLUTIONS_HELP_MSG)
687
+ if args[0] == "help":
688
+ LOGGER.info(SOLUTIONS_HELP_MSG)
689
+ return # Early return for 'help' case
690
+ elif args[0] in SOLUTION_MAP:
691
+ solution_name = args.pop(0) # Extract the solution name directly
688
692
  else:
689
693
  LOGGER.warning(
690
- f"⚠️ No valid solution provided. Using default 'count'. Available: {', '.join(SOLUTION_MAP.keys())}"
694
+ f" '{args[0]}' is not a valid solution. 💡 Defaulting to 'count'.\n"
695
+ f"🚀 Available solutions: {', '.join(list(SOLUTION_MAP.keys())[:-1])}\n"
691
696
  )
692
- s_n = "count" # Default solution if none provided
693
-
694
- if args and args[0] == "help": # Add check for return if user call `yolo solutions help`
695
- return
697
+ solution_name = "count" # Default for invalid solution
696
698
 
697
- if s_n == "inference":
699
+ if solution_name == "inference":
698
700
  checks.check_requirements("streamlit>=1.29.0")
699
701
  LOGGER.info("💡 Loading Ultralytics live inference app...")
700
702
  subprocess.run(
@@ -708,22 +710,21 @@ def handle_yolo_solutions(args: List[str]) -> None:
708
710
  ]
709
711
  )
710
712
  else:
711
- cls, method = SOLUTION_MAP[s_n] # solution class name, method name and default source
712
- solution = getattr(solutions, cls)(IS_CLI=True, **overrides) # get solution class i.e ObjectCounter
713
- process = getattr(
714
- solution, method
715
- ) # get specific function of class for processing i.e, count from ObjectCounter
716
-
717
- cap = cv2.VideoCapture(solution.CFG["source"]) # read the video file
713
+ from ultralytics import solutions
718
714
 
719
- # extract width, height and fps of the video file, create save directory and initialize video writer
715
+ solution = getattr(solutions, SOLUTION_MAP[solution_name])(is_cli=True, **overrides) # class i.e ObjectCounter
720
716
 
721
- w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
722
- if s_n == "analytics": # analytical graphs follow fixed shape for output i.e w=1920, h=1080
723
- w, h = 1920, 1080
724
- save_dir = increment_path(Path("runs") / "solutions" / "exp", exist_ok=False)
725
- save_dir.mkdir(parents=True, exist_ok=True) # create the output directory
726
- vw = cv2.VideoWriter(str(save_dir / "solution.avi"), cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
717
+ cap = cv2.VideoCapture(solution.CFG["source"]) # read the video file
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))
727
728
 
728
729
  try: # Process video frames
729
730
  f_n = 0 # frame number, required for analytical graphs
@@ -731,15 +732,17 @@ def handle_yolo_solutions(args: List[str]) -> None:
731
732
  success, frame = cap.read()
732
733
  if not success:
733
734
  break
734
- frame = process(frame, f_n := f_n + 1) if s_n == "analytics" else process(frame)
735
- 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)
736
739
  if cv2.waitKey(1) & 0xFF == ord("q"):
737
740
  break
738
741
  finally:
739
742
  cap.release()
740
743
 
741
744
 
742
- def parse_key_value_pair(pair: str = "key=value"):
745
+ def parse_key_value_pair(pair: str = "key=value") -> tuple:
743
746
  """
744
747
  Parses a key-value pair string into separate key and value components.
745
748
 
@@ -773,7 +776,7 @@ def parse_key_value_pair(pair: str = "key=value"):
773
776
  return k, smart_value(v)
774
777
 
775
778
 
776
- def smart_value(v):
779
+ def smart_value(v: str) -> Any:
777
780
  """
778
781
  Converts a string representation of a value to its appropriate Python type.
779
782
 
@@ -818,7 +821,7 @@ def smart_value(v):
818
821
  return v
819
822
 
820
823
 
821
- def entrypoint(debug=""):
824
+ def entrypoint(debug: str = "") -> None:
822
825
  """
823
826
  Ultralytics entrypoint function for parsing and executing command-line arguments.
824
827
 
@@ -990,7 +993,7 @@ def entrypoint(debug=""):
990
993
 
991
994
 
992
995
  # Special modes --------------------------------------------------------------------------------------------------------
993
- def copy_default_cfg():
996
+ def copy_default_cfg() -> None:
994
997
  """
995
998
  Copies the default configuration file and creates a new one with '_copy' appended to its name.
996
999
 
@@ -5,7 +5,7 @@
5
5
  # Task docs: https://docs.ultralytics.com/tasks/classify
6
6
 
7
7
  # Parameters
8
- nc: 10 # number of classes
8
+ nc: 1000 # number of classes
9
9
 
10
10
  # ResNet18 backbone
11
11
  backbone:
@@ -5,14 +5,14 @@
5
5
  # Task docs: https://docs.ultralytics.com/tasks/classify
6
6
 
7
7
  # Parameters
8
- nc: 80 # number of classes
8
+ nc: 1000 # number of classes
9
9
  scales: # model compound scaling constants, i.e. 'model=yolo11n-cls.yaml' will call yolo11-cls.yaml with scale 'n'
10
10
  # [depth, width, max_channels]
11
- n: [0.50, 0.25, 1024] # summary: 151 layers, 1633584 parameters, 1633584 gradients, 3.3 GFLOPs
12
- s: [0.50, 0.50, 1024] # summary: 151 layers, 5545488 parameters, 5545488 gradients, 12.2 GFLOPs
13
- m: [0.50, 1.00, 512] # summary: 187 layers, 10455696 parameters, 10455696 gradients, 39.7 GFLOPs
14
- l: [1.00, 1.00, 512] # summary: 309 layers, 12937104 parameters, 12937104 gradients, 49.9 GFLOPs
15
- x: [1.00, 1.50, 512] # summary: 309 layers, 28458544 parameters, 28458544 gradients, 111.1 GFLOPs
11
+ n: [0.50, 0.25, 1024] # summary: 151 layers, 1633584 parameters, 1633584 gradients, 0.5 GFLOPs
12
+ s: [0.50, 0.50, 1024] # summary: 151 layers, 5545488 parameters, 5545488 gradients, 1.6 GFLOPs
13
+ m: [0.50, 1.00, 512] # summary: 187 layers, 10455696 parameters, 10455696 gradients, 5.0 GFLOPs
14
+ l: [1.00, 1.00, 512] # summary: 309 layers, 12937104 parameters, 12937104 gradients, 6.2 GFLOPs
15
+ x: [1.00, 1.50, 512] # summary: 309 layers, 28458544 parameters, 28458544 gradients, 13.7 GFLOPs
16
16
 
17
17
  # YOLO11n backbone
18
18
  backbone:
@@ -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.
@@ -106,7 +106,7 @@ class LoadStreams:
106
106
  self.caps = [None] * n # video capture objects
107
107
  self.imgs = [[] for _ in range(n)] # images
108
108
  self.shape = [[] for _ in range(n)] # image shapes
109
- self.sources = [ops.clean_str(x) for x in sources] # clean source names for later
109
+ self.sources = [ops.clean_str(x).replace(os.sep, "_") for x in sources] # clean source names for later
110
110
  for i, s in enumerate(sources): # index, source
111
111
  # Start thread to read frames from video stream
112
112
  st = f"{i + 1}/{n}: {s}... "
@@ -590,7 +590,7 @@ class Exporter:
590
590
  @try_export
591
591
  def export_openvino(self, prefix=colorstr("OpenVINO:")):
592
592
  """YOLO OpenVINO export."""
593
- check_requirements("openvino>=2024.0.0,<2025.0.0")
593
+ check_requirements("openvino>=2024.0.0,!=2025.0.0")
594
594
  import openvino as ov
595
595
 
596
596
  LOGGER.info(f"\n{prefix} starting export with openvino {ov.__version__}...")