coralnet-toolbox 0.0.66__tar.gz → 0.0.68__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/PKG-INFO +12 -6
  2. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/README.md +10 -5
  3. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Annotations/QtMultiPolygonAnnotation.py +1 -1
  4. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Annotations/QtPatchAnnotation.py +1 -1
  5. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Annotations/QtPolygonAnnotation.py +1 -1
  6. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Annotations/QtRectangleAnnotation.py +1 -1
  7. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/AutoDistill/QtDeployModel.py +4 -0
  8. coralnet_toolbox-0.0.68/coralnet_toolbox/Explorer/QtDataItem.py +300 -0
  9. coralnet_toolbox-0.0.68/coralnet_toolbox/Explorer/QtExplorer.py +1825 -0
  10. coralnet_toolbox-0.0.68/coralnet_toolbox/Explorer/QtSettingsWidgets.py +494 -0
  11. coralnet_toolbox-0.0.68/coralnet_toolbox/Explorer/__init__.py +7 -0
  12. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtImportViscoreAnnotations.py +2 -4
  13. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtOpenProject.py +2 -1
  14. coralnet_toolbox-0.0.68/coralnet_toolbox/Icons/magic.png +0 -0
  15. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/DeployModel/QtDetect.py +4 -0
  16. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/DeployModel/QtSegment.py +4 -0
  17. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/TrainModel/QtClassify.py +1 -1
  18. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/QtConfidenceWindow.py +2 -23
  19. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/QtEventFilter.py +18 -7
  20. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/QtLabelWindow.py +35 -8
  21. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/QtMainWindow.py +81 -2
  22. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/QtProgressBar.py +12 -0
  23. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/SAM/QtDeployGenerator.py +4 -0
  24. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/__init__.py +1 -1
  25. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/utilities.py +24 -0
  26. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox.egg-info/PKG-INFO +12 -6
  27. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox.egg-info/SOURCES.txt +5 -0
  28. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox.egg-info/requires.txt +1 -0
  29. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/pyproject.toml +3 -2
  30. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/requirements.txt +1 -0
  31. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/.editorconfig +0 -0
  32. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/.gitallowed +0 -0
  33. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  34. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  35. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  36. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/.github/ISSUE_TEMPLATE/general_question.md +0 -0
  37. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/.github/workflows/docs-build.yml +0 -0
  38. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/.github/workflows/docs.yml +0 -0
  39. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/.github/workflows/installation.yml +0 -0
  40. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/.github/workflows/macos.yml +0 -0
  41. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/.github/workflows/pypi.yml +0 -0
  42. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/.github/workflows/ubuntu.yml +0 -0
  43. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/.github/workflows/windows.yml +0 -0
  44. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/.gitignore +0 -0
  45. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/LICENSE.txt +0 -0
  46. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/MANIFEST.in +0 -0
  47. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Annotations/QtAnnotation.py +0 -0
  48. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Annotations/__init__.py +0 -0
  49. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/AutoDistill/Models/GroundingDINO.py +0 -0
  50. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/AutoDistill/Models/OWLViT.py +0 -0
  51. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/AutoDistill/Models/OmDetTurbo.py +0 -0
  52. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/AutoDistill/Models/QtBase.py +0 -0
  53. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/AutoDistill/Models/__init__.py +0 -0
  54. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/AutoDistill/QtBatchInference.py +0 -0
  55. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/AutoDistill/__init__.py +0 -0
  56. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/BreakTime/QtBreakout.py +0 -0
  57. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/BreakTime/QtSnake.py +0 -0
  58. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/BreakTime/__init__.py +0 -0
  59. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Common/QtGraphicsUtility.py +0 -0
  60. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Common/QtMarginInput.py +0 -0
  61. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Common/QtOverlapInput.py +0 -0
  62. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Common/QtTileSizeInput.py +0 -0
  63. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Common/QtUpdateImagePaths.py +0 -0
  64. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/CoralNet/QtAuthenticate.py +0 -0
  65. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/CoralNet/QtDownload.py +0 -0
  66. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/CoralNet/__init__.py +0 -0
  67. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtExportAnnotations.py +0 -0
  68. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtExportCoralNetAnnotations.py +0 -0
  69. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtExportGeoJSONAnnotations.py +0 -0
  70. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtExportLabels.py +0 -0
  71. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtExportMaskAnnotations.py +0 -0
  72. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtExportTagLabAnnotations.py +0 -0
  73. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtExportTagLabLabels.py +0 -0
  74. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtExportViscoreAnnotations.py +0 -0
  75. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtImportAnnotations.py +0 -0
  76. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtImportCoralNetAnnotations.py +0 -0
  77. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtImportCoralNetLabels.py +0 -0
  78. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtImportFrames.py +0 -0
  79. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtImportImages.py +0 -0
  80. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtImportLabels.py +0 -0
  81. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtImportTagLabAnnotations.py +0 -0
  82. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtImportTagLabLabels.py +0 -0
  83. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/QtSaveProject.py +0 -0
  84. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/IO/__init__.py +0 -0
  85. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/1.png +0 -0
  86. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/2.png +0 -0
  87. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/3.png +0 -0
  88. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/4.png +0 -0
  89. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/5.png +0 -0
  90. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/__init__.py +0 -0
  91. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/add.png +0 -0
  92. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/all.png +0 -0
  93. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/apple.png +0 -0
  94. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/breakout.png +0 -0
  95. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/coral.png +0 -0
  96. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/edit.png +0 -0
  97. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/eye.png +0 -0
  98. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/hide.png +0 -0
  99. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/home.png +0 -0
  100. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/lock.png +0 -0
  101. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/machine.png +0 -0
  102. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/opaque.png +0 -0
  103. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/parameters.png +0 -0
  104. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/patch.png +0 -0
  105. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/polygon.png +0 -0
  106. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/rabbit.png +0 -0
  107. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/rectangle.png +0 -0
  108. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/remove.png +0 -0
  109. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/rocket.png +0 -0
  110. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/select.png +0 -0
  111. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/settings.png +0 -0
  112. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/snake.png +0 -0
  113. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/tile.png +0 -0
  114. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/transparent.png +0 -0
  115. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/turtle.png +0 -0
  116. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/unlock.png +0 -0
  117. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/user.png +0 -0
  118. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/wizard.png +0 -0
  119. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/workarea.png +0 -0
  120. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Icons/www.png +0 -0
  121. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/BatchInference/QtBase.py +0 -0
  122. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/BatchInference/QtClassify.py +0 -0
  123. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/BatchInference/QtDetect.py +0 -0
  124. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/BatchInference/QtSegment.py +0 -0
  125. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/BatchInference/__init__.py +0 -0
  126. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/__init__.py +0 -0
  127. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/classify/convnext_tiny.yaml +0 -0
  128. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/classify/efficientnet_b0.yaml +0 -0
  129. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/classify/mobilenet_v3_large.yaml +0 -0
  130. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/classify/swin_t.yaml +0 -0
  131. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/detect/convnext_tiny.yaml +0 -0
  132. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/detect/mobilenet_v3_large-fpn.yaml +0 -0
  133. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/detect/mobilenet_v3_small-fpn.yaml +0 -0
  134. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/detect/resnet101.yaml +0 -0
  135. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/detect/swin_t-fpn.yaml +0 -0
  136. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/detect/swin_t.yaml +0 -0
  137. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/detect/yolo11-p2.yaml +0 -0
  138. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/detect/yolo11-p6.yaml +0 -0
  139. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/segment/convnext_tiny.yaml +0 -0
  140. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/segment/swin_t-fpn.yaml +0 -0
  141. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/segment/swin_t.yaml +0 -0
  142. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/segment/yolo11-p2.yaml +0 -0
  143. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/Community/cfg/segment/yolo11-p6.yaml +0 -0
  144. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/ConfusionMatrix.py +0 -0
  145. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/DeployModel/QtBase.py +0 -0
  146. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/DeployModel/QtClassify.py +0 -0
  147. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/DeployModel/__init__.py +0 -0
  148. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/EvaluateModel/QtBase.py +0 -0
  149. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/EvaluateModel/QtClassify.py +0 -0
  150. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/EvaluateModel/QtDetect.py +0 -0
  151. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/EvaluateModel/QtSegment.py +0 -0
  152. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/EvaluateModel/__init__.py +0 -0
  153. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/ExportDataset/QtBase.py +0 -0
  154. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/ExportDataset/QtClassify.py +0 -0
  155. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/ExportDataset/QtDetect.py +0 -0
  156. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/ExportDataset/QtSegment.py +0 -0
  157. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/ExportDataset/__init__.py +0 -0
  158. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/ImportDataset/QtBase.py +0 -0
  159. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/ImportDataset/QtDetect.py +0 -0
  160. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/ImportDataset/QtSegment.py +0 -0
  161. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/ImportDataset/__init__.py +0 -0
  162. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/MergeDatasets/QtBase.py +0 -0
  163. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/MergeDatasets/QtClassify.py +0 -0
  164. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/MergeDatasets/__init__.py +0 -0
  165. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/OptimizeModel/QtBase.py +0 -0
  166. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/OptimizeModel/__init__.py +0 -0
  167. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/TrainModel/QtBase.py +0 -0
  168. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/TrainModel/QtDetect.py +0 -0
  169. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/TrainModel/QtSegment.py +0 -0
  170. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/TrainModel/__init__.py +0 -0
  171. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/TuneModel/QtBase.py +0 -0
  172. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/TuneModel/QtClassify.py +0 -0
  173. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/TuneModel/QtDetect.py +0 -0
  174. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/TuneModel/QtSegment.py +0 -0
  175. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/TuneModel/__init__.py +0 -0
  176. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/TuneModel/tuner.py +0 -0
  177. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/VideoInference/QtBase.py +0 -0
  178. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/VideoInference/QtClassify.py +0 -0
  179. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/VideoInference/QtDetect.py +0 -0
  180. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/VideoInference/QtInference.py +0 -0
  181. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/VideoInference/QtSegment.py +0 -0
  182. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/VideoInference/QtVideoWidget.py +0 -0
  183. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/VideoInference/YOLO3D/__init__.py +0 -0
  184. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/VideoInference/YOLO3D/bbox3d_utils.py +0 -0
  185. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/VideoInference/YOLO3D/depth_model.py +0 -0
  186. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/VideoInference/YOLO3D/detection_model.py +0 -0
  187. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/VideoInference/YOLO3D/load_camera_params.py +0 -0
  188. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/VideoInference/YOLO3D/run.py +0 -0
  189. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/VideoInference/__init__.py +0 -0
  190. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/VideoInference/analytics.py +0 -0
  191. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/WeightedDataset.py +0 -0
  192. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/MachineLearning/__init__.py +0 -0
  193. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/QtAnnotationWindow.py +0 -0
  194. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/QtImageWindow.py +0 -0
  195. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/QtPatchSampling.py +0 -0
  196. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/QtWorkArea.py +0 -0
  197. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Rasters/ImageFilter.py +0 -0
  198. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Rasters/QtRaster.py +0 -0
  199. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Rasters/RasterManager.py +0 -0
  200. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Rasters/RasterTableModel.py +0 -0
  201. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Rasters/__init__.py +0 -0
  202. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Results/CombineResults.py +0 -0
  203. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Results/ConvertResults.py +0 -0
  204. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Results/MapResults.py +0 -0
  205. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Results/Masks.py +0 -0
  206. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Results/ResultsProcessor.py +0 -0
  207. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Results/__init__.py +0 -0
  208. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/SAM/QtBatchInference.py +0 -0
  209. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/SAM/QtDeployPredictor.py +0 -0
  210. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/SAM/__init__.py +0 -0
  211. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/SeeAnything/QtBatchInference.py +0 -0
  212. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/SeeAnything/QtDeployPredictor.py +0 -0
  213. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/SeeAnything/QtTrainModel.py +0 -0
  214. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/SeeAnything/__init__.py +0 -0
  215. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tile/QtTileBatchInference.py +0 -0
  216. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tile/QtTileCreation.py +0 -0
  217. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tile/TileDataset/QtBase.py +0 -0
  218. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tile/TileDataset/QtClassify.py +0 -0
  219. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tile/TileDataset/QtDetect.py +0 -0
  220. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tile/TileDataset/QtSegment.py +0 -0
  221. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tile/TileDataset/__init__.py +0 -0
  222. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tile/__init__.py +0 -0
  223. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtCutSubTool.py +0 -0
  224. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtMoveSubTool.py +0 -0
  225. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtPanTool.py +0 -0
  226. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtPatchTool.py +0 -0
  227. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtPolygonTool.py +0 -0
  228. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtRectangleTool.py +0 -0
  229. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtResizeSubTool.py +0 -0
  230. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtSAMTool.py +0 -0
  231. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtSeeAnythingTool.py +0 -0
  232. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtSelectSubTool.py +0 -0
  233. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtSelectTool.py +0 -0
  234. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtSubTool.py +0 -0
  235. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtTool.py +0 -0
  236. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtWorkAreaTool.py +0 -0
  237. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/QtZoomTool.py +0 -0
  238. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/Tools/__init__.py +0 -0
  239. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox/main.py +0 -0
  240. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox.egg-info/dependency_links.txt +0 -0
  241. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox.egg-info/entry_points.txt +0 -0
  242. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/coralnet_toolbox.egg-info/top_level.txt +0 -0
  243. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/mkdocs.yml +0 -0
  244. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/requirements_dev.txt +0 -0
  245. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/setup.cfg +0 -0
  246. {coralnet_toolbox-0.0.66 → coralnet_toolbox-0.0.68}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: coralnet-toolbox
3
- Version: 0.0.66
3
+ Version: 0.0.68
4
4
  Summary: Tools for annotating and developing ML models for benthic imagery
5
5
  Author-email: Jordan Pierce <jordan.pierce@noaa.gov>
6
6
  License: MIT License
@@ -21,6 +21,7 @@ Requires-Dist: lap>=0.5.12
21
21
  Requires-Dist: open-clip-torch>=2.20.0
22
22
  Requires-Dist: supervision>=0.24.0
23
23
  Requires-Dist: scikit-learn
24
+ Requires-Dist: umap-learn
24
25
  Requires-Dist: pycocotools
25
26
  Requires-Dist: ujson
26
27
  Requires-Dist: timm==0.9.2
@@ -135,12 +136,17 @@ These models enable fast, accurate, and flexible annotation workflows for a wide
135
136
 
136
137
  <div align="center">
137
138
 
138
- | ![Patch Annotation Tool](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Patches.gif)<br><sub>**Patch Annotation**</sub> | ![Rectangle Annotation Tool](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Rectangles.gif)<br><sub>**Rectangle Annotation**</sub> | ![Polygon Annotation Tool](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Polygons.gif)<br><sub>**(Multi) Polygon Annotation**</sub> |
139
+ | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Patches.gif" alt="Patch Annotation Tool" width="256" height="256"/><br><sub>**Patch Annotation**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Rectangles.gif" alt="Rectangle Annotation Tool" width="256" height="256"/><br><sub>**Rectangle Annotation**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Polygons.gif" alt="Polygon Annotation Tool" width="256" height="256"/><br><sub>**(Multi) Polygon Annotation**</sub> |
139
140
  |:--:|:--:|:--:|
140
- | ![Patch-based Image Classification](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Classification.gif)<br><sub>**Image Classification**</sub> | ![Object Detection](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Object_Detection.gif)<br><sub>**Object Detection**</sub> | ![Instance Segmentation](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Instance_Segmentation.gif)<br><sub>**Instance Segmentation**</sub> |
141
- | ![Segment Anything Model (SAM)](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Segment_Anything.gif)<br><sub>**Segment Anything (SAM)**</sub> | ![Polygon Classification](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Classifying_Polygons.gif)<br><sub>**Polygon Classification**</sub> | ![Region-based Detection](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Work_Areas.gif)<br><sub>**Region-based Detection**</sub> |
142
- | ![Cut](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Cut.gif)<br><sub>**Cut**</sub> | ![Combine](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Combine.gif)<br><sub>**Combine**</sub> | ![Simplify](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Simplify.gif)<br><sub>**Simplify**</sub> |
143
- | ![See Anything (YOLOE)](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/See_Anything.gif)<br><sub>**See Anything (YOLOE)**</sub> | ![Patch-based LAI Classification](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Classifying_Orthomosaics.gif)<br><sub>**Patch-based LAI Classification**</sub> | ![Video Inference](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Analytics.gif)<br><sub>**Video Inference**</sub> |
141
+ | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Classification.gif" alt="Patch-based Image Classification" width="256" height="256"/><br><sub>**Image Classification**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Object_Detection.gif" alt="Object Detection" width="256" height="256"/><br><sub>**Object Detection**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Instance_Segmentation.gif" alt="Instance Segmentation" width="256" height="256"/><br><sub>**Instance Segmentation**</sub> |
142
+ | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Segment_Anything.gif" alt="Segment Anything Model (SAM)" width="256" height="256"/><br><sub>**Segment Anything (SAM)**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Classifying_Polygons.gif" alt="Polygon Classification" width="256" height="256"/><br><sub>**Polygon Classification**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Work_Areas.gif" alt="Region-based Detection" width="256" height="256"/><br><sub>**Region-based Detection**</sub> |
143
+ | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Cut.gif" alt="Cut" width="256" height="256"/><br><sub>**Cut**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Combine.gif" alt="Combine" width="256" height="256"/><br><sub>**Combine**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Simplify.gif" alt="Simplify" width="256" height="256"/><br><sub>**Simplify**</sub> |
144
+ | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/See_Anything.gif" alt="See Anything (YOLOE)" width="256" height="256"/><br><sub>**See Anything (YOLOE)**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Classifying_Orthomosaics.gif" alt="Patch-based LAI Classification" width="256" height="256"/><br><sub>**LAI Classification**</sub> | |
145
+
146
+ <br>
147
+
148
+ | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Analytics.gif" alt="Video Inference" width="450"/><br><sub>**Video Inference**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Explorer.gif" alt="Explorer" width="450"/><br><sub>**Explorer**</sub> |
149
+ |:--:|:--:|
144
150
 
145
151
  </div>
146
152
 
@@ -93,12 +93,17 @@ These models enable fast, accurate, and flexible annotation workflows for a wide
93
93
 
94
94
  <div align="center">
95
95
 
96
- | ![Patch Annotation Tool](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Patches.gif)<br><sub>**Patch Annotation**</sub> | ![Rectangle Annotation Tool](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Rectangles.gif)<br><sub>**Rectangle Annotation**</sub> | ![Polygon Annotation Tool](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Polygons.gif)<br><sub>**(Multi) Polygon Annotation**</sub> |
96
+ | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Patches.gif" alt="Patch Annotation Tool" width="256" height="256"/><br><sub>**Patch Annotation**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Rectangles.gif" alt="Rectangle Annotation Tool" width="256" height="256"/><br><sub>**Rectangle Annotation**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Polygons.gif" alt="Polygon Annotation Tool" width="256" height="256"/><br><sub>**(Multi) Polygon Annotation**</sub> |
97
97
  |:--:|:--:|:--:|
98
- | ![Patch-based Image Classification](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Classification.gif)<br><sub>**Image Classification**</sub> | ![Object Detection](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Object_Detection.gif)<br><sub>**Object Detection**</sub> | ![Instance Segmentation](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Instance_Segmentation.gif)<br><sub>**Instance Segmentation**</sub> |
99
- | ![Segment Anything Model (SAM)](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Segment_Anything.gif)<br><sub>**Segment Anything (SAM)**</sub> | ![Polygon Classification](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Classifying_Polygons.gif)<br><sub>**Polygon Classification**</sub> | ![Region-based Detection](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Work_Areas.gif)<br><sub>**Region-based Detection**</sub> |
100
- | ![Cut](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Cut.gif)<br><sub>**Cut**</sub> | ![Combine](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Combine.gif)<br><sub>**Combine**</sub> | ![Simplify](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Simplify.gif)<br><sub>**Simplify**</sub> |
101
- | ![See Anything (YOLOE)](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/See_Anything.gif)<br><sub>**See Anything (YOLOE)**</sub> | ![Patch-based LAI Classification](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Classifying_Orthomosaics.gif)<br><sub>**Patch-based LAI Classification**</sub> | ![Video Inference](https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Analytics.gif)<br><sub>**Video Inference**</sub> |
98
+ | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Classification.gif" alt="Patch-based Image Classification" width="256" height="256"/><br><sub>**Image Classification**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Object_Detection.gif" alt="Object Detection" width="256" height="256"/><br><sub>**Object Detection**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Instance_Segmentation.gif" alt="Instance Segmentation" width="256" height="256"/><br><sub>**Instance Segmentation**</sub> |
99
+ | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Segment_Anything.gif" alt="Segment Anything Model (SAM)" width="256" height="256"/><br><sub>**Segment Anything (SAM)**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Classifying_Polygons.gif" alt="Polygon Classification" width="256" height="256"/><br><sub>**Polygon Classification**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Work_Areas.gif" alt="Region-based Detection" width="256" height="256"/><br><sub>**Region-based Detection**</sub> |
100
+ | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Cut.gif" alt="Cut" width="256" height="256"/><br><sub>**Cut**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Combine.gif" alt="Combine" width="256" height="256"/><br><sub>**Combine**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Simplify.gif" alt="Simplify" width="256" height="256"/><br><sub>**Simplify**</sub> |
101
+ | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/See_Anything.gif" alt="See Anything (YOLOE)" width="256" height="256"/><br><sub>**See Anything (YOLOE)**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Classifying_Orthomosaics.gif" alt="Patch-based LAI Classification" width="256" height="256"/><br><sub>**LAI Classification**</sub> | |
102
+
103
+ <br>
104
+
105
+ | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Analytics.gif" alt="Video Inference" width="450"/><br><sub>**Video Inference**</sub> | <img src="https://raw.githubusercontent.com/Jordan-Pierce/CoralNet-Toolbox/refs/heads/main/figures/tools/Explorer.gif" alt="Explorer" width="450"/><br><sub>**Explorer**</sub> |
106
+ |:--:|:--:|
102
107
 
103
108
  </div>
104
109
 
@@ -152,7 +152,7 @@ class MultiPolygonAnnotation(Annotation):
152
152
  result_painter.drawPixmap(0, 0, self.cropped_image)
153
153
 
154
154
  # Draw dashed outline for each polygon
155
- pen = QPen(self.label.color)
155
+ pen = QPen(Qt.black)
156
156
  pen.setStyle(Qt.SolidLine) # Solid line
157
157
  pen.setWidth(1) # Line width
158
158
  result_painter.setPen(pen)
@@ -157,7 +157,7 @@ class PatchAnnotation(Annotation):
157
157
  result_painter.drawPixmap(0, 0, self.cropped_image)
158
158
 
159
159
  # Draw the dotted line outline on top
160
- pen = QPen(self.label.color)
160
+ pen = QPen(Qt.black)
161
161
  pen.setStyle(Qt.SolidLine) # Solid line
162
162
  pen.setWidth(1) # Line width
163
163
  result_painter.setPen(pen)
@@ -178,7 +178,7 @@ class PolygonAnnotation(Annotation):
178
178
  result_painter.drawPixmap(0, 0, self.cropped_image)
179
179
 
180
180
  # Draw the dotted line outline on top
181
- pen = QPen(self.label.color)
181
+ pen = QPen(Qt.black)
182
182
  pen.setStyle(Qt.SolidLine) # Solid line
183
183
  pen.setWidth(1) # Line width
184
184
  result_painter.setPen(pen)
@@ -153,7 +153,7 @@ class RectangleAnnotation(Annotation):
153
153
  result_painter.drawPixmap(0, 0, self.cropped_image)
154
154
 
155
155
  # Draw the dotted line outline on top
156
- pen = QPen(self.label.color)
156
+ pen = QPen(Qt.black)
157
157
  pen.setStyle(Qt.SolidLine) # Solid line
158
158
  pen.setWidth(1) # Line width
159
159
  result_painter.setPen(pen)
@@ -555,6 +555,10 @@ class DeployModelDialog(QDialog):
555
555
  self.update_sam_task_state()
556
556
  if self.task != 'segment':
557
557
  return results_list
558
+
559
+ if not self.sam_dialog or self.use_sam_dropdown.currentText() == "False":
560
+ # If SAM is not deployed or not selected, return the results as is
561
+ return results_list
558
562
 
559
563
  if self.sam_dialog.loaded_model is None:
560
564
  # If SAM is not loaded, ensure we do not use it accidentally
@@ -0,0 +1,300 @@
1
+ import warnings
2
+
3
+ import os
4
+
5
+ from PyQt5.QtCore import Qt, QTimer
6
+ from PyQt5.QtGui import QPen, QColor, QPainter
7
+ from PyQt5.QtWidgets import QGraphicsEllipseItem, QStyle, QVBoxLayout, QLabel, QWidget, QGraphicsItem
8
+
9
+ warnings.filterwarnings("ignore", category=DeprecationWarning)
10
+
11
+
12
+ # ----------------------------------------------------------------------------------------------------------------------
13
+ # Constants
14
+ # ----------------------------------------------------------------------------------------------------------------------
15
+
16
+ POINT_SIZE = 15
17
+ POINT_WIDTH = 3
18
+
19
+ ANNOTATION_WIDTH = 5
20
+
21
+
22
+ # ----------------------------------------------------------------------------------------------------------------------
23
+ # Classes
24
+ # ----------------------------------------------------------------------------------------------------------------------
25
+
26
+
27
+ class EmbeddingPointItem(QGraphicsEllipseItem):
28
+ """
29
+ A custom QGraphicsEllipseItem that gets its state and appearance
30
+ directly from an associated AnnotationDataItem.
31
+ """
32
+
33
+ def __init__(self, data_item):
34
+ """
35
+ Initializes the point item.
36
+
37
+ Args:
38
+ data_item (AnnotationDataItem): The data item that holds the state
39
+ for this point.
40
+ """
41
+ # Initialize the ellipse with a placeholder rectangle; its position will be set later.
42
+ super(EmbeddingPointItem, self).__init__(0, 0, POINT_SIZE, POINT_SIZE)
43
+
44
+ # Store a direct reference to the data item
45
+ self.data_item = data_item
46
+
47
+ # Set the item's flags
48
+ self.setFlag(QGraphicsItem.ItemIsSelectable, True)
49
+ self.setFlag(QGraphicsItem.ItemIgnoresTransformations, True)
50
+
51
+ # Set initial appearance from the data_item
52
+ self.setPen(QPen(QColor("black"), POINT_WIDTH))
53
+ self.setBrush(self.data_item.effective_color)
54
+
55
+ # Set the position of the point based on the data item's embedding coordinates
56
+ self.setPos(self.data_item.embedding_x, self.data_item.embedding_y)
57
+
58
+ def paint(self, painter, option, widget):
59
+ """
60
+ Custom paint method to ensure the point's color is always in sync with
61
+ the AnnotationDataItem and to prevent the default selection box from
62
+ being drawn.
63
+ """
64
+ # Dynamically get the latest color from the central data item.
65
+ # This ensures that preview color changes are reflected instantly.
66
+ self.setBrush(self.data_item.effective_color)
67
+
68
+ # Remove the 'State_Selected' flag from the style options before painting.
69
+ # This is the key to preventing Qt from drawing the default dotted
70
+ # selection rectangle around the item.
71
+ option.state &= ~QStyle.State_Selected
72
+
73
+ # Call the base class's paint method to draw the ellipse
74
+ super(EmbeddingPointItem, self).paint(painter, option, widget)
75
+
76
+
77
+ class AnnotationImageWidget(QWidget):
78
+ """Widget to display a single annotation image crop with selection support."""
79
+
80
+ def __init__(self, data_item, widget_height=96, annotation_viewer=None, parent=None):
81
+ super(AnnotationImageWidget, self).__init__(parent)
82
+ self.data_item = data_item # The single source of truth for state
83
+ self.annotation = data_item.annotation
84
+ self.annotation_viewer = annotation_viewer
85
+
86
+ self.widget_height = widget_height
87
+ self.aspect_ratio = 1.0
88
+ self.pixmap = None
89
+
90
+ self.animation_offset = 0
91
+ self.animation_timer = QTimer(self)
92
+ self.animation_timer.timeout.connect(self._update_animation_frame)
93
+ self.animation_timer.setInterval(75)
94
+
95
+ self.setup_ui()
96
+ self.load_and_set_image()
97
+
98
+ def setup_ui(self):
99
+ """Set up the basic UI with a label for the image."""
100
+ layout = QVBoxLayout(self)
101
+ layout.setContentsMargins(4, 4, 4, 4)
102
+ self.image_label = QLabel()
103
+ self.image_label.setAlignment(Qt.AlignCenter)
104
+ self.image_label.setScaledContents(True)
105
+ self.image_label.setStyleSheet("border: none;")
106
+ layout.addWidget(self.image_label)
107
+
108
+ def load_and_set_image(self):
109
+ """Load image, calculate its aspect ratio, and set the widget's initial size."""
110
+ try:
111
+ cropped_pixmap = self.annotation.get_cropped_image_graphic()
112
+ if cropped_pixmap and not cropped_pixmap.isNull():
113
+ self.pixmap = cropped_pixmap
114
+ if self.pixmap.height() > 0:
115
+ self.aspect_ratio = self.pixmap.width() / self.pixmap.height()
116
+ else:
117
+ self.aspect_ratio = 1.0
118
+ else:
119
+ self.image_label.setText("No Image\nAvailable")
120
+ self.pixmap = None
121
+ self.aspect_ratio = 1.0
122
+ except Exception as e:
123
+ print(f"Error loading annotation image: {e}")
124
+ self.image_label.setText("Error\nLoading Image")
125
+ self.pixmap = None
126
+ self.aspect_ratio = 1.0
127
+ self.update_height(self.widget_height)
128
+
129
+ def update_height(self, new_height):
130
+ """Updates the widget's height and rescales its width and content accordingly."""
131
+ self.widget_height = new_height
132
+ new_width = int(self.widget_height * self.aspect_ratio)
133
+ self.setFixedSize(new_width, new_height)
134
+ if self.pixmap:
135
+ scaled_pixmap = self.pixmap.scaled(
136
+ new_width - 8,
137
+ new_height - 8,
138
+ Qt.KeepAspectRatio,
139
+ Qt.SmoothTransformation
140
+ )
141
+ self.image_label.setPixmap(scaled_pixmap)
142
+ self.update()
143
+
144
+ def update_selection_visuals(self):
145
+ """
146
+ Updates the widget's visual state based on the data_item's selection
147
+ status. This should be called by the controlling viewer.
148
+ """
149
+ is_selected = self.data_item.is_selected
150
+
151
+ if is_selected:
152
+ if not self.animation_timer.isActive():
153
+ self.animation_timer.start()
154
+ else:
155
+ if self.animation_timer.isActive():
156
+ self.animation_timer.stop()
157
+ self.animation_offset = 0
158
+
159
+ # Trigger a repaint to show the new selection state (border, etc.)
160
+ self.update()
161
+
162
+ def is_selected(self):
163
+ """Return whether this widget is selected via the data item."""
164
+ return self.data_item.is_selected
165
+
166
+ def _update_animation_frame(self):
167
+ """Update the animation offset and schedule a repaint."""
168
+ self.animation_offset = (self.animation_offset + 1) % 20
169
+ self.update()
170
+
171
+ def paintEvent(self, event):
172
+ """Handle custom drawing for the widget, including the selection border."""
173
+ super().paintEvent(event)
174
+ painter = QPainter(self)
175
+ painter.setRenderHint(QPainter.Antialiasing)
176
+
177
+ effective_label = self.data_item.effective_label
178
+ pen_color = self.data_item.effective_color
179
+ if effective_label and effective_label.id == "-1":
180
+ # If the label is a temporary one (e.g., "-1", Review), use black for the pen color
181
+ pen_color = QColor("black")
182
+
183
+ if self.is_selected():
184
+ pen = QPen(pen_color, ANNOTATION_WIDTH)
185
+ pen.setStyle(Qt.CustomDashLine)
186
+ pen.setDashPattern([2, 3])
187
+ pen.setDashOffset(self.animation_offset)
188
+ else:
189
+ pen = QPen(pen_color, ANNOTATION_WIDTH)
190
+ pen.setStyle(Qt.SolidLine)
191
+
192
+ painter.setPen(pen)
193
+ painter.setBrush(Qt.NoBrush)
194
+
195
+ width = pen.width()
196
+ half_width = (width - 1) // 2
197
+ rect = self.rect().adjusted(half_width, half_width, -half_width, -half_width)
198
+ painter.drawRect(rect)
199
+
200
+ def mousePressEvent(self, event):
201
+ """Handle mouse press events for selection, delegating logic to the viewer."""
202
+ if event.button() == Qt.LeftButton:
203
+ if self.annotation_viewer and hasattr(self.annotation_viewer, 'handle_annotation_selection'):
204
+ # The viewer is the controller and will decide how to change the selection state
205
+ self.annotation_viewer.handle_annotation_selection(self, event)
206
+ elif event.button() == Qt.RightButton:
207
+ event.ignore()
208
+ return
209
+ super().mousePressEvent(event)
210
+
211
+
212
+ class AnnotationDataItem:
213
+ """
214
+ Holds all annotation state information for consistent display across viewers.
215
+ This acts as the "ViewModel" for a single annotation, serving as the single
216
+ source of truth for its state in the UI.
217
+ """
218
+
219
+ def __init__(self, annotation, embedding_x=None, embedding_y=None, embedding_id=None):
220
+ self.annotation = annotation
221
+ self.embedding_x = embedding_x if embedding_x is not None else 0.0
222
+ self.embedding_y = embedding_y if embedding_y is not None else 0.0
223
+ self.embedding_id = embedding_id if embedding_id is not None else 0
224
+ self._is_selected = False
225
+ self._preview_label = None
226
+ self._original_label = annotation.label
227
+ self._marked_for_deletion = False
228
+
229
+ @property
230
+ def effective_label(self):
231
+ """Get the current effective label (preview if it exists, otherwise original)."""
232
+ return self._preview_label if self._preview_label else self.annotation.label
233
+
234
+ @property
235
+ def effective_color(self):
236
+ """Get the effective color for this annotation based on the effective label."""
237
+ return self.effective_label.color
238
+
239
+ @property
240
+ def is_selected(self):
241
+ """Check if this annotation is selected."""
242
+ return self._is_selected
243
+
244
+ def set_selected(self, selected):
245
+ """Set the selection state. This is the single point of control."""
246
+ self._is_selected = selected
247
+
248
+ def set_preview_label(self, label):
249
+ """Set a preview label for this annotation."""
250
+ self._preview_label = label
251
+
252
+ def clear_preview_label(self):
253
+ """Clear the preview label and revert to the original."""
254
+ self._preview_label = None
255
+
256
+ def has_preview_changes(self):
257
+ """Check if this annotation has a temporary preview label assigned."""
258
+ return self._preview_label is not None
259
+
260
+ def mark_for_deletion(self):
261
+ """Mark this annotation for deletion."""
262
+ self._marked_for_deletion = True
263
+
264
+ def unmark_for_deletion(self):
265
+ """Unmark this annotation for deletion."""
266
+ self._marked_for_deletion = False
267
+
268
+ def is_marked_for_deletion(self):
269
+ """Check if this annotation is marked for deletion."""
270
+ return self._marked_for_deletion
271
+
272
+ def apply_preview_permanently(self):
273
+ """Apply the preview label permanently to the underlying annotation object."""
274
+ if self._preview_label:
275
+ self.annotation.update_label(self._preview_label)
276
+ self.annotation.update_user_confidence(self._preview_label)
277
+ self._original_label = self._preview_label
278
+ self._preview_label = None
279
+ return True
280
+ return False
281
+
282
+ def get_display_info(self):
283
+ """Get display information for this annotation."""
284
+ return {
285
+ 'id': self.annotation.id,
286
+ 'label': self.effective_label.short_label_code,
287
+ 'confidence': self.get_effective_confidence(),
288
+ 'type': type(self.annotation).__name__,
289
+ 'image': os.path.basename(self.annotation.image_path),
290
+ 'embedding_id': self.embedding_id,
291
+ 'color': self.effective_color
292
+ }
293
+
294
+ def get_effective_confidence(self):
295
+ """Get the effective confidence value."""
296
+ if self.annotation.verified and hasattr(self.annotation, 'user_confidence') and self.annotation.user_confidence:
297
+ return list(self.annotation.user_confidence.values())[0]
298
+ elif hasattr(self.annotation, 'machine_confidence') and self.annotation.machine_confidence:
299
+ return list(self.annotation.machine_confidence.values())[0]
300
+ return 0.0