ultralytics 8.3.53__tar.gz → 8.3.55__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 (246) hide show
  1. {ultralytics-8.3.53/ultralytics.egg-info → ultralytics-8.3.55}/PKG-INFO +2 -2
  2. {ultralytics-8.3.53 → ultralytics-8.3.55}/README.md +1 -1
  3. {ultralytics-8.3.53 → ultralytics-8.3.55}/tests/__init__.py +0 -1
  4. {ultralytics-8.3.53 → ultralytics-8.3.55}/tests/conftest.py +2 -2
  5. {ultralytics-8.3.53 → ultralytics-8.3.55}/tests/test_cli.py +2 -1
  6. {ultralytics-8.3.53 → ultralytics-8.3.55}/tests/test_python.py +2 -2
  7. {ultralytics-8.3.53 → ultralytics-8.3.55}/tests/test_solutions.py +11 -9
  8. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/__init__.py +1 -1
  9. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/__init__.py +57 -56
  10. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/coco-pose.yaml +4 -4
  11. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/lvis.yaml +1 -1
  12. ultralytics-8.3.55/ultralytics/cfg/datasets/medical-pills.yaml +21 -0
  13. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/solutions/default.yaml +1 -1
  14. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/data/augment.py +6 -3
  15. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/data/dataset.py +2 -2
  16. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/engine/exporter.py +11 -11
  17. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/engine/model.py +22 -24
  18. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/engine/validator.py +1 -1
  19. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/sam/modules/tiny_encoder.py +2 -1
  20. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/sam/predict.py +1 -1
  21. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/nn/autobackend.py +7 -10
  22. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/solutions/__init__.py +2 -2
  23. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/solutions/analytics.py +1 -1
  24. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/solutions/distance_calculation.py +2 -0
  25. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/solutions/heatmap.py +1 -0
  26. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/solutions/parking_management.py +25 -14
  27. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/solutions/region_counter.py +4 -0
  28. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/solutions/security_alarm.py +9 -6
  29. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/solutions/solutions.py +8 -0
  30. ultralytics-8.3.55/ultralytics/solutions/streamlit_inference.py +195 -0
  31. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/benchmarks.py +2 -1
  32. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/downloads.py +1 -1
  33. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/instance.py +1 -1
  34. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/metrics.py +3 -4
  35. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/plotting.py +2 -1
  36. {ultralytics-8.3.53 → ultralytics-8.3.55/ultralytics.egg-info}/PKG-INFO +2 -2
  37. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics.egg-info/SOURCES.txt +1 -0
  38. ultralytics-8.3.53/ultralytics/solutions/streamlit_inference.py +0 -148
  39. {ultralytics-8.3.53 → ultralytics-8.3.55}/LICENSE +0 -0
  40. {ultralytics-8.3.53 → ultralytics-8.3.55}/pyproject.toml +0 -0
  41. {ultralytics-8.3.53 → ultralytics-8.3.55}/setup.cfg +0 -0
  42. {ultralytics-8.3.53 → ultralytics-8.3.55}/tests/test_cuda.py +0 -0
  43. {ultralytics-8.3.53 → ultralytics-8.3.55}/tests/test_engine.py +0 -0
  44. {ultralytics-8.3.53 → ultralytics-8.3.55}/tests/test_exports.py +0 -0
  45. {ultralytics-8.3.53 → ultralytics-8.3.55}/tests/test_integrations.py +0 -0
  46. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/assets/bus.jpg +0 -0
  47. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/assets/zidane.jpg +0 -0
  48. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  49. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  50. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  51. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  52. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  53. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  54. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  55. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  56. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  57. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  58. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  59. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  60. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/coco.yaml +0 -0
  61. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  62. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  63. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  64. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  65. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  66. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  67. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  68. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  69. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  70. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  71. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  72. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/signature.yaml +0 -0
  73. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  74. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/datasets/xView.yaml +0 -0
  75. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/default.yaml +0 -0
  76. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  77. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  78. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  79. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  80. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  81. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  82. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  83. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  84. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  85. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  86. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  87. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  88. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  89. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  90. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  91. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  92. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  93. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  94. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  95. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  96. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  97. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  98. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  99. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  100. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  101. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  102. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  103. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  104. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  105. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  106. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  107. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  108. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  109. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  110. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  111. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  112. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  113. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  114. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  115. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  116. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  117. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  118. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  119. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  120. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  121. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  122. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  123. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/data/__init__.py +0 -0
  124. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/data/annotator.py +0 -0
  125. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/data/base.py +0 -0
  126. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/data/build.py +0 -0
  127. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/data/converter.py +0 -0
  128. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/data/loaders.py +0 -0
  129. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/data/split_dota.py +0 -0
  130. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/data/utils.py +0 -0
  131. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/engine/__init__.py +0 -0
  132. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/engine/predictor.py +0 -0
  133. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/engine/results.py +0 -0
  134. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/engine/trainer.py +0 -0
  135. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/engine/tuner.py +0 -0
  136. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/hub/__init__.py +0 -0
  137. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/hub/auth.py +0 -0
  138. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/hub/google/__init__.py +0 -0
  139. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/hub/session.py +0 -0
  140. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/hub/utils.py +0 -0
  141. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/__init__.py +0 -0
  142. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/fastsam/__init__.py +0 -0
  143. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/fastsam/model.py +0 -0
  144. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/fastsam/predict.py +0 -0
  145. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/fastsam/utils.py +0 -0
  146. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/fastsam/val.py +0 -0
  147. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/nas/__init__.py +0 -0
  148. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/nas/model.py +0 -0
  149. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/nas/predict.py +0 -0
  150. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/nas/val.py +0 -0
  151. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/rtdetr/__init__.py +0 -0
  152. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/rtdetr/model.py +0 -0
  153. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/rtdetr/predict.py +0 -0
  154. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/rtdetr/train.py +0 -0
  155. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/rtdetr/val.py +0 -0
  156. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/sam/__init__.py +0 -0
  157. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/sam/amg.py +0 -0
  158. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/sam/build.py +0 -0
  159. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/sam/model.py +0 -0
  160. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/sam/modules/__init__.py +0 -0
  161. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/sam/modules/blocks.py +0 -0
  162. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/sam/modules/decoders.py +0 -0
  163. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/sam/modules/encoders.py +0 -0
  164. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  165. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/sam/modules/sam.py +0 -0
  166. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/sam/modules/transformer.py +0 -0
  167. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/sam/modules/utils.py +0 -0
  168. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/utils/__init__.py +0 -0
  169. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/utils/loss.py +0 -0
  170. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/utils/ops.py +0 -0
  171. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/__init__.py +0 -0
  172. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/classify/__init__.py +0 -0
  173. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/classify/predict.py +0 -0
  174. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/classify/train.py +0 -0
  175. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/classify/val.py +0 -0
  176. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/detect/__init__.py +0 -0
  177. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/detect/predict.py +0 -0
  178. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/detect/train.py +0 -0
  179. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/detect/val.py +0 -0
  180. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/model.py +0 -0
  181. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/obb/__init__.py +0 -0
  182. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/obb/predict.py +0 -0
  183. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/obb/train.py +0 -0
  184. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/obb/val.py +0 -0
  185. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/pose/__init__.py +0 -0
  186. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/pose/predict.py +0 -0
  187. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/pose/train.py +0 -0
  188. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/pose/val.py +0 -0
  189. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/segment/__init__.py +0 -0
  190. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/segment/predict.py +0 -0
  191. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/segment/train.py +0 -0
  192. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/segment/val.py +0 -0
  193. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/world/__init__.py +0 -0
  194. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/world/train.py +0 -0
  195. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/models/yolo/world/train_world.py +0 -0
  196. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/nn/__init__.py +0 -0
  197. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/nn/modules/__init__.py +0 -0
  198. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/nn/modules/activation.py +0 -0
  199. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/nn/modules/block.py +0 -0
  200. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/nn/modules/conv.py +0 -0
  201. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/nn/modules/head.py +0 -0
  202. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/nn/modules/transformer.py +0 -0
  203. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/nn/modules/utils.py +0 -0
  204. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/nn/tasks.py +0 -0
  205. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/solutions/ai_gym.py +0 -0
  206. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/solutions/object_counter.py +0 -0
  207. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/solutions/queue_management.py +0 -0
  208. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/solutions/speed_estimation.py +0 -0
  209. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/solutions/trackzone.py +0 -0
  210. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/trackers/__init__.py +0 -0
  211. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/trackers/basetrack.py +0 -0
  212. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/trackers/bot_sort.py +0 -0
  213. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/trackers/byte_tracker.py +0 -0
  214. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/trackers/track.py +0 -0
  215. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/trackers/utils/__init__.py +0 -0
  216. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/trackers/utils/gmc.py +0 -0
  217. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  218. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/trackers/utils/matching.py +0 -0
  219. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/__init__.py +0 -0
  220. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/autobatch.py +0 -0
  221. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/callbacks/__init__.py +0 -0
  222. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/callbacks/base.py +0 -0
  223. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/callbacks/clearml.py +0 -0
  224. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/callbacks/comet.py +0 -0
  225. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/callbacks/dvc.py +0 -0
  226. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/callbacks/hub.py +0 -0
  227. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/callbacks/mlflow.py +0 -0
  228. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/callbacks/neptune.py +0 -0
  229. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/callbacks/raytune.py +0 -0
  230. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  231. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/callbacks/wb.py +0 -0
  232. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/checks.py +0 -0
  233. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/dist.py +0 -0
  234. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/errors.py +0 -0
  235. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/files.py +0 -0
  236. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/loss.py +0 -0
  237. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/ops.py +0 -0
  238. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/patches.py +0 -0
  239. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/tal.py +0 -0
  240. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/torch_utils.py +0 -0
  241. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/triton.py +0 -0
  242. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics/utils/tuner.py +0 -0
  243. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics.egg-info/dependency_links.txt +0 -0
  244. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics.egg-info/entry_points.txt +0 -0
  245. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics.egg-info/requires.txt +0 -0
  246. {ultralytics-8.3.53 → ultralytics-8.3.55}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.3.53
3
+ Version: 8.3.55
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>
@@ -143,7 +143,7 @@ See below for a quickstart install and usage examples, and see our [Docs](https:
143
143
  <details open>
144
144
  <summary>Install</summary>
145
145
 
146
- Pip install the ultralytics package including all [requirements](https://github.com/ultralytics/ultralytics/blob/main/pyproject.toml) in a [**Python>=3.8**](https://www.python.org/) environment with [**PyTorch>=1.8**](https://pytorch.org/get-started/locally/).
146
+ Pip install the Ultralytics package including all [requirements](https://github.com/ultralytics/ultralytics/blob/main/pyproject.toml) in a [**Python>=3.8**](https://www.python.org/) environment with [**PyTorch>=1.8**](https://pytorch.org/get-started/locally/).
147
147
 
148
148
  [![PyPI - Version](https://img.shields.io/pypi/v/ultralytics?logo=pypi&logoColor=white)](https://pypi.org/project/ultralytics/) [![Ultralytics Downloads](https://static.pepy.tech/badge/ultralytics)](https://www.pepy.tech/projects/ultralytics) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ultralytics?logo=python&logoColor=gold)](https://pypi.org/project/ultralytics/)
149
149
 
@@ -55,7 +55,7 @@ See below for a quickstart install and usage examples, and see our [Docs](https:
55
55
  <details open>
56
56
  <summary>Install</summary>
57
57
 
58
- Pip install the ultralytics package including all [requirements](https://github.com/ultralytics/ultralytics/blob/main/pyproject.toml) in a [**Python>=3.8**](https://www.python.org/) environment with [**PyTorch>=1.8**](https://pytorch.org/get-started/locally/).
58
+ Pip install the Ultralytics package including all [requirements](https://github.com/ultralytics/ultralytics/blob/main/pyproject.toml) in a [**Python>=3.8**](https://www.python.org/) environment with [**PyTorch>=1.8**](https://pytorch.org/get-started/locally/).
59
59
 
60
60
  [![PyPI - Version](https://img.shields.io/pypi/v/ultralytics?logo=pypi&logoColor=white)](https://pypi.org/project/ultralytics/) [![Ultralytics Downloads](https://static.pepy.tech/badge/ultralytics)](https://www.pepy.tech/projects/ultralytics) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/ultralytics?logo=python&logoColor=gold)](https://pypi.org/project/ultralytics/)
61
61
 
@@ -17,7 +17,6 @@ __all__ = (
17
17
  "SOURCE",
18
18
  "SOURCES_LIST",
19
19
  "TMP",
20
- "IS_TMP_WRITEABLE",
21
20
  "CUDA_IS_AVAILABLE",
22
21
  "CUDA_DEVICE_COUNT",
23
22
  )
@@ -74,10 +74,10 @@ def pytest_terminal_summary(terminalreporter, exitstatus, config):
74
74
 
75
75
  # Remove files
76
76
  models = [path for x in ["*.onnx", "*.torchscript"] for path in WEIGHTS_DIR.rglob(x)]
77
- for file in ["bus.jpg", "yolo11n.onnx", "yolo11n.torchscript"] + models:
77
+ for file in ["decelera_portrait_min.mov", "bus.jpg", "yolo11n.onnx", "yolo11n.torchscript"] + models:
78
78
  Path(file).unlink(missing_ok=True)
79
79
 
80
80
  # Remove directories
81
81
  models = [path for x in ["*.mlpackage", "*_openvino_model"] for path in WEIGHTS_DIR.rglob(x)]
82
- for directory in [TMP.parents[1] / ".pytest_cache", TMP] + models:
82
+ for directory in [WEIGHTS_DIR / "path with spaces", TMP.parents[1] / ".pytest_cache", TMP] + models:
83
83
  shutil.rmtree(directory, ignore_errors=True)
@@ -59,7 +59,8 @@ def test_rtdetr(task="detect", model="yolov8n-rtdetr.yaml", data="coco8.yaml"):
59
59
  run(f"yolo train {task} model={model} data={data} --imgsz= 160 epochs =1, cache = disk fraction=0.25")
60
60
  run(f"yolo predict {task} model={model} source={ASSETS / 'bus.jpg'} imgsz=160 save save_crop save_txt")
61
61
  if TORCH_1_9:
62
- run(f"yolo predict {task} model='rtdetr-l.pt' source={ASSETS / 'bus.jpg'} imgsz=160 save save_crop save_txt")
62
+ weights = WEIGHTS_DIR / "rtdetr-l.pt"
63
+ run(f"yolo predict {task} model={weights} source={ASSETS / 'bus.jpg'} imgsz=160 save save_crop save_txt")
63
64
 
64
65
 
65
66
  @pytest.mark.skipif(checks.IS_PYTHON_3_12, reason="MobileSAM with CLIP is not supported in Python 3.12")
@@ -576,11 +576,11 @@ def test_model_embeddings():
576
576
  @pytest.mark.skipif(checks.IS_PYTHON_3_12, reason="YOLOWorld with CLIP is not supported in Python 3.12")
577
577
  def test_yolo_world():
578
578
  """Tests YOLO world models with CLIP support, including detection and training scenarios."""
579
- model = YOLO("yolov8s-world.pt") # no YOLO11n-world model yet
579
+ model = YOLO(WEIGHTS_DIR / "yolov8s-world.pt") # no YOLO11n-world model yet
580
580
  model.set_classes(["tree", "window"])
581
581
  model(SOURCE, conf=0.01)
582
582
 
583
- model = YOLO("yolov8s-worldv2.pt") # no YOLO11n-world model yet
583
+ model = YOLO(WEIGHTS_DIR / "yolov8s-worldv2.pt") # no YOLO11n-world model yet
584
584
  # Training from a pretrained model. Eval is included at the final stage of training.
585
585
  # Use dota8.yaml which has fewer categories to reduce the inference time of CLIP model
586
586
  model.train(
@@ -3,18 +3,20 @@
3
3
  import cv2
4
4
  import pytest
5
5
 
6
+ from tests import TMP
6
7
  from ultralytics import YOLO, solutions
8
+ from ultralytics.utils import ASSETS_URL, WEIGHTS_DIR
7
9
  from ultralytics.utils.downloads import safe_download
8
10
 
9
- MAJOR_SOLUTIONS_DEMO = "https://github.com/ultralytics/assets/releases/download/v0.0.0/solutions_ci_demo.mp4"
10
- WORKOUTS_SOLUTION_DEMO = "https://github.com/ultralytics/assets/releases/download/v0.0.0/solution_ci_pose_demo.mp4"
11
+ DEMO_VIDEO = "solutions_ci_demo.mp4"
12
+ POSE_VIDEO = "solution_ci_pose_demo.mp4"
11
13
 
12
14
 
13
15
  @pytest.mark.slow
14
16
  def test_major_solutions():
15
17
  """Test the object counting, heatmap, speed estimation and queue management solution."""
16
- safe_download(url=MAJOR_SOLUTIONS_DEMO)
17
- cap = cv2.VideoCapture("solutions_ci_demo.mp4")
18
+ safe_download(url=f"{ASSETS_URL}/{DEMO_VIDEO}", dir=TMP)
19
+ cap = cv2.VideoCapture(str(TMP / DEMO_VIDEO))
18
20
  assert cap.isOpened(), "Error reading video file"
19
21
  region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]
20
22
  counter = solutions.ObjectCounter(region=region_points, model="yolo11n.pt", show=False) # Test object counter
@@ -42,8 +44,8 @@ def test_major_solutions():
42
44
  cap.release()
43
45
 
44
46
  # Test workouts monitoring
45
- safe_download(url=WORKOUTS_SOLUTION_DEMO)
46
- cap1 = cv2.VideoCapture("solution_ci_pose_demo.mp4")
47
+ safe_download(url=f"{ASSETS_URL}/{POSE_VIDEO}", dir=TMP)
48
+ cap1 = cv2.VideoCapture(str(TMP / POSE_VIDEO))
47
49
  assert cap1.isOpened(), "Error reading video file"
48
50
  gym = solutions.AIGym(line_width=2, kpts=[5, 11, 13], show=False)
49
51
  while cap1.isOpened():
@@ -59,9 +61,9 @@ def test_instance_segmentation():
59
61
  """Test the instance segmentation solution."""
60
62
  from ultralytics.utils.plotting import Annotator, colors
61
63
 
62
- model = YOLO("yolo11n-seg.pt")
64
+ model = YOLO(WEIGHTS_DIR / "yolo11n-seg.pt")
63
65
  names = model.names
64
- cap = cv2.VideoCapture("solutions_ci_demo.mp4")
66
+ cap = cv2.VideoCapture(TMP / DEMO_VIDEO)
65
67
  assert cap.isOpened(), "Error reading video file"
66
68
  while cap.isOpened():
67
69
  success, im0 = cap.read()
@@ -82,4 +84,4 @@ def test_instance_segmentation():
82
84
  @pytest.mark.slow
83
85
  def test_streamlit_predict():
84
86
  """Test streamlit predict live inference solution."""
85
- solutions.inference()
87
+ solutions.Inference().inference()
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.3.53"
3
+ __version__ = "8.3.55"
4
4
 
5
5
  import os
6
6
 
@@ -42,6 +42,7 @@ SOLUTION_MAP = {
42
42
  "workout": ("AIGym", "monitor"),
43
43
  "analytics": ("Analytics", "process_data"),
44
44
  "trackzone": ("TrackZone", "trackzone"),
45
+ "inference": ("Inference", "inference"),
45
46
  "help": None,
46
47
  }
47
48
 
@@ -85,7 +86,7 @@ SOLUTIONS_HELP_MSG = f"""
85
86
  yolo solutions count source="path/to/video/file.mp4" region=[(20, 400), (1080, 400), (1080, 360), (20, 360)]
86
87
 
87
88
  2. Call heatmaps solution
88
- yolo solutions heatmap colormap=cv2.COLORMAP_PARAULA model=yolo11n.pt
89
+ yolo solutions heatmap colormap=cv2.COLORMAP_PARULA model=yolo11n.pt
89
90
 
90
91
  3. Call queue management solution
91
92
  yolo solutions queue region=[(20, 400), (1080, 400), (1080, 360), (20, 360)] model=yolo11n.pt
@@ -97,7 +98,10 @@ SOLUTIONS_HELP_MSG = f"""
97
98
  yolo solutions analytics analytics_type="pie"
98
99
 
99
100
  6. Track objects within specific zones
100
- yolo solutions trackzone source="path/to/video/file.mp4" region=[(150, 150), (1130, 150), (1130, 570), (150, 570)]
101
+ yolo solutions trackzone source="path/to/video/file.mp4" region=[(150, 150), (1130, 150), (1130, 570), (150, 570)]
102
+
103
+ 7. Streamlit real-time webcam inference GUI
104
+ yolo streamlit-predict
101
105
  """
102
106
  CLI_HELP_MSG = f"""
103
107
  Arguments received: {str(['yolo'] + ARGV[1:])}. Ultralytics 'yolo' commands use the following syntax:
@@ -121,13 +125,10 @@ CLI_HELP_MSG = f"""
121
125
  4. Export a YOLO11n classification model to ONNX format at image size 224 by 128 (no TASK required)
122
126
  yolo export model=yolo11n-cls.pt format=onnx imgsz=224,128
123
127
 
124
- 5. Streamlit real-time webcam inference GUI
125
- yolo streamlit-predict
126
-
127
- 6. Ultralytics solutions usage
128
+ 5. Ultralytics solutions usage
128
129
  yolo solutions count or in {list(SOLUTION_MAP.keys())[1:-1]} source="path/to/video/file.mp4"
129
130
 
130
- 7. Run special commands:
131
+ 6. Run special commands:
131
132
  yolo help
132
133
  yolo checks
133
134
  yolo version
@@ -636,6 +637,9 @@ def handle_yolo_solutions(args: List[str]) -> None:
636
637
  Run analytics with custom configuration:
637
638
  >>> handle_yolo_solutions(["analytics", "conf=0.25", "source=path/to/video/file.mp4"])
638
639
 
640
+ Run inference with custom configuration, requires Streamlit version 1.29.0 or higher.
641
+ >>> handle_yolo_solutions(["inference", "model=yolo11n.pt"])
642
+
639
643
  Notes:
640
644
  - Default configurations are merged from DEFAULT_SOL_DICT and DEFAULT_CFG_DICT
641
645
  - Arguments can be provided in the format 'key=value' or as boolean flags
@@ -645,7 +649,9 @@ def handle_yolo_solutions(args: List[str]) -> None:
645
649
  - For 'analytics' solution, frame numbers are tracked for generating analytical graphs
646
650
  - Video processing can be interrupted by pressing 'q'
647
651
  - Processes video frames sequentially and saves output in .avi format
648
- - If no source is specified, downloads and uses a default sample video
652
+ - If no source is specified, downloads and uses a default sample video\
653
+ - The inference solution will be launched using the 'streamlit run' command.
654
+ - The Streamlit app file is located in the Ultralytics package directory.
649
655
  """
650
656
  full_args_dict = {**DEFAULT_SOL_DICT, **DEFAULT_CFG_DICT} # arguments dictionary
651
657
  overrides = {}
@@ -678,60 +684,56 @@ def handle_yolo_solutions(args: List[str]) -> None:
678
684
  if args and args[0] == "help": # Add check for return if user call `yolo solutions help`
679
685
  return
680
686
 
681
- cls, method = SOLUTION_MAP[s_n] # solution class name, method name and default source
682
-
683
- from ultralytics import solutions # import ultralytics solutions
684
-
685
- solution = getattr(solutions, cls)(IS_CLI=True, **overrides) # get solution class i.e ObjectCounter
686
- process = getattr(solution, method) # get specific function of class for processing i.e, count from ObjectCounter
687
-
688
- cap = cv2.VideoCapture(solution.CFG["source"]) # read the video file
689
-
690
- # extract width, height and fps of the video file, create save directory and initialize video writer
691
- import os # for directory creation
692
- from pathlib import Path
693
-
694
- from ultralytics.utils.files import increment_path # for output directory path update
687
+ if s_n == "inference":
688
+ checks.check_requirements("streamlit>=1.29.0")
689
+ LOGGER.info("💡 Loading Ultralytics live inference app...")
690
+ subprocess.run(
691
+ [ # Run subprocess with Streamlit custom argument
692
+ "streamlit",
693
+ "run",
694
+ str(ROOT / "solutions/streamlit_inference.py"),
695
+ "--server.headless",
696
+ "true",
697
+ overrides.pop("model", "yolo11n.pt"),
698
+ ]
699
+ )
700
+ else:
701
+ cls, method = SOLUTION_MAP[s_n] # solution class name, method name and default source
695
702
 
696
- w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
697
- if s_n == "analytics": # analytical graphs follow fixed shape for output i.e w=1920, h=1080
698
- w, h = 1920, 1080
699
- save_dir = increment_path(Path("runs") / "solutions" / "exp", exist_ok=False)
700
- save_dir.mkdir(parents=True, exist_ok=True) # create the output directory
701
- vw = cv2.VideoWriter(os.path.join(save_dir, "solution.avi"), cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
703
+ from ultralytics import solutions # import ultralytics solutions
702
704
 
703
- try: # Process video frames
704
- f_n = 0 # frame number, required for analytical graphs
705
- while cap.isOpened():
706
- success, frame = cap.read()
707
- if not success:
708
- break
709
- frame = process(frame, f_n := f_n + 1) if s_n == "analytics" else process(frame)
710
- vw.write(frame)
711
- if cv2.waitKey(1) & 0xFF == ord("q"):
712
- break
713
- finally:
714
- cap.release()
705
+ solution = getattr(solutions, cls)(IS_CLI=True, **overrides) # get solution class i.e ObjectCounter
706
+ process = getattr(
707
+ solution, method
708
+ ) # get specific function of class for processing i.e, count from ObjectCounter
715
709
 
710
+ cap = cv2.VideoCapture(solution.CFG["source"]) # read the video file
716
711
 
717
- def handle_streamlit_inference():
718
- """
719
- Open the Ultralytics Live Inference Streamlit app for real-time object detection.
712
+ # extract width, height and fps of the video file, create save directory and initialize video writer
713
+ import os # for directory creation
714
+ from pathlib import Path
720
715
 
721
- This function initializes and runs a Streamlit application designed for performing live object detection using
722
- Ultralytics models. It checks for the required Streamlit package and launches the app.
716
+ from ultralytics.utils.files import increment_path # for output directory path update
723
717
 
724
- Examples:
725
- >>> handle_streamlit_inference()
718
+ w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
719
+ if s_n == "analytics": # analytical graphs follow fixed shape for output i.e w=1920, h=1080
720
+ w, h = 1920, 1080
721
+ save_dir = increment_path(Path("runs") / "solutions" / "exp", exist_ok=False)
722
+ save_dir.mkdir(parents=True, exist_ok=True) # create the output directory
723
+ vw = cv2.VideoWriter(os.path.join(save_dir, "solution.avi"), cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
726
724
 
727
- Notes:
728
- - Requires Streamlit version 1.29.0 or higher.
729
- - The app is launched using the 'streamlit run' command.
730
- - The Streamlit app file is located in the Ultralytics package directory.
731
- """
732
- checks.check_requirements("streamlit>=1.29.0")
733
- LOGGER.info("💡 Loading Ultralytics Live Inference app...")
734
- subprocess.run(["streamlit", "run", ROOT / "solutions/streamlit_inference.py", "--server.headless", "true"])
725
+ try: # Process video frames
726
+ f_n = 0 # frame number, required for analytical graphs
727
+ while cap.isOpened():
728
+ success, frame = cap.read()
729
+ if not success:
730
+ break
731
+ frame = process(frame, f_n := f_n + 1) if s_n == "analytics" else process(frame)
732
+ vw.write(frame)
733
+ if cv2.waitKey(1) & 0xFF == ord("q"):
734
+ break
735
+ finally:
736
+ cap.release()
735
737
 
736
738
 
737
739
  def parse_key_value_pair(pair: str = "key=value"):
@@ -853,7 +855,6 @@ def entrypoint(debug=""):
853
855
  "login": lambda: handle_yolo_hub(args),
854
856
  "logout": lambda: handle_yolo_hub(args),
855
857
  "copy-cfg": copy_default_cfg,
856
- "streamlit-predict": lambda: handle_streamlit_inference(),
857
858
  "solutions": lambda: handle_yolo_solutions(args[1:]),
858
859
  }
859
860
  full_args_dict = {**DEFAULT_CFG_DICT, **{k: None for k in TASKS}, **{k: None for k in MODES}, **special}
@@ -1,5 +1,5 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
- # COCO 2017 dataset https://cocodataset.org by Microsoft
2
+ # COCO 2017 Keypoints dataset https://cocodataset.org by Microsoft
3
3
  # Documentation: https://docs.ultralytics.com/datasets/pose/coco/
4
4
  # Example usage: yolo train data=coco-pose.yaml
5
5
  # parent
@@ -9,9 +9,9 @@
9
9
 
10
10
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
11
11
  path: ../datasets/coco-pose # dataset root dir
12
- train: train2017.txt # train images (relative to 'path') 118287 images
13
- val: val2017.txt # val images (relative to 'path') 5000 images
14
- test: test-dev2017.txt # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794
12
+ train: train2017.txt # train images (relative to 'path') 56599 images
13
+ val: val2017.txt # val images (relative to 'path') 2346 images
14
+ test: test-dev2017.txt # 20288 of 40670 images, submit to https://codalab.lisn.upsaclay.fr/competitions/7403
15
15
 
16
16
  # Keypoints
17
17
  kpt_shape: [17, 3] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
@@ -11,7 +11,7 @@
11
11
  path: ../datasets/lvis # dataset root dir
12
12
  train: train.txt # train images (relative to 'path') 100170 images
13
13
  val: val.txt # val images (relative to 'path') 19809 images
14
- minival: minival.txt # minval images (relative to 'path') 5000 images
14
+ minival: minival.txt # minival images (relative to 'path') 5000 images
15
15
 
16
16
  names:
17
17
  0: aerosol can/spray can
@@ -0,0 +1,21 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+ # Medical-pills dataset by Ultralytics
3
+ # Documentation: https://docs.ultralytics.com/datasets/detect/medical-pills/
4
+ # Example usage: yolo train data=medical-pills.yaml
5
+ # parent
6
+ # ├── ultralytics
7
+ # └── datasets
8
+ # └── medical-pills ← downloads here (8.19 MB)
9
+
10
+ # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
11
+ path: ../datasets/medical-pills # dataset root dir
12
+ train: train/images # train images (relative to 'path') 92 images
13
+ val: valid/images # val images (relative to 'path') 23 images
14
+ test: # test images (relative to 'path')
15
+
16
+ # Classes
17
+ names:
18
+ 0: pill
19
+
20
+ # Download script/URL (optional)
21
+ download: https://github.com/ultralytics/assets/releases/download/v0.0.0/medical-pills.zip
@@ -12,7 +12,7 @@ colormap: # (int | str) colormap for heatmap, Only OPENCV supported colormaps c
12
12
  # Workouts monitoring settings -----------------------------------------------------------------------------------------
13
13
  up_angle: 145.0 # (float) Workouts up_angle for counts, 145.0 is default value.
14
14
  down_angle: 90 # (float) Workouts down_angle for counts, 90 is default value. Y
15
- kpts: [6, 8, 10] # (list[int]) keypoints for workouts monitoring, i.e. for pushups kpts have values of [6, 8, 10].
15
+ kpts: [6, 8, 10] # (list[int]) keypoints for workouts monitoring, i.e. for push-ups kpts have values of [6, 8, 10].
16
16
 
17
17
  # Analytics settings ---------------------------------------------------------------------------------------------------
18
18
  analytics_type: "line" # (str) analytics type i.e "line", "pie", "bar" or "area" charts.
@@ -441,7 +441,8 @@ class BaseMixTransform:
441
441
  """
442
442
  raise NotImplementedError
443
443
 
444
- def _update_label_text(self, labels):
444
+ @staticmethod
445
+ def _update_label_text(labels):
445
446
  """
446
447
  Updates label text and class IDs for mixed labels in image augmentation.
447
448
 
@@ -1259,7 +1260,8 @@ class RandomPerspective:
1259
1260
  labels["resized_shape"] = img.shape[:2]
1260
1261
  return labels
1261
1262
 
1262
- def box_candidates(self, box1, box2, wh_thr=2, ar_thr=100, area_thr=0.1, eps=1e-16):
1263
+ @staticmethod
1264
+ def box_candidates(box1, box2, wh_thr=2, ar_thr=100, area_thr=0.1, eps=1e-16):
1263
1265
  """
1264
1266
  Compute candidate boxes for further processing based on size and aspect ratio criteria.
1265
1267
 
@@ -1598,7 +1600,8 @@ class LetterBox:
1598
1600
  else:
1599
1601
  return img
1600
1602
 
1601
- def _update_labels(self, labels, ratio, padw, padh):
1603
+ @staticmethod
1604
+ def _update_labels(labels, ratio, padw, padh):
1602
1605
  """
1603
1606
  Updates labels after applying letterboxing to an image.
1604
1607
 
@@ -68,7 +68,7 @@ class YOLODataset(BaseDataset):
68
68
  Cache dataset labels, check images and read shapes.
69
69
 
70
70
  Args:
71
- path (Path): Path where to save the cache file. Default is Path('./labels.cache').
71
+ path (Path): Path where to save the cache file. Default is Path("./labels.cache").
72
72
 
73
73
  Returns:
74
74
  (dict): labels.
@@ -219,7 +219,7 @@ class YOLODataset(BaseDataset):
219
219
  segment_resamples = 100 if self.use_obb else 1000
220
220
  if len(segments) > 0:
221
221
  # make sure segments interpolate correctly if original length is greater than segment_resamples
222
- max_len = max([len(s) for s in segments])
222
+ max_len = max(len(s) for s in segments)
223
223
  segment_resamples = (max_len + 1) if segment_resamples < max_len else segment_resamples
224
224
  # list[np.array(segment_resamples, 2)] * num_samples
225
225
  segments = np.stack(resample_segments(segments, n=segment_resamples), axis=0)
@@ -102,19 +102,19 @@ def export_formats():
102
102
  """Ultralytics YOLO export formats."""
103
103
  x = [
104
104
  ["PyTorch", "-", ".pt", True, True, []],
105
- ["TorchScript", "torchscript", ".torchscript", True, True, ["optimize", "batch"]],
106
- ["ONNX", "onnx", ".onnx", True, True, ["half", "dynamic", "simplify", "opset", "batch"]],
107
- ["OpenVINO", "openvino", "_openvino_model", True, False, ["half", "int8", "batch"]],
108
- ["TensorRT", "engine", ".engine", False, True, ["half", "dynamic", "simplify", "int8", "batch"]],
109
- ["CoreML", "coreml", ".mlpackage", True, False, ["half", "int8", "nms", "batch"]],
110
- ["TensorFlow SavedModel", "saved_model", "_saved_model", True, True, ["keras", "int8", "batch"]],
105
+ ["TorchScript", "torchscript", ".torchscript", True, True, ["batch", "optimize"]],
106
+ ["ONNX", "onnx", ".onnx", True, True, ["batch", "dynamic", "half", "opset", "simplify"]],
107
+ ["OpenVINO", "openvino", "_openvino_model", True, False, ["batch", "dynamic", "half", "int8"]],
108
+ ["TensorRT", "engine", ".engine", False, True, ["batch", "dynamic", "half", "int8", "simplify"]],
109
+ ["CoreML", "coreml", ".mlpackage", True, False, ["batch", "half", "int8", "nms"]],
110
+ ["TensorFlow SavedModel", "saved_model", "_saved_model", True, True, ["batch", "int8", "keras"]],
111
111
  ["TensorFlow GraphDef", "pb", ".pb", True, True, ["batch"]],
112
- ["TensorFlow Lite", "tflite", ".tflite", True, False, ["half", "int8", "batch"]],
112
+ ["TensorFlow Lite", "tflite", ".tflite", True, False, ["batch", "half", "int8"]],
113
113
  ["TensorFlow Edge TPU", "edgetpu", "_edgetpu.tflite", True, False, []],
114
- ["TensorFlow.js", "tfjs", "_web_model", True, False, ["half", "int8", "batch"]],
114
+ ["TensorFlow.js", "tfjs", "_web_model", True, False, ["batch", "half", "int8"]],
115
115
  ["PaddlePaddle", "paddle", "_paddle_model", True, True, ["batch"]],
116
- ["MNN", "mnn", ".mnn", True, True, ["batch", "int8", "half"]],
117
- ["NCNN", "ncnn", "_ncnn_model", True, True, ["half", "batch"]],
116
+ ["MNN", "mnn", ".mnn", True, True, ["batch", "half", "int8"]],
117
+ ["NCNN", "ncnn", "_ncnn_model", True, True, ["batch", "half"]],
118
118
  ["IMX", "imx", "_imx_model", True, True, ["int8"]],
119
119
  ]
120
120
  return dict(zip(["Format", "Argument", "Suffix", "CPU", "GPU", "Arguments"], zip(*x)))
@@ -813,7 +813,7 @@ class Exporter:
813
813
  workspace = int(self.args.workspace * (1 << 30)) if self.args.workspace is not None else 0
814
814
  if is_trt10 and workspace > 0:
815
815
  config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, workspace)
816
- elif workspace > 0 and not is_trt10: # TensorRT versions 7, 8
816
+ elif workspace > 0: # TensorRT versions 7, 8
817
817
  config.max_workspace_size = workspace
818
818
  flag = 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)
819
819
  network = builder.create_network(flag)