ultralytics 8.2.95__tar.gz → 8.2.96__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ultralytics might be problematic. Click here for more details.

Files changed (238) hide show
  1. {ultralytics-8.2.95/ultralytics.egg-info → ultralytics-8.2.96}/PKG-INFO +1 -1
  2. {ultralytics-8.2.95 → ultralytics-8.2.96}/tests/test_python.py +4 -1
  3. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/__init__.py +1 -1
  4. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/engine/results.py +85 -1
  5. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/engine/validator.py +2 -1
  6. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/solutions/parking_management.py +81 -111
  7. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/checks.py +3 -2
  8. {ultralytics-8.2.95 → ultralytics-8.2.96/ultralytics.egg-info}/PKG-INFO +1 -1
  9. {ultralytics-8.2.95 → ultralytics-8.2.96}/LICENSE +0 -0
  10. {ultralytics-8.2.95 → ultralytics-8.2.96}/README.md +0 -0
  11. {ultralytics-8.2.95 → ultralytics-8.2.96}/pyproject.toml +0 -0
  12. {ultralytics-8.2.95 → ultralytics-8.2.96}/setup.cfg +0 -0
  13. {ultralytics-8.2.95 → ultralytics-8.2.96}/tests/__init__.py +0 -0
  14. {ultralytics-8.2.95 → ultralytics-8.2.96}/tests/conftest.py +0 -0
  15. {ultralytics-8.2.95 → ultralytics-8.2.96}/tests/test_cli.py +0 -0
  16. {ultralytics-8.2.95 → ultralytics-8.2.96}/tests/test_cuda.py +0 -0
  17. {ultralytics-8.2.95 → ultralytics-8.2.96}/tests/test_engine.py +0 -0
  18. {ultralytics-8.2.95 → ultralytics-8.2.96}/tests/test_explorer.py +0 -0
  19. {ultralytics-8.2.95 → ultralytics-8.2.96}/tests/test_exports.py +0 -0
  20. {ultralytics-8.2.95 → ultralytics-8.2.96}/tests/test_integrations.py +0 -0
  21. {ultralytics-8.2.95 → ultralytics-8.2.96}/tests/test_solutions.py +0 -0
  22. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/assets/bus.jpg +0 -0
  23. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/assets/zidane.jpg +0 -0
  24. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/__init__.py +0 -0
  25. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  26. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  27. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  28. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  29. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  30. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  31. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  32. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  33. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  34. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  35. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  36. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  37. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  38. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/coco.yaml +0 -0
  39. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  40. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  41. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  42. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  43. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  44. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  45. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  46. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  47. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  48. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  49. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/signature.yaml +0 -0
  50. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  51. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/datasets/xView.yaml +0 -0
  52. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/default.yaml +0 -0
  53. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  54. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  55. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  56. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  57. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  58. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  59. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  60. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  61. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  62. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  63. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  64. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  65. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  66. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  67. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  68. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  69. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  70. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  71. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  72. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  73. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  74. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  75. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  76. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  77. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  78. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  79. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  80. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  81. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  82. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  83. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  84. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  85. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  86. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  87. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  88. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  89. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  90. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  91. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  92. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  93. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  94. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  95. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/__init__.py +0 -0
  96. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/annotator.py +0 -0
  97. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/augment.py +0 -0
  98. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/base.py +0 -0
  99. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/build.py +0 -0
  100. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/converter.py +0 -0
  101. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/dataset.py +0 -0
  102. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/explorer/__init__.py +0 -0
  103. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/explorer/explorer.py +0 -0
  104. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/explorer/gui/__init__.py +0 -0
  105. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/explorer/gui/dash.py +0 -0
  106. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/explorer/utils.py +0 -0
  107. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/loaders.py +0 -0
  108. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/split_dota.py +0 -0
  109. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/data/utils.py +0 -0
  110. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/engine/__init__.py +0 -0
  111. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/engine/exporter.py +0 -0
  112. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/engine/model.py +0 -0
  113. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/engine/predictor.py +0 -0
  114. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/engine/trainer.py +0 -0
  115. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/engine/tuner.py +0 -0
  116. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/hub/__init__.py +0 -0
  117. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/hub/auth.py +0 -0
  118. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/hub/google/__init__.py +0 -0
  119. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/hub/session.py +0 -0
  120. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/hub/utils.py +0 -0
  121. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/__init__.py +0 -0
  122. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/fastsam/__init__.py +0 -0
  123. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/fastsam/model.py +0 -0
  124. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/fastsam/predict.py +0 -0
  125. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/fastsam/utils.py +0 -0
  126. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/fastsam/val.py +0 -0
  127. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/nas/__init__.py +0 -0
  128. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/nas/model.py +0 -0
  129. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/nas/predict.py +0 -0
  130. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/nas/val.py +0 -0
  131. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/rtdetr/__init__.py +0 -0
  132. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/rtdetr/model.py +0 -0
  133. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/rtdetr/predict.py +0 -0
  134. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/rtdetr/train.py +0 -0
  135. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/rtdetr/val.py +0 -0
  136. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/sam/__init__.py +0 -0
  137. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/sam/amg.py +0 -0
  138. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/sam/build.py +0 -0
  139. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/sam/model.py +0 -0
  140. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/sam/modules/__init__.py +0 -0
  141. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/sam/modules/blocks.py +0 -0
  142. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/sam/modules/decoders.py +0 -0
  143. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/sam/modules/encoders.py +0 -0
  144. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  145. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/sam/modules/sam.py +0 -0
  146. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  147. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/sam/modules/transformer.py +0 -0
  148. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/sam/modules/utils.py +0 -0
  149. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/sam/predict.py +0 -0
  150. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/utils/__init__.py +0 -0
  151. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/utils/loss.py +0 -0
  152. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/utils/ops.py +0 -0
  153. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/__init__.py +0 -0
  154. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/classify/__init__.py +0 -0
  155. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/classify/predict.py +0 -0
  156. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/classify/train.py +0 -0
  157. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/classify/val.py +0 -0
  158. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/detect/__init__.py +0 -0
  159. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/detect/predict.py +0 -0
  160. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/detect/train.py +0 -0
  161. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/detect/val.py +0 -0
  162. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/model.py +0 -0
  163. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/obb/__init__.py +0 -0
  164. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/obb/predict.py +0 -0
  165. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/obb/train.py +0 -0
  166. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/obb/val.py +0 -0
  167. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/pose/__init__.py +0 -0
  168. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/pose/predict.py +0 -0
  169. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/pose/train.py +0 -0
  170. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/pose/val.py +0 -0
  171. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/segment/__init__.py +0 -0
  172. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/segment/predict.py +0 -0
  173. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/segment/train.py +0 -0
  174. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/segment/val.py +0 -0
  175. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/world/__init__.py +0 -0
  176. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/world/train.py +0 -0
  177. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/models/yolo/world/train_world.py +0 -0
  178. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/nn/__init__.py +0 -0
  179. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/nn/autobackend.py +0 -0
  180. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/nn/modules/__init__.py +0 -0
  181. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/nn/modules/activation.py +0 -0
  182. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/nn/modules/block.py +0 -0
  183. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/nn/modules/conv.py +0 -0
  184. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/nn/modules/head.py +0 -0
  185. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/nn/modules/transformer.py +0 -0
  186. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/nn/modules/utils.py +0 -0
  187. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/nn/tasks.py +0 -0
  188. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/solutions/__init__.py +0 -0
  189. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/solutions/ai_gym.py +0 -0
  190. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/solutions/analytics.py +0 -0
  191. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/solutions/distance_calculation.py +0 -0
  192. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/solutions/heatmap.py +0 -0
  193. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/solutions/object_counter.py +0 -0
  194. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/solutions/queue_management.py +0 -0
  195. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/solutions/speed_estimation.py +0 -0
  196. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/solutions/streamlit_inference.py +0 -0
  197. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/trackers/__init__.py +0 -0
  198. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/trackers/basetrack.py +0 -0
  199. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/trackers/bot_sort.py +0 -0
  200. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/trackers/byte_tracker.py +0 -0
  201. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/trackers/track.py +0 -0
  202. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/trackers/utils/__init__.py +0 -0
  203. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/trackers/utils/gmc.py +0 -0
  204. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  205. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/trackers/utils/matching.py +0 -0
  206. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/__init__.py +0 -0
  207. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/autobatch.py +0 -0
  208. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/benchmarks.py +0 -0
  209. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/callbacks/__init__.py +0 -0
  210. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/callbacks/base.py +0 -0
  211. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/callbacks/clearml.py +0 -0
  212. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/callbacks/comet.py +0 -0
  213. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/callbacks/dvc.py +0 -0
  214. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/callbacks/hub.py +0 -0
  215. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/callbacks/mlflow.py +0 -0
  216. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/callbacks/neptune.py +0 -0
  217. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/callbacks/raytune.py +0 -0
  218. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  219. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/callbacks/wb.py +0 -0
  220. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/dist.py +0 -0
  221. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/downloads.py +0 -0
  222. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/errors.py +0 -0
  223. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/files.py +0 -0
  224. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/instance.py +0 -0
  225. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/loss.py +0 -0
  226. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/metrics.py +0 -0
  227. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/ops.py +0 -0
  228. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/patches.py +0 -0
  229. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/plotting.py +0 -0
  230. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/tal.py +0 -0
  231. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/torch_utils.py +0 -0
  232. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/triton.py +0 -0
  233. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics/utils/tuner.py +0 -0
  234. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics.egg-info/SOURCES.txt +0 -0
  235. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics.egg-info/dependency_links.txt +0 -0
  236. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics.egg-info/entry_points.txt +0 -0
  237. {ultralytics-8.2.95 → ultralytics-8.2.96}/ultralytics.egg-info/requires.txt +0 -0
  238. {ultralytics-8.2.95 → ultralytics-8.2.96}/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.2.95
3
+ Version: 8.2.96
4
4
  Summary: Ultralytics YOLO for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
6
6
  Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
@@ -269,7 +269,10 @@ def test_results(model):
269
269
  r = r.to(device="cpu", dtype=torch.float32)
270
270
  r.save_txt(txt_file=TMP / "runs/tests/label.txt", save_conf=True)
271
271
  r.save_crop(save_dir=TMP / "runs/tests/crops/")
272
- r.tojson(normalize=True)
272
+ r.to_json(normalize=True)
273
+ r.to_df(decimals=3)
274
+ r.to_csv()
275
+ r.to_xml()
273
276
  r.plot(pil=True)
274
277
  r.plot(conf=True, boxes=True)
275
278
  print(r, len(r), r.path) # print after methods
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.95"
3
+ __version__ = "8.2.96"
4
4
 
5
5
 
6
6
  import os
@@ -14,6 +14,7 @@ import torch
14
14
 
15
15
  from ultralytics.data.augment import LetterBox
16
16
  from ultralytics.utils import LOGGER, SimpleClass, ops
17
+ from ultralytics.utils.checks import check_requirements
17
18
  from ultralytics.utils.plotting import Annotator, colors, save_one_box
18
19
  from ultralytics.utils.torch_utils import smart_inference_mode
19
20
 
@@ -818,7 +819,90 @@ class Results(SimpleClass):
818
819
 
819
820
  return results
820
821
 
822
+ def to_df(self, normalize=False, decimals=5):
823
+ """
824
+ Converts detection results to a Pandas Dataframe.
825
+
826
+ This method converts the detection results into Pandas Dataframe format. It includes information
827
+ about detected objects such as bounding boxes, class names, confidence scores, and optionally
828
+ segmentation masks and keypoints.
829
+
830
+ Args:
831
+ normalize (bool): Whether to normalize the bounding box coordinates by the image dimensions.
832
+ If True, coordinates will be returned as float values between 0 and 1. Defaults to False.
833
+ decimals (int): Number of decimal places to round the output values to. Defaults to 5.
834
+
835
+ Returns:
836
+ (DataFrame): A Pandas Dataframe containing all the information in results in an organized way.
837
+
838
+ Examples:
839
+ >>> results = model("path/to/image.jpg")
840
+ >>> df_result = results[0].to_df()
841
+ >>> print(df_result)
842
+ """
843
+ import pandas as pd
844
+
845
+ return pd.DataFrame(self.summary(normalize=normalize, decimals=decimals))
846
+
847
+ def to_csv(self, normalize=False, decimals=5, *args, **kwargs):
848
+ """
849
+ Converts detection results to a CSV format.
850
+
851
+ This method serializes the detection results into a CSV format. It includes information
852
+ about detected objects such as bounding boxes, class names, confidence scores, and optionally
853
+ segmentation masks and keypoints.
854
+
855
+ Args:
856
+ normalize (bool): Whether to normalize the bounding box coordinates by the image dimensions.
857
+ If True, coordinates will be returned as float values between 0 and 1. Defaults to False.
858
+ decimals (int): Number of decimal places to round the output values to. Defaults to 5.
859
+ *args (Any): Variable length argument list to be passed to pandas.DataFrame.to_csv().
860
+ **kwargs (Any): Arbitrary keyword arguments to be passed to pandas.DataFrame.to_csv().
861
+
862
+
863
+ Returns:
864
+ (str): CSV containing all the information in results in an organized way.
865
+
866
+ Examples:
867
+ >>> results = model("path/to/image.jpg")
868
+ >>> csv_result = results[0].to_csv()
869
+ >>> print(csv_result)
870
+ """
871
+ return self.to_df(normalize=normalize, decimals=decimals).to_csv(*args, **kwargs)
872
+
873
+ def to_xml(self, normalize=False, decimals=5, *args, **kwargs):
874
+ """
875
+ Converts detection results to XML format.
876
+
877
+ This method serializes the detection results into an XML format. It includes information
878
+ about detected objects such as bounding boxes, class names, confidence scores, and optionally
879
+ segmentation masks and keypoints.
880
+
881
+ Args:
882
+ normalize (bool): Whether to normalize the bounding box coordinates by the image dimensions.
883
+ If True, coordinates will be returned as float values between 0 and 1. Defaults to False.
884
+ decimals (int): Number of decimal places to round the output values to. Defaults to 5.
885
+ *args (Any): Variable length argument list to be passed to pandas.DataFrame.to_xml().
886
+ **kwargs (Any): Arbitrary keyword arguments to be passed to pandas.DataFrame.to_xml().
887
+
888
+ Returns:
889
+ (str): An XML string containing all the information in results in an organized way.
890
+
891
+ Examples:
892
+ >>> results = model("path/to/image.jpg")
893
+ >>> xml_result = results[0].to_xml()
894
+ >>> print(xml_result)
895
+ """
896
+ check_requirements("lxml")
897
+ df = self.to_df(normalize=normalize, decimals=decimals)
898
+ return '<?xml version="1.0" encoding="utf-8"?>\n<root></root>' if df.empty else df.to_xml(*args, **kwargs)
899
+
821
900
  def tojson(self, normalize=False, decimals=5):
901
+ """Deprecated version of to_json()."""
902
+ LOGGER.warning("WARNING ⚠️ 'result.tojson()' is deprecated, replace with 'result.to_json()'.")
903
+ return self.to_json(normalize, decimals)
904
+
905
+ def to_json(self, normalize=False, decimals=5):
822
906
  """
823
907
  Converts detection results to JSON format.
824
908
 
@@ -836,7 +920,7 @@ class Results(SimpleClass):
836
920
 
837
921
  Examples:
838
922
  >>> results = model("path/to/image.jpg")
839
- >>> json_result = results[0].tojson()
923
+ >>> json_result = results[0].to_json()
840
924
  >>> print(json_result)
841
925
 
842
926
  Notes:
@@ -110,7 +110,8 @@ class BaseValidator:
110
110
  if self.training:
111
111
  self.device = trainer.device
112
112
  self.data = trainer.data
113
- self.args.half = self.device.type != "cpu" # force FP16 val during training
113
+ # force FP16 val during training
114
+ self.args.half = self.device.type != "cpu" and trainer.amp
114
115
  model = trainer.ema.ema or trainer.model
115
116
  model = model.half() if self.args.half else model.float()
116
117
  # self.model = model
@@ -42,10 +42,10 @@ class ParkingPtsSelection:
42
42
  self.image_path = None
43
43
  self.image = None
44
44
  self.canvas_image = None
45
- self.bounding_boxes = []
45
+ self.rg_data = [] # region coordinates
46
46
  self.current_box = []
47
- self.img_width = 0
48
- self.img_height = 0
47
+ self.imgw = 0 # image width
48
+ self.imgh = 0 # image height
49
49
 
50
50
  # Constants
51
51
  self.canvas_max_width = 1280
@@ -64,17 +64,17 @@ class ParkingPtsSelection:
64
64
  return
65
65
 
66
66
  self.image = Image.open(self.image_path)
67
- self.img_width, self.img_height = self.image.size
67
+ self.imgw, self.imgh = self.image.size
68
68
 
69
69
  # Calculate the aspect ratio and resize image
70
- aspect_ratio = self.img_width / self.img_height
70
+ aspect_ratio = self.imgw / self.imgh
71
71
  if aspect_ratio > 1:
72
72
  # Landscape orientation
73
- canvas_width = min(self.canvas_max_width, self.img_width)
73
+ canvas_width = min(self.canvas_max_width, self.imgw)
74
74
  canvas_height = int(canvas_width / aspect_ratio)
75
75
  else:
76
76
  # Portrait orientation
77
- canvas_height = min(self.canvas_max_height, self.img_height)
77
+ canvas_height = min(self.canvas_max_height, self.imgh)
78
78
  canvas_width = int(canvas_height * aspect_ratio)
79
79
 
80
80
  # Check if canvas is already initialized
@@ -90,46 +90,34 @@ class ParkingPtsSelection:
90
90
  self.canvas.bind("<Button-1>", self.on_canvas_click)
91
91
 
92
92
  # Reset bounding boxes and current box
93
- self.bounding_boxes = []
93
+ self.rg_data = []
94
94
  self.current_box = []
95
95
 
96
96
  def on_canvas_click(self, event):
97
97
  """Handle mouse clicks on canvas to create points for bounding boxes."""
98
98
  self.current_box.append((event.x, event.y))
99
- x0, y0 = event.x - 3, event.y - 3
100
- x1, y1 = event.x + 3, event.y + 3
101
- self.canvas.create_oval(x0, y0, x1, y1, fill="red")
99
+ self.canvas.create_oval(event.x - 3, event.y - 3, event.x + 3, event.y + 3, fill="red")
102
100
 
103
101
  if len(self.current_box) == 4:
104
- self.bounding_boxes.append(self.current_box)
105
- self.draw_bounding_box(self.current_box)
102
+ self.rg_data.append(self.current_box)
103
+ [
104
+ self.canvas.create_line(self.current_box[i], self.current_box[(i + 1) % 4], fill="blue", width=2)
105
+ for i in range(4)
106
+ ]
106
107
  self.current_box = []
107
108
 
108
- def draw_bounding_box(self, box):
109
- """
110
- Draw bounding box on canvas.
111
-
112
- Args:
113
- box (list): Bounding box data
114
- """
115
- for i in range(4):
116
- x1, y1 = box[i]
117
- x2, y2 = box[(i + 1) % 4]
118
- self.canvas.create_line(x1, y1, x2, y2, fill="blue", width=2)
119
-
120
109
  def remove_last_bounding_box(self):
121
110
  """Remove the last drawn bounding box from canvas."""
122
111
  from tkinter import messagebox # scope for multi-environment compatibility
123
112
 
124
- if self.bounding_boxes:
125
- self.bounding_boxes.pop() # Remove the last bounding box
113
+ if self.rg_data:
114
+ self.rg_data.pop() # Remove the last bounding box
126
115
  self.canvas.delete("all") # Clear the canvas
127
116
  self.canvas.create_image(0, 0, anchor=self.tk.NW, image=self.canvas_image) # Redraw the image
128
117
 
129
118
  # Redraw all bounding boxes
130
- for box in self.bounding_boxes:
131
- self.draw_bounding_box(box)
132
-
119
+ for box in self.rg_data:
120
+ [self.canvas.create_line(box[i], box[(i + 1) % 4], fill="blue", width=2) for i in range(4)]
133
121
  messagebox.showinfo("Success", "Last bounding box removed.")
134
122
  else:
135
123
  messagebox.showwarning("Warning", "No bounding boxes to remove.")
@@ -138,19 +126,19 @@ class ParkingPtsSelection:
138
126
  """Saves rescaled bounding boxes to 'bounding_boxes.json' based on image-to-canvas size ratio."""
139
127
  from tkinter import messagebox # scope for multi-environment compatibility
140
128
 
141
- canvas_width, canvas_height = self.canvas.winfo_width(), self.canvas.winfo_height()
142
- width_scaling_factor = self.img_width / canvas_width
143
- height_scaling_factor = self.img_height / canvas_height
144
- bounding_boxes_data = []
145
- for box in self.bounding_boxes:
146
- rescaled_box = []
129
+ rg_data = [] # regions data
130
+ for box in self.rg_data:
131
+ rs_box = [] # rescaled box list
147
132
  for x, y in box:
148
- rescaled_x = int(x * width_scaling_factor)
149
- rescaled_y = int(y * height_scaling_factor)
150
- rescaled_box.append((rescaled_x, rescaled_y))
151
- bounding_boxes_data.append({"points": rescaled_box})
133
+ rs_box.append(
134
+ (
135
+ int(x * self.imgw / self.canvas.winfo_width()), # width scaling
136
+ int(y * self.imgh / self.canvas.winfo_height()),
137
+ )
138
+ ) # height scaling
139
+ rg_data.append({"points": rs_box})
152
140
  with open("bounding_boxes.json", "w") as f:
153
- json.dump(bounding_boxes_data, f, indent=4)
141
+ json.dump(rg_data, f, indent=4)
154
142
 
155
143
  messagebox.showinfo("Success", "Bounding boxes saved to bounding_boxes.json")
156
144
 
@@ -160,102 +148,85 @@ class ParkingManagement:
160
148
 
161
149
  def __init__(
162
150
  self,
163
- model_path,
164
- txt_color=(0, 0, 0),
165
- bg_color=(255, 255, 255),
166
- occupied_region_color=(0, 255, 0),
167
- available_region_color=(0, 0, 255),
168
- margin=10,
151
+ model, # Ultralytics YOLO model file path
152
+ json_file, # Parking management annotation file created from Parking Annotator
153
+ occupied_region_color=(0, 0, 255), # occupied region color
154
+ available_region_color=(0, 255, 0), # available region color
169
155
  ):
170
156
  """
171
157
  Initializes the parking management system with a YOLOv8 model and visualization settings.
172
158
 
173
159
  Args:
174
- model_path (str): Path to the YOLOv8 model.
175
- txt_color (tuple): RGB color tuple for text.
176
- bg_color (tuple): RGB color tuple for background.
160
+ model (str): Path to the YOLOv8 model.
161
+ json_file (str): file that have all parking slot points data
177
162
  occupied_region_color (tuple): RGB color tuple for occupied regions.
178
163
  available_region_color (tuple): RGB color tuple for available regions.
179
- margin (int): Margin for text display.
180
164
  """
181
- # Model path and initialization
182
- self.model_path = model_path
183
- self.model = self.load_model()
184
-
185
- # Labels dictionary
186
- self.labels_dict = {"Occupancy": 0, "Available": 0}
187
-
188
- # Visualization details
189
- self.margin = margin
190
- self.bg_color = bg_color
191
- self.txt_color = txt_color
192
- self.occupied_region_color = occupied_region_color
193
- self.available_region_color = available_region_color
194
-
195
- self.window_name = "Ultralytics YOLOv8 Parking Management System"
196
- # Check if environment supports imshow
197
- self.env_check = check_imshow(warn=True)
198
-
199
- def load_model(self):
200
- """Load the Ultralytics YOLO model for inference and analytics."""
165
+ # Model initialization
201
166
  from ultralytics import YOLO
202
167
 
203
- return YOLO(self.model_path)
204
-
205
- @staticmethod
206
- def parking_regions_extraction(json_file):
207
- """
208
- Extract parking regions from json file.
168
+ self.model = YOLO(model)
209
169
 
210
- Args:
211
- json_file (str): file that have all parking slot points
212
- """
170
+ # Load JSON data
213
171
  with open(json_file) as f:
214
- return json.load(f)
172
+ self.json_data = json.load(f)
215
173
 
216
- def process_data(self, json_data, im0, boxes, clss):
174
+ self.pr_info = {"Occupancy": 0, "Available": 0} # dictionary for parking information
175
+
176
+ self.occ = occupied_region_color
177
+ self.arc = available_region_color
178
+
179
+ self.env_check = check_imshow(warn=True) # check if environment supports imshow
180
+
181
+ def process_data(self, im0):
217
182
  """
218
183
  Process the model data for parking lot management.
219
184
 
220
185
  Args:
221
- json_data (str): json data for parking lot management
222
186
  im0 (ndarray): inference image
223
- boxes (list): bounding boxes data
224
- clss (list): bounding boxes classes list
225
-
226
- Returns:
227
- filled_slots (int): total slots that are filled in parking lot
228
- empty_slots (int): total slots that are available in parking lot
229
187
  """
230
- annotator = Annotator(im0)
231
- empty_slots, filled_slots = len(json_data), 0
232
- for region in json_data:
233
- points_array = np.array(region["points"], dtype=np.int32).reshape((-1, 1, 2))
234
- region_occupied = False
188
+ results = self.model.track(im0, persist=True, show=False) # object tracking
235
189
 
236
- for box, cls in zip(boxes, clss):
237
- x_center = int((box[0] + box[2]) / 2)
238
- y_center = int((box[1] + box[3]) / 2)
239
- text = f"{self.model.names[int(cls)]}"
190
+ es, fs = len(self.json_data), 0 # empty slots, filled slots
191
+ annotator = Annotator(im0) # init annotator
240
192
 
193
+ # extract tracks data
194
+ if results[0].boxes.id is None:
195
+ self.display_frames(im0)
196
+ return im0
197
+
198
+ boxes = results[0].boxes.xyxy.cpu().tolist()
199
+ clss = results[0].boxes.cls.cpu().tolist()
200
+
201
+ for region in self.json_data:
202
+ # Convert points to a NumPy array with the correct dtype and reshape properly
203
+ pts_array = np.array(region["points"], dtype=np.int32).reshape((-1, 1, 2))
204
+ rg_occupied = False # occupied region initialization
205
+ for box, cls in zip(boxes, clss):
206
+ xc = int((box[0] + box[2]) / 2)
207
+ yc = int((box[1] + box[3]) / 2)
241
208
  annotator.display_objects_labels(
242
- im0, text, self.txt_color, self.bg_color, x_center, y_center, self.margin
209
+ im0, self.model.names[int(cls)], (104, 31, 17), (255, 255, 255), xc, yc, 10
243
210
  )
244
- dist = cv2.pointPolygonTest(points_array, (x_center, y_center), False)
211
+ dist = cv2.pointPolygonTest(pts_array, (xc, yc), False)
245
212
  if dist >= 0:
246
- region_occupied = True
213
+ rg_occupied = True
247
214
  break
215
+ if rg_occupied:
216
+ fs += 1
217
+ es -= 1
218
+
219
+ # Plotting regions
220
+ color = self.occ if rg_occupied else self.arc
221
+ cv2.polylines(im0, [pts_array], isClosed=True, color=color, thickness=2)
248
222
 
249
- color = self.occupied_region_color if region_occupied else self.available_region_color
250
- cv2.polylines(im0, [points_array], isClosed=True, color=color, thickness=2)
251
- if region_occupied:
252
- filled_slots += 1
253
- empty_slots -= 1
223
+ self.pr_info["Occupancy"] = fs
224
+ self.pr_info["Available"] = es
254
225
 
255
- self.labels_dict["Occupancy"] = filled_slots
256
- self.labels_dict["Available"] = empty_slots
226
+ annotator.display_analytics(im0, self.pr_info, (104, 31, 17), (255, 255, 255), 10)
257
227
 
258
- annotator.display_analytics(im0, self.labels_dict, self.txt_color, self.bg_color, self.margin)
228
+ self.display_frames(im0)
229
+ return im0
259
230
 
260
231
  def display_frames(self, im0):
261
232
  """
@@ -265,8 +236,7 @@ class ParkingManagement:
265
236
  im0 (ndarray): inference image
266
237
  """
267
238
  if self.env_check:
268
- cv2.namedWindow(self.window_name)
269
- cv2.imshow(self.window_name, im0)
239
+ cv2.imshow("Ultralytics Parking Manager", im0)
270
240
  # Break Window
271
241
  if cv2.waitKey(1) & 0xFF == ord("q"):
272
242
  return
@@ -656,9 +656,10 @@ def check_amp(model):
656
656
 
657
657
  def amp_allclose(m, im):
658
658
  """All close FP32 vs AMP results."""
659
- a = m(im, device=device, verbose=False)[0].boxes.data # FP32 inference
659
+ batch = [im] * 8
660
+ a = m(batch, imgsz=128, device=device, verbose=False)[0].boxes.data # FP32 inference
660
661
  with autocast(enabled=True):
661
- b = m(im, device=device, verbose=False)[0].boxes.data # AMP inference
662
+ b = m(batch, imgsz=128, device=device, verbose=False)[0].boxes.data # AMP inference
662
663
  del m
663
664
  return a.shape == b.shape and torch.allclose(a, b.float(), atol=0.5) # close to 0.5 absolute tolerance
664
665
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.95
3
+ Version: 8.2.96
4
4
  Summary: Ultralytics YOLO for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
6
6
  Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
File without changes
File without changes
File without changes