dgenerate-ultralytics-headless 8.3.154__tar.gz → 8.3.156__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 (278) hide show
  1. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/PKG-INFO +1 -1
  2. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/dgenerate_ultralytics_headless.egg-info/PKG-INFO +1 -1
  3. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/__init__.py +1 -1
  4. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/build.py +3 -1
  5. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/engine/exporter.py +3 -28
  6. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/classify/train.py +2 -3
  7. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/detect/train.py +4 -1
  8. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/nn/tasks.py +0 -1
  9. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/ai_gym.py +3 -2
  10. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/analytics.py +2 -2
  11. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/config.py +2 -2
  12. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/distance_calculation.py +1 -1
  13. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/heatmap.py +5 -3
  14. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/instance_segmentation.py +4 -2
  15. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/object_blurrer.py +4 -2
  16. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/object_counter.py +5 -5
  17. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/object_cropper.py +3 -2
  18. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/parking_management.py +9 -9
  19. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/queue_management.py +4 -2
  20. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/region_counter.py +13 -5
  21. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/security_alarm.py +6 -4
  22. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/similarity_search.py +6 -6
  23. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/solutions.py +7 -7
  24. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/speed_estimation.py +3 -2
  25. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/streamlit_inference.py +6 -6
  26. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/trackzone.py +4 -2
  27. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/vision_eye.py +4 -2
  28. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/export.py +7 -2
  29. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/patches.py +48 -1
  30. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/LICENSE +0 -0
  31. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/README.md +0 -0
  32. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/dgenerate_ultralytics_headless.egg-info/SOURCES.txt +0 -0
  33. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/dgenerate_ultralytics_headless.egg-info/dependency_links.txt +0 -0
  34. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/dgenerate_ultralytics_headless.egg-info/entry_points.txt +0 -0
  35. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/dgenerate_ultralytics_headless.egg-info/requires.txt +0 -0
  36. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/dgenerate_ultralytics_headless.egg-info/top_level.txt +0 -0
  37. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/pyproject.toml +0 -0
  38. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/setup.cfg +0 -0
  39. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/tests/__init__.py +0 -0
  40. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/tests/conftest.py +0 -0
  41. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/tests/test_cli.py +0 -0
  42. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/tests/test_cuda.py +0 -0
  43. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/tests/test_engine.py +0 -0
  44. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/tests/test_exports.py +0 -0
  45. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/tests/test_integrations.py +0 -0
  46. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/tests/test_python.py +0 -0
  47. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/tests/test_solutions.py +0 -0
  48. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/assets/bus.jpg +0 -0
  49. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/assets/zidane.jpg +0 -0
  50. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/__init__.py +0 -0
  51. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  52. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  53. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  54. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  55. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  56. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  57. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  58. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  59. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  60. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  61. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  62. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  63. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  64. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  65. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/coco.yaml +0 -0
  66. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  67. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  68. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
  69. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  70. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  71. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  72. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  73. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  74. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  75. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  76. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  77. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  78. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  79. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  80. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  81. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  82. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/signature.yaml +0 -0
  83. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  84. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/datasets/xView.yaml +0 -0
  85. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/default.yaml +0 -0
  86. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  87. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  88. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  89. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  90. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  91. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  92. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  93. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  94. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  95. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  96. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  97. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  98. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  99. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  100. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  101. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  102. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  103. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  104. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  105. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  106. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  107. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  108. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  109. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  110. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  111. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  112. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  113. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  114. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  115. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  116. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  117. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  118. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  119. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  120. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  121. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  122. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  123. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  124. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  125. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  126. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  127. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  128. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  129. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  130. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  131. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  132. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  133. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  134. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  135. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  136. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  137. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  138. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  139. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  140. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  141. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  142. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  143. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/__init__.py +0 -0
  144. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/annotator.py +0 -0
  145. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/augment.py +0 -0
  146. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/base.py +0 -0
  147. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/converter.py +0 -0
  148. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/dataset.py +0 -0
  149. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/loaders.py +0 -0
  150. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/scripts/download_weights.sh +0 -0
  151. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/scripts/get_coco.sh +0 -0
  152. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/scripts/get_coco128.sh +0 -0
  153. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  154. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/split.py +0 -0
  155. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/split_dota.py +0 -0
  156. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/data/utils.py +0 -0
  157. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/engine/__init__.py +0 -0
  158. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/engine/model.py +0 -0
  159. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/engine/predictor.py +0 -0
  160. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/engine/results.py +0 -0
  161. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/engine/trainer.py +0 -0
  162. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/engine/tuner.py +0 -0
  163. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/engine/validator.py +0 -0
  164. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/hub/__init__.py +0 -0
  165. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/hub/auth.py +0 -0
  166. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/hub/google/__init__.py +0 -0
  167. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/hub/session.py +0 -0
  168. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/hub/utils.py +0 -0
  169. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/__init__.py +0 -0
  170. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/fastsam/__init__.py +0 -0
  171. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/fastsam/model.py +0 -0
  172. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/fastsam/predict.py +0 -0
  173. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/fastsam/utils.py +0 -0
  174. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/fastsam/val.py +0 -0
  175. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/nas/__init__.py +0 -0
  176. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/nas/model.py +0 -0
  177. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/nas/predict.py +0 -0
  178. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/nas/val.py +0 -0
  179. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/rtdetr/__init__.py +0 -0
  180. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/rtdetr/model.py +0 -0
  181. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/rtdetr/predict.py +0 -0
  182. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/rtdetr/train.py +0 -0
  183. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/rtdetr/val.py +0 -0
  184. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/sam/__init__.py +0 -0
  185. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/sam/amg.py +0 -0
  186. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/sam/build.py +0 -0
  187. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/sam/model.py +0 -0
  188. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/sam/modules/__init__.py +0 -0
  189. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/sam/modules/blocks.py +0 -0
  190. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/sam/modules/decoders.py +0 -0
  191. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/sam/modules/encoders.py +0 -0
  192. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  193. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/sam/modules/sam.py +0 -0
  194. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  195. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/sam/modules/transformer.py +0 -0
  196. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/sam/modules/utils.py +0 -0
  197. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/sam/predict.py +0 -0
  198. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/utils/__init__.py +0 -0
  199. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/utils/loss.py +0 -0
  200. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/utils/ops.py +0 -0
  201. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/__init__.py +0 -0
  202. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/classify/__init__.py +0 -0
  203. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/classify/predict.py +0 -0
  204. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/classify/val.py +0 -0
  205. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/detect/__init__.py +0 -0
  206. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/detect/predict.py +0 -0
  207. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/detect/val.py +0 -0
  208. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/model.py +0 -0
  209. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/obb/__init__.py +0 -0
  210. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/obb/predict.py +0 -0
  211. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/obb/train.py +0 -0
  212. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/obb/val.py +0 -0
  213. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/pose/__init__.py +0 -0
  214. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/pose/predict.py +0 -0
  215. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/pose/train.py +0 -0
  216. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/pose/val.py +0 -0
  217. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/segment/__init__.py +0 -0
  218. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/segment/predict.py +0 -0
  219. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/segment/train.py +0 -0
  220. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/segment/val.py +0 -0
  221. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/world/__init__.py +0 -0
  222. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/world/train.py +0 -0
  223. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/world/train_world.py +0 -0
  224. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  225. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  226. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/yoloe/train.py +0 -0
  227. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  228. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/models/yolo/yoloe/val.py +0 -0
  229. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/nn/__init__.py +0 -0
  230. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/nn/autobackend.py +0 -0
  231. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/nn/modules/__init__.py +0 -0
  232. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/nn/modules/activation.py +0 -0
  233. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/nn/modules/block.py +0 -0
  234. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/nn/modules/conv.py +0 -0
  235. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/nn/modules/head.py +0 -0
  236. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/nn/modules/transformer.py +0 -0
  237. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/nn/modules/utils.py +0 -0
  238. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/nn/text_model.py +0 -0
  239. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/__init__.py +0 -0
  240. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/solutions/templates/similarity-search.html +0 -0
  241. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/trackers/__init__.py +0 -0
  242. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/trackers/basetrack.py +0 -0
  243. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/trackers/bot_sort.py +0 -0
  244. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/trackers/byte_tracker.py +0 -0
  245. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/trackers/track.py +0 -0
  246. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/trackers/utils/__init__.py +0 -0
  247. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/trackers/utils/gmc.py +0 -0
  248. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  249. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/trackers/utils/matching.py +0 -0
  250. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/__init__.py +0 -0
  251. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/autobatch.py +0 -0
  252. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/autodevice.py +0 -0
  253. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/benchmarks.py +0 -0
  254. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/callbacks/__init__.py +0 -0
  255. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/callbacks/base.py +0 -0
  256. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/callbacks/clearml.py +0 -0
  257. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/callbacks/comet.py +0 -0
  258. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/callbacks/dvc.py +0 -0
  259. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/callbacks/hub.py +0 -0
  260. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/callbacks/mlflow.py +0 -0
  261. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/callbacks/neptune.py +0 -0
  262. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/callbacks/raytune.py +0 -0
  263. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  264. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/callbacks/wb.py +0 -0
  265. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/checks.py +0 -0
  266. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/dist.py +0 -0
  267. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/downloads.py +0 -0
  268. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/errors.py +0 -0
  269. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/files.py +0 -0
  270. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/instance.py +0 -0
  271. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/loss.py +0 -0
  272. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/metrics.py +0 -0
  273. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/ops.py +0 -0
  274. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/plotting.py +0 -0
  275. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/tal.py +0 -0
  276. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/torch_utils.py +0 -0
  277. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/triton.py +0 -0
  278. {dgenerate_ultralytics_headless-8.3.154 → dgenerate_ultralytics_headless-8.3.156}/ultralytics/utils/tuner.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dgenerate-ultralytics-headless
3
- Version: 8.3.154
3
+ Version: 8.3.156
4
4
  Summary: Automatically built Ultralytics package with python-opencv-headless dependency instead of python-opencv
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dgenerate-ultralytics-headless
3
- Version: 8.3.154
3
+ Version: 8.3.156
4
4
  Summary: Automatically built Ultralytics package with python-opencv-headless dependency instead of python-opencv
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.154"
3
+ __version__ = "8.3.156"
4
4
 
5
5
  import os
6
6
 
@@ -154,7 +154,7 @@ def build_grounding(cfg, img_path, json_file, batch, mode="train", rect=False, s
154
154
  )
155
155
 
156
156
 
157
- def build_dataloader(dataset, batch: int, workers: int, shuffle: bool = True, rank: int = -1):
157
+ def build_dataloader(dataset, batch: int, workers: int, shuffle: bool = True, rank: int = -1, drop_last: bool = False):
158
158
  """
159
159
  Create and return an InfiniteDataLoader or DataLoader for training or validation.
160
160
 
@@ -164,6 +164,7 @@ def build_dataloader(dataset, batch: int, workers: int, shuffle: bool = True, ra
164
164
  workers (int): Number of worker threads for loading data.
165
165
  shuffle (bool, optional): Whether to shuffle the dataset.
166
166
  rank (int, optional): Process rank in distributed training. -1 for single-GPU training.
167
+ drop_last (bool, optional): Whether to drop the last incomplete batch.
167
168
 
168
169
  Returns:
169
170
  (InfiniteDataLoader): A dataloader that can be used for training or validation.
@@ -189,6 +190,7 @@ def build_dataloader(dataset, batch: int, workers: int, shuffle: bool = True, ra
189
190
  collate_fn=getattr(dataset, "collate_fn", None),
190
191
  worker_init_fn=seed_worker,
191
192
  generator=generator,
193
+ drop_last=drop_last,
192
194
  )
193
195
 
194
196
 
@@ -62,7 +62,6 @@ import shutil
62
62
  import subprocess
63
63
  import time
64
64
  import warnings
65
- from contextlib import contextmanager
66
65
  from copy import deepcopy
67
66
  from datetime import datetime
68
67
  from pathlib import Path
@@ -107,6 +106,7 @@ from ultralytics.utils.downloads import attempt_download_asset, get_github_asset
107
106
  from ultralytics.utils.export import export_engine, export_onnx
108
107
  from ultralytics.utils.files import file_size, spaces_in_path
109
108
  from ultralytics.utils.ops import Profile, nms_rotated
109
+ from ultralytics.utils.patches import arange_patch
110
110
  from ultralytics.utils.torch_utils import TORCH_1_13, get_cpu_info, get_latest_opset, select_device
111
111
 
112
112
 
@@ -199,27 +199,6 @@ def try_export(inner_func):
199
199
  return outer_func
200
200
 
201
201
 
202
- @contextmanager
203
- def arange_patch(args):
204
- """
205
- Workaround for ONNX torch.arange incompatibility with FP16.
206
-
207
- https://github.com/pytorch/pytorch/issues/148041.
208
- """
209
- if args.dynamic and args.half and args.format == "onnx":
210
- func = torch.arange
211
-
212
- def arange(*args, dtype=None, **kwargs):
213
- """Return a 1-D tensor of size with values from the interval and common difference."""
214
- return func(*args, **kwargs).to(dtype) # cast to dtype instead of passing dtype
215
-
216
- torch.arange = arange # patch
217
- yield
218
- torch.arange = func # unpatch
219
- else:
220
- yield
221
-
222
-
223
202
  class Exporter:
224
203
  """
225
204
  A class for exporting YOLO models to various formats.
@@ -345,8 +324,6 @@ class Exporter:
345
324
  LOGGER.warning("half=True only compatible with GPU export, i.e. use device=0")
346
325
  self.args.half = False
347
326
  self.imgsz = check_imgsz(self.args.imgsz, stride=model.stride, min_dim=2) # check image size
348
- if self.args.int8 and engine:
349
- self.args.dynamic = True # enforce dynamic to export TensorRT INT8
350
327
  if self.args.optimize:
351
328
  assert not ncnn, "optimize=True not compatible with format='ncnn', i.e. use optimize=False"
352
329
  assert self.device.type == "cpu", "optimize=True not compatible with cuda devices, i.e. use device='cpu'"
@@ -555,8 +532,6 @@ class Exporter:
555
532
  """Build and return a dataloader for calibration of INT8 models."""
556
533
  LOGGER.info(f"{prefix} collecting INT8 calibration images from 'data={self.args.data}'")
557
534
  data = (check_cls_dataset if self.model.task == "classify" else check_det_dataset)(self.args.data)
558
- # TensorRT INT8 calibration should use 2x batch size
559
- batch = self.args.batch * (2 if self.args.format == "engine" else 1)
560
535
  dataset = YOLODataset(
561
536
  data[self.args.split or "val"],
562
537
  data=data,
@@ -564,7 +539,7 @@ class Exporter:
564
539
  task=self.model.task,
565
540
  imgsz=self.imgsz[0],
566
541
  augment=False,
567
- batch_size=batch,
542
+ batch_size=self.args.batch,
568
543
  )
569
544
  n = len(dataset)
570
545
  if n < self.args.batch:
@@ -574,7 +549,7 @@ class Exporter:
574
549
  )
575
550
  elif n < 300:
576
551
  LOGGER.warning(f"{prefix} >300 images recommended for INT8 calibration, found {n} images.")
577
- return build_dataloader(dataset, batch=batch, workers=0) # required for batch loading
552
+ return build_dataloader(dataset, batch=self.args.batch, workers=0, drop_last=True) # required for batch loading
578
553
 
579
554
  @try_export
580
555
  def export_torchscript(self, prefix=colorstr("TorchScript:")):
@@ -228,10 +228,9 @@ class ClassificationTrainer(BaseTrainer):
228
228
  batch (Dict[str, torch.Tensor]): Batch containing images and class labels.
229
229
  ni (int): Number of iterations.
230
230
  """
231
+ batch["batch_idx"] = torch.arange(len(batch["img"])) # add batch index for plotting
231
232
  plot_images(
232
- images=batch["img"],
233
- batch_idx=torch.arange(len(batch["img"])),
234
- cls=batch["cls"].view(-1), # warning: use .view(), not .squeeze() for Classify models
233
+ labels=batch,
235
234
  fname=self.save_dir / f"train_batch{ni}.jpg",
236
235
  on_plot=self.on_plot,
237
236
  )
@@ -13,6 +13,7 @@ from ultralytics.engine.trainer import BaseTrainer
13
13
  from ultralytics.models import yolo
14
14
  from ultralytics.nn.tasks import DetectionModel
15
15
  from ultralytics.utils import LOGGER, RANK
16
+ from ultralytics.utils.patches import override_configs
16
17
  from ultralytics.utils.plotting import plot_images, plot_labels, plot_results
17
18
  from ultralytics.utils.torch_utils import de_parallel, torch_distributed_zero_first
18
19
 
@@ -210,6 +211,8 @@ class DetectionTrainer(BaseTrainer):
210
211
  Returns:
211
212
  (int): Optimal batch size.
212
213
  """
213
- train_dataset = self.build_dataset(self.data["train"], mode="train", batch=16)
214
+ with override_configs(self.args, overrides={"cache": False}) as self.args:
215
+ train_dataset = self.build_dataset(self.data["train"], mode="train", batch=16)
214
216
  max_num_obj = max(len(label["cls"]) for label in train_dataset.labels) * 4 # 4 for mosaic augmentation
217
+ del train_dataset # free memory
215
218
  return super().auto_batch(max_num_obj)
@@ -880,7 +880,6 @@ class WorldModel(DetectionModel):
880
880
  self.txt_feats = self.get_text_pe(text, batch=batch, cache_clip_model=cache_clip_model)
881
881
  self.model[-1].nc = len(text)
882
882
 
883
- @smart_inference_mode()
884
883
  def get_text_pe(self, text, batch=80, cache_clip_model=True):
885
884
  """
886
885
  Set classes in advance so that model could do offline-inference without clip model.
@@ -1,6 +1,7 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
3
  from collections import defaultdict
4
+ from typing import Any
4
5
 
5
6
  from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
6
7
 
@@ -30,7 +31,7 @@ class AIGym(BaseSolution):
30
31
  >>> cv2.waitKey(0)
31
32
  """
32
33
 
33
- def __init__(self, **kwargs):
34
+ def __init__(self, **kwargs: Any) -> None:
34
35
  """
35
36
  Initialize AIGym for workout monitoring using pose estimation and predefined angles.
36
37
 
@@ -47,7 +48,7 @@ class AIGym(BaseSolution):
47
48
  self.down_angle = float(self.CFG["down_angle"]) # Pose down predefined angle to consider down pose
48
49
  self.kpts = self.CFG["kpts"] # User selected kpts of workouts storage for further usage
49
50
 
50
- def process(self, im0):
51
+ def process(self, im0) -> SolutionResults:
51
52
  """
52
53
  Monitor workouts using Ultralytics YOLO Pose Model.
53
54
 
@@ -1,7 +1,7 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
3
  from itertools import cycle
4
- from typing import Dict, Optional
4
+ from typing import Any, Dict, Optional
5
5
 
6
6
  import cv2
7
7
  import numpy as np
@@ -45,7 +45,7 @@ class Analytics(BaseSolution):
45
45
  >>> cv2.imshow("Analytics", results.plot_im)
46
46
  """
47
47
 
48
- def __init__(self, **kwargs):
48
+ def __init__(self, **kwargs: Any) -> None:
49
49
  """Initialize Analytics class with various chart types for visual data representation."""
50
50
  super().__init__(**kwargs)
51
51
 
@@ -1,7 +1,7 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
3
  from dataclasses import dataclass, field
4
- from typing import List, Optional, Tuple
4
+ from typing import Any, List, Optional, Tuple
5
5
 
6
6
  import cv2
7
7
 
@@ -94,7 +94,7 @@ class SolutionConfig:
94
94
  verbose: bool = True
95
95
  data: str = "images"
96
96
 
97
- def update(self, **kwargs):
97
+ def update(self, **kwargs: Any):
98
98
  """Update configuration parameters with new values provided as keyword arguments."""
99
99
  for key, value in kwargs.items():
100
100
  if hasattr(self, key):
@@ -33,7 +33,7 @@ class DistanceCalculation(BaseSolution):
33
33
  >>> cv2.waitKey(0)
34
34
  """
35
35
 
36
- def __init__(self, **kwargs: Any):
36
+ def __init__(self, **kwargs: Any) -> None:
37
37
  """Initialize the DistanceCalculation class for measuring object distances in video streams."""
38
38
  super().__init__(**kwargs)
39
39
 
@@ -1,5 +1,7 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
+ from typing import Any, List
4
+
3
5
  import cv2
4
6
  import numpy as np
5
7
 
@@ -31,7 +33,7 @@ class Heatmap(ObjectCounter):
31
33
  >>> processed_frame = heatmap.process(frame)
32
34
  """
33
35
 
34
- def __init__(self, **kwargs):
36
+ def __init__(self, **kwargs: Any) -> None:
35
37
  """
36
38
  Initialize the Heatmap class for real-time video stream heatmap generation based on object tracks.
37
39
 
@@ -48,7 +50,7 @@ class Heatmap(ObjectCounter):
48
50
  self.colormap = self.CFG["colormap"]
49
51
  self.heatmap = None
50
52
 
51
- def heatmap_effect(self, box):
53
+ def heatmap_effect(self, box: List[float]) -> None:
52
54
  """
53
55
  Efficiently calculate heatmap area and effect location for applying colormap.
54
56
 
@@ -70,7 +72,7 @@ class Heatmap(ObjectCounter):
70
72
  # Update only the values within the bounding box in a single vectorized operation
71
73
  self.heatmap[y0:y1, x0:x1][within_radius] += 2
72
74
 
73
- def process(self, im0):
75
+ def process(self, im0: np.ndarray) -> SolutionResults:
74
76
  """
75
77
  Generate heatmap for each frame using Ultralytics tracking.
76
78
 
@@ -1,5 +1,7 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
+ from typing import Any
4
+
3
5
  from ultralytics.engine.results import Results
4
6
  from ultralytics.solutions.solutions import BaseSolution, SolutionResults
5
7
 
@@ -33,7 +35,7 @@ class InstanceSegmentation(BaseSolution):
33
35
  >>> print(f"Total segmented instances: {results.total_tracks}")
34
36
  """
35
37
 
36
- def __init__(self, **kwargs):
38
+ def __init__(self, **kwargs: Any) -> None:
37
39
  """
38
40
  Initialize the InstanceSegmentation class for detecting and annotating segmented instances.
39
41
 
@@ -48,7 +50,7 @@ class InstanceSegmentation(BaseSolution):
48
50
  self.show_labels = self.CFG.get("show_labels", True)
49
51
  self.show_boxes = self.CFG.get("show_boxes", True)
50
52
 
51
- def process(self, im0):
53
+ def process(self, im0) -> SolutionResults:
52
54
  """
53
55
  Perform instance segmentation on the input image and annotate the results.
54
56
 
@@ -1,5 +1,7 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
+ from typing import Any
4
+
3
5
  import cv2
4
6
 
5
7
  from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
@@ -31,7 +33,7 @@ class ObjectBlurrer(BaseSolution):
31
33
  >>> print(f"Total blurred objects: {processed_results.total_tracks}")
32
34
  """
33
35
 
34
- def __init__(self, **kwargs):
36
+ def __init__(self, **kwargs: Any) -> None:
35
37
  """
36
38
  Initialize the ObjectBlurrer class for applying a blur effect to objects detected in video streams or images.
37
39
 
@@ -46,7 +48,7 @@ class ObjectBlurrer(BaseSolution):
46
48
  blur_ratio = 0.5
47
49
  self.blur_ratio = int(blur_ratio * 100)
48
50
 
49
- def process(self, im0):
51
+ def process(self, im0) -> SolutionResults:
50
52
  """
51
53
  Apply a blurring effect to detected objects in the input image.
52
54
 
@@ -1,7 +1,7 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
3
  from collections import defaultdict
4
- from typing import Optional, Tuple
4
+ from typing import Any, Optional, Tuple
5
5
 
6
6
  from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
7
7
  from ultralytics.utils.plotting import colors
@@ -36,7 +36,7 @@ class ObjectCounter(BaseSolution):
36
36
  >>> print(f"Inward count: {counter.in_count}, Outward count: {counter.out_count}")
37
37
  """
38
38
 
39
- def __init__(self, **kwargs):
39
+ def __init__(self, **kwargs: Any) -> None:
40
40
  """Initialize the ObjectCounter class for real-time object counting in video streams."""
41
41
  super().__init__(**kwargs)
42
42
 
@@ -56,7 +56,7 @@ class ObjectCounter(BaseSolution):
56
56
  track_id: int,
57
57
  prev_position: Optional[Tuple[float, float]],
58
58
  cls: int,
59
- ):
59
+ ) -> None:
60
60
  """
61
61
  Count objects within a polygonal or linear region based on their tracks.
62
62
 
@@ -117,7 +117,7 @@ class ObjectCounter(BaseSolution):
117
117
  self.classwise_counts[self.names[cls]]["OUT"] += 1
118
118
  self.counted_ids.append(track_id)
119
119
 
120
- def display_counts(self, plot_im):
120
+ def display_counts(self, plot_im) -> None:
121
121
  """
122
122
  Display object counts on the input image or frame.
123
123
 
@@ -138,7 +138,7 @@ class ObjectCounter(BaseSolution):
138
138
  if labels_dict:
139
139
  self.annotator.display_analytics(plot_im, labels_dict, (104, 31, 17), (255, 255, 255), self.margin)
140
140
 
141
- def process(self, im0):
141
+ def process(self, im0) -> SolutionResults:
142
142
  """
143
143
  Process input data (frames or object tracks) and update object counts.
144
144
 
@@ -2,6 +2,7 @@
2
2
 
3
3
  import os
4
4
  from pathlib import Path
5
+ from typing import Any
5
6
 
6
7
  from ultralytics.solutions.solutions import BaseSolution, SolutionResults
7
8
  from ultralytics.utils.plotting import save_one_box
@@ -30,7 +31,7 @@ class ObjectCropper(BaseSolution):
30
31
  >>> print(f"Total cropped objects: {cropper.crop_idx}")
31
32
  """
32
33
 
33
- def __init__(self, **kwargs):
34
+ def __init__(self, **kwargs: Any) -> None:
34
35
  """
35
36
  Initialize the ObjectCropper class for cropping objects from detected bounding boxes.
36
37
 
@@ -51,7 +52,7 @@ class ObjectCropper(BaseSolution):
51
52
  self.iou = self.CFG["iou"]
52
53
  self.conf = self.CFG["conf"]
53
54
 
54
- def process(self, im0):
55
+ def process(self, im0) -> SolutionResults:
55
56
  """
56
57
  Crop detected objects from the input image and save them as separate images.
57
58
 
@@ -47,7 +47,7 @@ class ParkingPtsSelection:
47
47
  >>> # Use the GUI to upload an image, select parking zones, and save the data
48
48
  """
49
49
 
50
- def __init__(self):
50
+ def __init__(self) -> None:
51
51
  """Initialize the ParkingPtsSelection class, setting up UI and properties for parking zone point selection."""
52
52
  try: # Check if tkinter is installed
53
53
  import tkinter as tk
@@ -99,14 +99,14 @@ class ParkingPtsSelection:
99
99
  self.initialize_properties()
100
100
  self.master.mainloop()
101
101
 
102
- def initialize_properties(self):
102
+ def initialize_properties(self) -> None:
103
103
  """Initialize properties for image, canvas, bounding boxes, and dimensions."""
104
104
  self.image = self.canvas_image = None
105
105
  self.rg_data, self.current_box = [], []
106
106
  self.imgw = self.imgh = 0
107
107
  self.canvas_max_width, self.canvas_max_height = 1280, 720
108
108
 
109
- def upload_image(self):
109
+ def upload_image(self) -> None:
110
110
  """Upload and display an image on the canvas, resizing it to fit within specified dimensions."""
111
111
  from PIL import Image, ImageTk # Scoped import because ImageTk requires tkinter package
112
112
 
@@ -132,7 +132,7 @@ class ParkingPtsSelection:
132
132
 
133
133
  self.rg_data.clear(), self.current_box.clear()
134
134
 
135
- def on_canvas_click(self, event):
135
+ def on_canvas_click(self, event) -> None:
136
136
  """Handle mouse clicks to add points for bounding boxes on the canvas."""
137
137
  self.current_box.append((event.x, event.y))
138
138
  self.canvas.create_oval(event.x - 3, event.y - 3, event.x + 3, event.y + 3, fill="red")
@@ -141,12 +141,12 @@ class ParkingPtsSelection:
141
141
  self.draw_box(self.current_box)
142
142
  self.current_box.clear()
143
143
 
144
- def draw_box(self, box: List[Tuple[int, int]]):
144
+ def draw_box(self, box: List[Tuple[int, int]]) -> None:
145
145
  """Draw a bounding box on the canvas using the provided coordinates."""
146
146
  for i in range(4):
147
147
  self.canvas.create_line(box[i], box[(i + 1) % 4], fill="blue", width=2)
148
148
 
149
- def remove_last_bounding_box(self):
149
+ def remove_last_bounding_box(self) -> None:
150
150
  """Remove the last bounding box from the list and redraw the canvas."""
151
151
  if not self.rg_data:
152
152
  self.messagebox.showwarning("Warning", "No bounding boxes to remove.")
@@ -154,14 +154,14 @@ class ParkingPtsSelection:
154
154
  self.rg_data.pop()
155
155
  self.redraw_canvas()
156
156
 
157
- def redraw_canvas(self):
157
+ def redraw_canvas(self) -> None:
158
158
  """Redraw the canvas with the image and all bounding boxes."""
159
159
  self.canvas.delete("all")
160
160
  self.canvas.create_image(0, 0, anchor=self.tk.NW, image=self.canvas_image)
161
161
  for box in self.rg_data:
162
162
  self.draw_box(box)
163
163
 
164
- def save_to_json(self):
164
+ def save_to_json(self) -> None:
165
165
  """Save the selected parking zone points to a JSON file with scaled coordinates."""
166
166
  scale_w, scale_h = self.imgw / self.canvas.winfo_width(), self.imgh / self.canvas.winfo_height()
167
167
  data = [{"points": [(int(x * scale_w), int(y * scale_h)) for x, y in box]} for box in self.rg_data]
@@ -200,7 +200,7 @@ class ParkingManagement(BaseSolution):
200
200
  >>> print(f"Available spaces: {parking_manager.pr_info['Available']}")
201
201
  """
202
202
 
203
- def __init__(self, **kwargs: Any):
203
+ def __init__(self, **kwargs: Any) -> None:
204
204
  """Initialize the parking management system with a YOLO model and visualization settings."""
205
205
  super().__init__(**kwargs)
206
206
 
@@ -1,5 +1,7 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
+ from typing import Any
4
+
3
5
  from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
4
6
  from ultralytics.utils.plotting import colors
5
7
 
@@ -35,7 +37,7 @@ class QueueManager(BaseSolution):
35
37
  >>> results = queue_manager.process(im0)
36
38
  """
37
39
 
38
- def __init__(self, **kwargs):
40
+ def __init__(self, **kwargs: Any) -> None:
39
41
  """Initialize the QueueManager with parameters for tracking and counting objects in a video stream."""
40
42
  super().__init__(**kwargs)
41
43
  self.initialize_region()
@@ -43,7 +45,7 @@ class QueueManager(BaseSolution):
43
45
  self.rect_color = (255, 255, 255) # Rectangle color for visualization
44
46
  self.region_length = len(self.region) # Store region length for further usage
45
47
 
46
- def process(self, im0):
48
+ def process(self, im0) -> SolutionResults:
47
49
  """
48
50
  Process queue management for a single frame of video.
49
51
 
@@ -1,5 +1,7 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
+ from typing import Any, List, Tuple
4
+
3
5
  import numpy as np
4
6
 
5
7
  from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
@@ -33,7 +35,7 @@ class RegionCounter(BaseSolution):
33
35
  >>> print(f"Total tracks: {results.total_tracks}")
34
36
  """
35
37
 
36
- def __init__(self, **kwargs):
38
+ def __init__(self, **kwargs: Any) -> None:
37
39
  """Initialize the RegionCounter for real-time object counting in user-defined regions."""
38
40
  super().__init__(**kwargs)
39
41
  self.region_template = {
@@ -47,15 +49,21 @@ class RegionCounter(BaseSolution):
47
49
  self.region_counts = {}
48
50
  self.counting_regions = []
49
51
 
50
- def add_region(self, name, polygon_points, region_color, text_color):
52
+ def add_region(
53
+ self,
54
+ name: str,
55
+ polygon_points: List[Tuple],
56
+ region_color: Tuple[int, int, int],
57
+ text_color: Tuple[int, int, int],
58
+ ) -> None:
51
59
  """
52
60
  Add a new region to the counting list based on the provided template with specific attributes.
53
61
 
54
62
  Args:
55
63
  name (str): Name assigned to the new region.
56
64
  polygon_points (List[Tuple]): List of (x, y) coordinates defining the region's polygon.
57
- region_color (tuple): BGR color for region visualization.
58
- text_color (tuple): BGR color for the text within the region.
65
+ region_color (Tuple[int, int, int]): BGR color for region visualization.
66
+ text_color (Tuple[int, int, int]): BGR color for the text within the region.
59
67
  """
60
68
  region = self.region_template.copy()
61
69
  region.update(
@@ -68,7 +76,7 @@ class RegionCounter(BaseSolution):
68
76
  )
69
77
  self.counting_regions.append(region)
70
78
 
71
- def process(self, im0):
79
+ def process(self, im0: np.ndarray) -> SolutionResults:
72
80
  """
73
81
  Process the input frame to detect and count objects within each defined region.
74
82
 
@@ -1,5 +1,7 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
+ from typing import Any
4
+
3
5
  from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
4
6
  from ultralytics.utils import LOGGER
5
7
  from ultralytics.utils.plotting import colors
@@ -32,7 +34,7 @@ class SecurityAlarm(BaseSolution):
32
34
  >>> results = security.process(frame)
33
35
  """
34
36
 
35
- def __init__(self, **kwargs):
37
+ def __init__(self, **kwargs: Any) -> None:
36
38
  """
37
39
  Initialize the SecurityAlarm class with parameters for real-time object monitoring.
38
40
 
@@ -46,7 +48,7 @@ class SecurityAlarm(BaseSolution):
46
48
  self.to_email = ""
47
49
  self.from_email = ""
48
50
 
49
- def authenticate(self, from_email: str, password: str, to_email: str):
51
+ def authenticate(self, from_email: str, password: str, to_email: str) -> None:
50
52
  """
51
53
  Authenticate the email server for sending alert notifications.
52
54
 
@@ -69,7 +71,7 @@ class SecurityAlarm(BaseSolution):
69
71
  self.to_email = to_email
70
72
  self.from_email = from_email
71
73
 
72
- def send_email(self, im0, records: int = 5):
74
+ def send_email(self, im0, records: int = 5) -> None:
73
75
  """
74
76
  Send an email notification with an image attachment indicating the number of objects detected.
75
77
 
@@ -114,7 +116,7 @@ class SecurityAlarm(BaseSolution):
114
116
  except Exception as e:
115
117
  LOGGER.error(f"Failed to send email: {e}")
116
118
 
117
- def process(self, im0):
119
+ def process(self, im0) -> SolutionResults:
118
120
  """
119
121
  Monitor the frame, process object detections, and trigger alerts if thresholds are exceeded.
120
122
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  import os
4
4
  from pathlib import Path
5
- from typing import List
5
+ from typing import Any, List
6
6
 
7
7
  import numpy as np
8
8
  import torch
@@ -48,7 +48,7 @@ class VisualAISearch(BaseSolution):
48
48
  >>> results = searcher.search("a cat sitting on a chair", k=10)
49
49
  """
50
50
 
51
- def __init__(self, **kwargs):
51
+ def __init__(self, **kwargs: Any) -> None:
52
52
  """Initialize the VisualAISearch class with FAISS index and CLIP model."""
53
53
  super().__init__(**kwargs)
54
54
  check_requirements(["git+https://github.com/ultralytics/CLIP.git", "faiss-cpu"])
@@ -90,7 +90,7 @@ class VisualAISearch(BaseSolution):
90
90
  with torch.no_grad():
91
91
  return self.model.encode_text(tokens).cpu().numpy()
92
92
 
93
- def load_or_build_index(self):
93
+ def load_or_build_index(self) -> None:
94
94
  """
95
95
  Load existing FAISS index or build a new one from image features.
96
96
 
@@ -195,7 +195,7 @@ class SearchApp:
195
195
  >>> app.run(debug=True)
196
196
  """
197
197
 
198
- def __init__(self, data: str = "images", device: str = None):
198
+ def __init__(self, data: str = "images", device: str = None) -> None:
199
199
  """
200
200
  Initialize the SearchApp with VisualAISearch backend.
201
201
 
@@ -217,7 +217,7 @@ class SearchApp:
217
217
  )
218
218
  self.app.add_url_rule("/", view_func=self.index, methods=["GET", "POST"])
219
219
 
220
- def index(self):
220
+ def index(self) -> str:
221
221
  """Process user query and display search results in the web interface."""
222
222
  results = []
223
223
  if self.request.method == "POST":
@@ -225,6 +225,6 @@ class SearchApp:
225
225
  results = self.searcher(query)
226
226
  return self.render_template("similarity-search.html", results=results)
227
227
 
228
- def run(self, debug: bool = False):
228
+ def run(self, debug: bool = False) -> None:
229
229
  """Start the Flask web application server."""
230
230
  self.app.run(debug=debug)