coralnet-toolbox 0.0.66__py2.py3-none-any.whl → 0.0.68__py2.py3-none-any.whl

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 (29) hide show
  1. coralnet_toolbox/Annotations/QtMultiPolygonAnnotation.py +1 -1
  2. coralnet_toolbox/Annotations/QtPatchAnnotation.py +1 -1
  3. coralnet_toolbox/Annotations/QtPolygonAnnotation.py +1 -1
  4. coralnet_toolbox/Annotations/QtRectangleAnnotation.py +1 -1
  5. coralnet_toolbox/AutoDistill/QtDeployModel.py +4 -0
  6. coralnet_toolbox/Explorer/QtDataItem.py +300 -0
  7. coralnet_toolbox/Explorer/QtExplorer.py +1825 -0
  8. coralnet_toolbox/Explorer/QtSettingsWidgets.py +494 -0
  9. coralnet_toolbox/Explorer/__init__.py +7 -0
  10. coralnet_toolbox/IO/QtImportViscoreAnnotations.py +2 -4
  11. coralnet_toolbox/IO/QtOpenProject.py +2 -1
  12. coralnet_toolbox/Icons/magic.png +0 -0
  13. coralnet_toolbox/MachineLearning/DeployModel/QtDetect.py +4 -0
  14. coralnet_toolbox/MachineLearning/DeployModel/QtSegment.py +4 -0
  15. coralnet_toolbox/MachineLearning/TrainModel/QtClassify.py +1 -1
  16. coralnet_toolbox/QtConfidenceWindow.py +2 -23
  17. coralnet_toolbox/QtEventFilter.py +18 -7
  18. coralnet_toolbox/QtLabelWindow.py +35 -8
  19. coralnet_toolbox/QtMainWindow.py +81 -2
  20. coralnet_toolbox/QtProgressBar.py +12 -0
  21. coralnet_toolbox/SAM/QtDeployGenerator.py +4 -0
  22. coralnet_toolbox/__init__.py +1 -1
  23. coralnet_toolbox/utilities.py +24 -0
  24. {coralnet_toolbox-0.0.66.dist-info → coralnet_toolbox-0.0.68.dist-info}/METADATA +12 -6
  25. {coralnet_toolbox-0.0.66.dist-info → coralnet_toolbox-0.0.68.dist-info}/RECORD +29 -24
  26. {coralnet_toolbox-0.0.66.dist-info → coralnet_toolbox-0.0.68.dist-info}/WHEEL +0 -0
  27. {coralnet_toolbox-0.0.66.dist-info → coralnet_toolbox-0.0.68.dist-info}/entry_points.txt +0 -0
  28. {coralnet_toolbox-0.0.66.dist-info → coralnet_toolbox-0.0.68.dist-info}/licenses/LICENSE.txt +0 -0
  29. {coralnet_toolbox-0.0.66.dist-info → coralnet_toolbox-0.0.68.dist-info}/top_level.txt +0 -0
@@ -394,12 +394,39 @@ class LabelWindow(QWidget):
394
394
  def update_annotation_count(self):
395
395
  """Update the annotation count display with current selection and total count."""
396
396
  annotations = self.annotation_window.get_image_annotations()
397
- selected_count = len(self.annotation_window.selected_annotations)
398
-
399
- if selected_count == 0:
397
+
398
+ # Check if we're in Explorer mode
399
+ if (hasattr(self.main_window, 'explorer_window') and
400
+ self.main_window.explorer_window and
401
+ hasattr(self.main_window.explorer_window, 'annotation_viewer')):
402
+
403
+ annotation_viewer = self.main_window.explorer_window.annotation_viewer
404
+
405
+ # --- REORDERED LOGIC ---
406
+ # Priority 1: Always check for a selection in Explorer first.
407
+ explorer_selected_count = len(annotation_viewer.selected_widgets)
408
+ if explorer_selected_count > 0:
409
+ if explorer_selected_count == 1:
410
+ text = "Annotation: 1"
411
+ else:
412
+ text = f"Annotations: {explorer_selected_count}"
413
+ self.annotation_count_display.setText(text)
414
+ return # Exit early, selection count is most important.
415
+
416
+ # Priority 2: If no selection, THEN check for isolation mode.
417
+ if annotation_viewer.isolated_mode:
418
+ count = len(annotation_viewer.isolated_widgets)
419
+ text = f"Annotations: {count}"
420
+ self.annotation_count_display.setText(text)
421
+ return # Exit early
422
+
423
+ # --- ORIGINAL FALLBACK LOGIC (Unchanged) ---
424
+ annotation_window_selected_count = len(self.annotation_window.selected_annotations)
425
+
426
+ if annotation_window_selected_count == 0:
400
427
  text = f"Annotations: {len(annotations)}"
401
- elif selected_count > 1:
402
- text = f"Annotations: {selected_count}"
428
+ elif annotation_window_selected_count > 1:
429
+ text = f"Annotations: {annotation_window_selected_count}"
403
430
  else:
404
431
  try:
405
432
  selected_annotation = self.annotation_window.selected_annotations[0]
@@ -808,6 +835,8 @@ class LabelWindow(QWidget):
808
835
  current_image_path = self.annotation_window.current_image_path
809
836
  if current_image_path:
810
837
  self.annotation_window.set_image(current_image_path)
838
+ # Update annotation count after merge
839
+ self.update_annotation_count()
811
840
 
812
841
  def delete_label(self, label):
813
842
  """Delete the specified label and its associated annotations after confirmation."""
@@ -1180,6 +1209,4 @@ class EditLabelDialog(QDialog):
1180
1209
  new_long=new_long,
1181
1210
  new_color=new_color
1182
1211
  )
1183
- self.accept()
1184
-
1185
-
1212
+ self.accept()
@@ -22,6 +22,8 @@ from coralnet_toolbox.QtConfidenceWindow import ConfidenceWindow
22
22
  from coralnet_toolbox.QtImageWindow import ImageWindow
23
23
  from coralnet_toolbox.QtLabelWindow import LabelWindow
24
24
 
25
+ from coralnet_toolbox.Explorer import ExplorerWindow
26
+
25
27
  from coralnet_toolbox.QtPatchSampling import PatchSamplingDialog
26
28
 
27
29
  from coralnet_toolbox.Tile import (
@@ -185,6 +187,8 @@ class MainWindow(QMainWindow):
185
187
  self.image_window = ImageWindow(self)
186
188
  self.label_window = LabelWindow(self)
187
189
  self.confidence_window = ConfidenceWindow(self)
190
+
191
+ self.explorer_window = None # Initialized in open_explorer_window
188
192
 
189
193
  # TODO update IO classes to have dialogs
190
194
  # Create dialogs (I/O)
@@ -438,11 +442,18 @@ class MainWindow(QMainWindow):
438
442
  self.save_project_action.triggered.connect(self.open_save_project_dialog)
439
443
  self.file_menu.addAction(self.save_project_action)
440
444
 
445
+ # Explorer menu
446
+ self.explorer_menu = self.menu_bar.addMenu("Explorer")
447
+ # Open Explorer
448
+ self.open_explorer_action = QAction("Open Explorer", self)
449
+ self.open_explorer_action.triggered.connect(self.open_explorer_window)
450
+ self.explorer_menu.addAction(self.open_explorer_action)
451
+
441
452
  # Sampling Annotations menu
442
453
  self.annotation_sampling_action = QAction("Sample", self)
443
454
  self.annotation_sampling_action.triggered.connect(self.open_patch_annotation_sampling_dialog)
444
455
  self.menu_bar.addAction(self.annotation_sampling_action)
445
-
456
+
446
457
  # Tile menu
447
458
  self.tile_menu = self.menu_bar.addMenu("Tile")
448
459
 
@@ -471,6 +482,7 @@ class MainWindow(QMainWindow):
471
482
 
472
483
  # CoralNet menu
473
484
  self.coralnet_menu = self.menu_bar.addMenu("CoralNet")
485
+
474
486
  # CoralNet Authenticate
475
487
  self.coralnet_authenticate_action = QAction("Authenticate", self)
476
488
  self.coralnet_authenticate_action.triggered.connect(self.open_coralnet_authenticate_dialog)
@@ -952,6 +964,15 @@ class MainWindow(QMainWindow):
952
964
  super().showEvent(event)
953
965
  self.showMaximized()
954
966
 
967
+ def closeEvent(self, event):
968
+ """Ensure the explorer window is closed when the main window closes."""
969
+ if self.explorer_window:
970
+ # Setting parent to None prevents it from being deleted with main window
971
+ # before it can be properly handled.
972
+ self.explorer_window.setParent(None)
973
+ self.explorer_window.close()
974
+ super().closeEvent(event)
975
+
955
976
  def changeEvent(self, event):
956
977
  """Handle window state changes (minimize, maximize, restore)."""
957
978
  super().changeEvent(event)
@@ -1594,8 +1615,66 @@ class MainWindow(QMainWindow):
1594
1615
  self.export_mask_annotations_dialog.exec_()
1595
1616
  except Exception as e:
1596
1617
  QMessageBox.critical(self, "Critical Error", f"{e}")
1618
+
1619
+ def open_explorer_window(self):
1620
+ """Open the Explorer window, moving the LabelWindow into it."""
1621
+ # Check if there are any images in the project
1622
+ if not self.image_window.raster_manager.image_paths:
1623
+ QMessageBox.warning(self,
1624
+ "No Images Loaded",
1625
+ "Please load images into the project before opening Explorer.")
1626
+ return
1627
+
1628
+ # Check if there are any annotations
1629
+ if not self.annotation_window.annotations_dict:
1630
+ QMessageBox.warning(self,
1631
+ "Explorer",
1632
+ "No annotations are present in the project.")
1633
+ return
1634
+
1635
+ try:
1636
+ self.untoggle_all_tools()
1637
+ # Recreate the explorer window, passing the main window instance
1638
+ self.explorer_window = ExplorerWindow(self)
1639
+
1640
+ # Move the label_window from the main layout to the explorer
1641
+ # The ExplorerWindow's __init__ will handle adding it to its own layout.
1642
+ self.left_layout.removeWidget(self.label_window)
1643
+ self.label_window.setParent(self.explorer_window.left_panel) # Re-parent
1644
+ self.explorer_window.left_layout.insertWidget(1, self.label_window) # Add to explorer layout
1645
+
1646
+ # Make the explorer window modal to block interaction with main window
1647
+ self.explorer_window.setWindowModality(Qt.ApplicationModal)
1648
+ # Disable the main window explicitly
1649
+ self.setEnabled(False)
1650
+
1651
+ self.explorer_window.showMaximized()
1652
+ self.explorer_window.activateWindow()
1653
+ self.explorer_window.raise_()
1654
+ except Exception as e:
1655
+ QMessageBox.critical(self, "Critical Error", f"{e}")
1656
+ if self.explorer_window:
1657
+ self.explorer_window.close() # Ensure cleanup
1658
+ self.explorer_window = None
1659
+
1660
+ def explorer_closed(self):
1661
+ """Handle the explorer window being closed."""
1662
+ if self.explorer_window:
1663
+ # Move the label_window back to the main window's layout
1664
+ self.label_window.setParent(self.central_widget) # Re-parent back
1665
+ self.left_layout.addWidget(self.label_window, 15) # Add it back to the layout
1666
+ self.label_window.show()
1667
+ self.label_window.resizeEvent(None)
1668
+ self.resizeEvent(None)
1669
+
1670
+ # Re-enable the main window
1671
+ self.setEnabled(True)
1672
+
1673
+ # Clean up reference
1674
+ self.explorer_window = None
1597
1675
 
1598
1676
  def open_patch_annotation_sampling_dialog(self):
1677
+ """Open the Patch Annotation Sampling dialog to sample annotations from images"""
1599
1678
  # Check if there are any images in the project
1600
1679
  if not self.image_window.raster_manager.image_paths:
1601
1680
  QMessageBox.warning(self,
@@ -2312,4 +2391,4 @@ class ClickableAction(QAction):
2312
2391
  def mousePressEvent(self, event: QMouseEvent):
2313
2392
  if event.button() == Qt.LeftButton:
2314
2393
  self.trigger()
2315
- super().mousePressEvent(event)
2394
+ super().mousePressEvent(event)
@@ -69,6 +69,18 @@ class ProgressBar(QDialog):
69
69
  self.canceled = False
70
70
  self.progress_bar.setValue(0)
71
71
  QApplication.processEvents()
72
+
73
+ def set_busy_mode(self, busy_text="Processing..."):
74
+ """
75
+ Sets the progress bar to an indeterminate "busy" state for tasks
76
+ of unknown duration.
77
+ """
78
+ # Update the title to reflect the current task
79
+ self.set_title(busy_text)
80
+
81
+ # Setting the min and max to 0 enables the busy/indeterminate mode
82
+ self.progress_bar.setRange(0, 0)
83
+ QApplication.processEvents()
72
84
 
73
85
  def start_progress(self, max_value):
74
86
  """
@@ -564,6 +564,10 @@ class DeployGeneratorDialog(QDialog):
564
564
  self.update_sam_task_state()
565
565
  if self.task != 'segment':
566
566
  return results_list
567
+
568
+ if not self.sam_dialog or self.use_sam_dropdown.currentText() == "False":
569
+ # If SAM is not deployed or not selected, return the results as is
570
+ return results_list
567
571
 
568
572
  if self.sam_dialog.loaded_model is None:
569
573
  # If SAM is not loaded, ensure we do not use it accidentally
@@ -1,6 +1,6 @@
1
1
  """Top-level package for CoralNet-Toolbox."""
2
2
 
3
- __version__ = "0.0.66"
3
+ __version__ = "0.0.68"
4
4
  __author__ = "Jordan Pierce"
5
5
  __email__ = "jordan.pierce@noaa.gov"
6
6
  __credits__ = "National Center for Coastal and Ocean Sciences (NCCOS)"
@@ -18,6 +18,7 @@ from rasterio.windows import Window
18
18
  from shapely.validation import make_valid
19
19
  from shapely.geometry import Polygon, MultiPolygon, LineString, GeometryCollection
20
20
 
21
+ from PyQt5.QtCore import Qt
21
22
  from PyQt5.QtGui import QImage
22
23
  from PyQt5.QtWidgets import QMessageBox, QApplication, QPushButton
23
24
 
@@ -518,6 +519,29 @@ def pixmap_to_numpy(pixmap):
518
519
  return numpy_array
519
520
 
520
521
 
522
+ def scale_pixmap(pixmap, max_size):
523
+ """Scale pixmap and graphic if they exceed max dimension while preserving aspect ratio"""
524
+ width = pixmap.width()
525
+ height = pixmap.height()
526
+
527
+ # Check if scaling is needed
528
+ if width <= max_size and height <= max_size:
529
+ return pixmap
530
+
531
+ # Calculate scale factor based on largest dimension
532
+ scale = max_size / max(width, height)
533
+
534
+ # Scale pixmap
535
+ scaled_pixmap = pixmap.scaled(
536
+ int(width * scale),
537
+ int(height * scale),
538
+ Qt.KeepAspectRatio,
539
+ Qt.SmoothTransformation
540
+ )
541
+
542
+ return scaled_pixmap
543
+
544
+
521
545
  def attempt_download_asset(app, asset_name, asset_url):
522
546
  """
523
547
  Attempt to download an asset from the given URL.
@@ -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
 
@@ -1,23 +1,23 @@
1
1
  coralnet_toolbox/QtAnnotationWindow.py,sha256=ohYkvUdUAdNmZJXqKtCGnnXQ3cPtnSkFEtwH_mWnn3c,37808
2
- coralnet_toolbox/QtConfidenceWindow.py,sha256=m2cJyyqu3mM_wDvOm3mHJi8jLjgIkWfuBlYmanGOPpQ,16855
3
- coralnet_toolbox/QtEventFilter.py,sha256=_Vyd7IEmD_BAkf4gMifwW60N8iyLSVx3IWHeVBMYwOA,6015
2
+ coralnet_toolbox/QtConfidenceWindow.py,sha256=L5hR23uW91GpqnsNS9R1XF3zCTe2aU7w0iDoQMV0oyE,16190
3
+ coralnet_toolbox/QtEventFilter.py,sha256=RpZpJjvO4MIblYRry3s_3v1OyyDP_-w0Lf9QIR8PJZM,6602
4
4
  coralnet_toolbox/QtImageWindow.py,sha256=vLziMSEWFfVRSBN0nUNkosgk3LiNxZDqPwbinz9ZivQ,49356
5
- coralnet_toolbox/QtLabelWindow.py,sha256=c4l_B6CBqB0w0jYcrPOqbRT3eJTH4O62wbBxgOm9hbY,49437
6
- coralnet_toolbox/QtMainWindow.py,sha256=FWIlLgsFVvrTkutzInypOUACHD89P2WN8rUQ5t9H4lI,106488
5
+ coralnet_toolbox/QtLabelWindow.py,sha256=-4GCk4pTY9g4ADH1iE__4xwqT-7UR_7VCT8v-bJzerk,50869
6
+ coralnet_toolbox/QtMainWindow.py,sha256=kkd27oCLnrwQkTi_dxcPE83gJg4ZSMy7MJdPW2qJ1FE,110105
7
7
  coralnet_toolbox/QtPatchSampling.py,sha256=Ehj06auBGfQwIruLNYQjF8eFOCpl8G72p42UXXb2mUo,29013
8
- coralnet_toolbox/QtProgressBar.py,sha256=Jie6FHwaSktynN_QlgzunSn1BLiWyTgYGmiMpbiu8p8,5808
8
+ coralnet_toolbox/QtProgressBar.py,sha256=pnozUOcVjfO_yTS9z8wOMPcrrrOtG_FeCknTcdI6eyk,6250
9
9
  coralnet_toolbox/QtWorkArea.py,sha256=YXRvHQKpWUtWyv_o9lZ8rmxfm28dUOG9pmMUeimDhQ4,13578
10
- coralnet_toolbox/__init__.py,sha256=9B11Af9Uxb34zn-Cs9GHXnRP3mfb7Jw_9j3LcHBs7Xo,207
10
+ coralnet_toolbox/__init__.py,sha256=NKSxRf_um61feYVSn-Ok9M8drT3lJjt668eGAffey2c,207
11
11
  coralnet_toolbox/main.py,sha256=6j2B_1reC_KDmqvq1C0fB-UeSEm8eeJOozp2f4XXMLQ,1573
12
- coralnet_toolbox/utilities.py,sha256=iL-IkBAyqQH7So08lN2UldBR0Wv8NrOFKzqa0SByGPE,26470
12
+ coralnet_toolbox/utilities.py,sha256=eUkxXuWaNFH83LSW-KniwujkXKJ2rK04czx3k3OPiAY,27115
13
13
  coralnet_toolbox/Annotations/QtAnnotation.py,sha256=I2Givo3p92gfyVYnnFHBjxso-hmQCCXM531Pygiebfw,29242
14
- coralnet_toolbox/Annotations/QtMultiPolygonAnnotation.py,sha256=c9-0U4xFbUc6BTpqbNcdxyiraz-gli5vMF4fFM0jhIM,15587
15
- coralnet_toolbox/Annotations/QtPatchAnnotation.py,sha256=kRjmmS8sl6MqcWrY-jpZyEzoXS237gr-5JgqFCfGGxk,20084
16
- coralnet_toolbox/Annotations/QtPolygonAnnotation.py,sha256=X4YKBKh33Wm-5ESpRXFITseLxLr8eyWz1gOsNSzWRYE,26894
17
- coralnet_toolbox/Annotations/QtRectangleAnnotation.py,sha256=z2ADBMztq61lIY_qNdYBiIVxZxpx4rRW7kq3Ntf2ngo,20098
14
+ coralnet_toolbox/Annotations/QtMultiPolygonAnnotation.py,sha256=ErAT31gw-zhEVNxkPRpyB9uw-NSpPh-ShCBxpscXdRw,15579
15
+ coralnet_toolbox/Annotations/QtPatchAnnotation.py,sha256=67fNnK_-muyhGZdGB0kBDx-JGuflv1TM6q5ikfW_zOk,20076
16
+ coralnet_toolbox/Annotations/QtPolygonAnnotation.py,sha256=1EkZEJlO4VZ4so01Sat2T8LeO1LNs7HbGJLO-G2_73Q,26886
17
+ coralnet_toolbox/Annotations/QtRectangleAnnotation.py,sha256=nLL_HIkcnuB6CeqE-v8LMAoFgTEhZGHwt5yeEnLaVWQ,20090
18
18
  coralnet_toolbox/Annotations/__init__.py,sha256=bpMldC70tT_lzMrOdBNDkEhG9dCX3tXEBd48IrcUg3E,419
19
19
  coralnet_toolbox/AutoDistill/QtBatchInference.py,sha256=k871aW3XRX8kc4BDaS1aipbPh9WOZxgmilF2c4KOdVA,5646
20
- coralnet_toolbox/AutoDistill/QtDeployModel.py,sha256=wwMIM4ZRtfSZR5_es7S4cEaQj353FFaurLbMrLRiwy0,24960
20
+ coralnet_toolbox/AutoDistill/QtDeployModel.py,sha256=6alhzvA3KYEeLaQj-Qhs9GicjNQyVoQbnvgZ3lxGnCU,25162
21
21
  coralnet_toolbox/AutoDistill/__init__.py,sha256=-cJSCr3HSVcybbkvdSZY_zz9EDLESq9A3gisHu3gIgM,206
22
22
  coralnet_toolbox/AutoDistill/Models/GroundingDINO.py,sha256=xG20nLOrKjtzRhZznIIdwFXxBJ7RCeQ7h1z0V0J6trE,2781
23
23
  coralnet_toolbox/AutoDistill/Models/OWLViT.py,sha256=disVxSQ80sS4SVYdwrQocFP_LN6YDQQhzfeORWe4veU,2572
@@ -35,6 +35,10 @@ coralnet_toolbox/Common/QtUpdateImagePaths.py,sha256=_hJYx6hXdAOfH_m77f75AQduQ0W
35
35
  coralnet_toolbox/CoralNet/QtAuthenticate.py,sha256=Y__iY0Kcosz6AOV7dlJBwiB6Hte40wHahHe-OmRngZA,13267
36
36
  coralnet_toolbox/CoralNet/QtDownload.py,sha256=HBb8TpZRIEFirGIaIAV1v8qg3fL4cP6Bf-hUiqXoiLE,48516
37
37
  coralnet_toolbox/CoralNet/__init__.py,sha256=ILkAZh6mlAK1UaCCZjCB9JZxd-oY4cIgfnIC8UgjjIU,188
38
+ coralnet_toolbox/Explorer/QtDataItem.py,sha256=7IT6sViN1yqkifrSHHXRz1l3ty9ln37H1NMLYa-OphU,11930
39
+ coralnet_toolbox/Explorer/QtExplorer.py,sha256=fMto27Op99PE9vdNhYwXic7_0V7LvOwnG-ZFEGKKGaA,79066
40
+ coralnet_toolbox/Explorer/QtSettingsWidgets.py,sha256=hAdRkWwfa42mC9jJ370VOx_-4dxj7D-qzsN8hlNw4j4,20910
41
+ coralnet_toolbox/Explorer/__init__.py,sha256=wZPhf2oaUUyIQ2WK48Aj-4q1ENIZG2dGl1HF_mjhI6w,116
38
42
  coralnet_toolbox/IO/QtExportAnnotations.py,sha256=xeaS0BukC3cpkBIGT9DXRqHmvHhp-vOU47h6EoANpNg,4474
39
43
  coralnet_toolbox/IO/QtExportCoralNetAnnotations.py,sha256=4royhF63EmeOlSIBX389EUjjvE-SF44_maW6qm52mdA,2778
40
44
  coralnet_toolbox/IO/QtExportGeoJSONAnnotations.py,sha256=9HkHjQTRtH4VnYa50c5pyqQz30R_6gIH5i3xFF6kDWI,27759
@@ -51,8 +55,8 @@ coralnet_toolbox/IO/QtImportImages.py,sha256=apgv16dzcg-j6ugimvG_Houtu3m--Y9jyAZ
51
55
  coralnet_toolbox/IO/QtImportLabels.py,sha256=_xzm-TDoFVgAbjdBwvOscVskPcLN_z054P5IkT73ohU,3291
52
56
  coralnet_toolbox/IO/QtImportTagLabAnnotations.py,sha256=os4D7SLy6BkzZ1DlWSA_QOoREXUuji0I7XGZS1az5GQ,12321
53
57
  coralnet_toolbox/IO/QtImportTagLabLabels.py,sha256=cCqFBOrAlnbiOL0xFY8G_FSTmeVsnYWh-bmVE-rfg0k,3927
54
- coralnet_toolbox/IO/QtImportViscoreAnnotations.py,sha256=VleKLlj6XY6AvVxNPo5pU20n81p9DTHGSH8PrYec2X0,12103
55
- coralnet_toolbox/IO/QtOpenProject.py,sha256=rgYOKekAyqYZqhrcydEN35Di0leDfuFfBvZdajLE5ts,15767
58
+ coralnet_toolbox/IO/QtImportViscoreAnnotations.py,sha256=TYlDzCLMXizoHFRiaofNdE-t9Cr7sJGj5NFsVUi6cjU,11871
59
+ coralnet_toolbox/IO/QtOpenProject.py,sha256=aiQ8J7ROv8D1cPaMRaRr7arMxou4_-w5IJ7fTzWNS1o,15841
56
60
  coralnet_toolbox/IO/QtSaveProject.py,sha256=TRUfg9AnyHe79mqNzV4Pzw60RVd65xEjxzBb_-ttzXM,11397
57
61
  coralnet_toolbox/IO/__init__.py,sha256=M3KH90zIoOVoPu1nDS-gvoVV3O24S_KM-4CvxXR-nfw,1538
58
62
  coralnet_toolbox/Icons/1.png,sha256=Ygcz3idjoa-RNaPXQXbHfw853DhnpD6iBa3nNFVimJ4,180
@@ -72,6 +76,7 @@ coralnet_toolbox/Icons/hide.png,sha256=eEV9v7i5_tQM25ktzknBKtIR0uOhuqacvPhhhbwop
72
76
  coralnet_toolbox/Icons/home.png,sha256=YGOhpX2yZuFU-GkuO8jH8-4Kfwu8qBILw9k_kw_NATo,738
73
77
  coralnet_toolbox/Icons/lock.png,sha256=ap_g-9bNu4w6fiXVve6ktdEnzldR_VkmAFK0MVtQrCc,1682
74
78
  coralnet_toolbox/Icons/machine.png,sha256=W6vcCd8zfxv8znGwF7bAtG5YskpWoYidkme4BHq_S6A,1044
79
+ coralnet_toolbox/Icons/magic.png,sha256=V2ULBwI2ClnKyYRiCKeJ1g-hi1jLSZRKSc0NQLYH9Yo,1889
75
80
  coralnet_toolbox/Icons/opaque.png,sha256=53S_jopgS7jffpNLB2pCBex5cWN86vNr801j30kP-2s,823
76
81
  coralnet_toolbox/Icons/parameters.png,sha256=tdSCfhr_dauBmZoJdxgu6LhiOXmRsfoQeJO0IfAFZKE,1362
77
82
  coralnet_toolbox/Icons/patch.png,sha256=ZcvdB15jrnqtzVh344OQgSq0buIKY9BZ7NRsxDNMo90,543
@@ -119,8 +124,8 @@ coralnet_toolbox/MachineLearning/Community/cfg/segment/yolo11-p2.yaml,sha256=H2P
119
124
  coralnet_toolbox/MachineLearning/Community/cfg/segment/yolo11-p6.yaml,sha256=jg2PDDeIPvBG_QXNOMyro7LYLy0HNZ5F4s7fiAg0xys,3283
120
125
  coralnet_toolbox/MachineLearning/DeployModel/QtBase.py,sha256=ZK2p9euv9AM2hhpAYWyVLcIk_8UwMVgeTAEYQbXWJBw,12609
121
126
  coralnet_toolbox/MachineLearning/DeployModel/QtClassify.py,sha256=4YSEENGY2pZpiFqt1tfr-m1oHhP9V4uID8gdOVkZwwI,6331
122
- coralnet_toolbox/MachineLearning/DeployModel/QtDetect.py,sha256=Yw1NfLfC6-gXizJu6zzhUhgg4QPJRfR4qjRpkoXpab8,14728
123
- coralnet_toolbox/MachineLearning/DeployModel/QtSegment.py,sha256=_ggTlnyuuZABy9I8fbaYEttKFz3cNzbPxpfVAGkbaVI,14456
127
+ coralnet_toolbox/MachineLearning/DeployModel/QtDetect.py,sha256=RL_S88RxX0c7FBSy0Mmzeq7AErIyjRh-k0SjzTcjczU,14930
128
+ coralnet_toolbox/MachineLearning/DeployModel/QtSegment.py,sha256=jL2tdLzOixdJ9pwloqJH2Bq6FOew3yg1ebBrLFrr5_Q,14658
124
129
  coralnet_toolbox/MachineLearning/DeployModel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
130
  coralnet_toolbox/MachineLearning/EvaluateModel/QtBase.py,sha256=stOQlB9NP1kZLwfQipA8J8_EzcgKi-9rvxar_AyWwjc,11526
126
131
  coralnet_toolbox/MachineLearning/EvaluateModel/QtClassify.py,sha256=EsUBbSxcoOymO3ezPUI1X0M_g9x7Y2oVU5myflet7pw,2268
@@ -142,7 +147,7 @@ coralnet_toolbox/MachineLearning/MergeDatasets/__init__.py,sha256=47DEQpj8HBSa-_
142
147
  coralnet_toolbox/MachineLearning/OptimizeModel/QtBase.py,sha256=06irheL8aKvtwKBQLLJUohvWvrMqKFC-jhEEoVqIYdg,8890
143
148
  coralnet_toolbox/MachineLearning/OptimizeModel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
144
149
  coralnet_toolbox/MachineLearning/TrainModel/QtBase.py,sha256=lLGmgDSvjQFYD2RdF7eC6U5xU5in2rC26RQ3lmKvfLY,37460
145
- coralnet_toolbox/MachineLearning/TrainModel/QtClassify.py,sha256=8hiBk_VmYpCX8Tr7LG4OW4PvqQLItOPyQryJarMcTWI,3266
150
+ coralnet_toolbox/MachineLearning/TrainModel/QtClassify.py,sha256=ss5ppGbrpULzUPmeRmfqZjiqZPp7XbdUZ4BzSX0ehu0,3267
146
151
  coralnet_toolbox/MachineLearning/TrainModel/QtDetect.py,sha256=uxopZkrNkl3tImMNSDwC2ENpFAxdG0NLiwRwqNnbep0,4467
147
152
  coralnet_toolbox/MachineLearning/TrainModel/QtSegment.py,sha256=y8bpNS24SQxyg967RSi6TraqHSmlJYj8kbvC_5HMBIM,3597
148
153
  coralnet_toolbox/MachineLearning/TrainModel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -178,7 +183,7 @@ coralnet_toolbox/Results/Masks.py,sha256=C-zoobRaWXP_QdGcL7ZgSxytHOBdHIBUbQuGnoM
178
183
  coralnet_toolbox/Results/ResultsProcessor.py,sha256=q_UZNYggpZyY4_P6RpDLbY1ygNH49GXlP1s9ZFI3yF0,17261
179
184
  coralnet_toolbox/Results/__init__.py,sha256=WPdlq8aXzjrdQo5T3UqFh7jxge33iNEHiSRAmm0eJuw,630
180
185
  coralnet_toolbox/SAM/QtBatchInference.py,sha256=zG0vVPBIozZQu043hwjI3_gjlwx-iWeikhu3QxMam4U,6931
181
- coralnet_toolbox/SAM/QtDeployGenerator.py,sha256=YnmsZVkdfetkVr4FMxw670kF6Qwdu-58j-L98G81FRM,25587
186
+ coralnet_toolbox/SAM/QtDeployGenerator.py,sha256=CcedOASyV_jLJyqsLRdkeGKBY8Y_AjwWt2-_xgLcdk4,25789
182
187
  coralnet_toolbox/SAM/QtDeployPredictor.py,sha256=D1DyqjLXQDTNiLp9OVgsiI97fMFftab_goEkQvDH1DU,23516
183
188
  coralnet_toolbox/SAM/__init__.py,sha256=Zxd75pFMrt5DfSmNNVSsQeCucIQ2rVaEiS0hT_OVIMM,293
184
189
  coralnet_toolbox/SeeAnything/QtBatchInference.py,sha256=1UMogdTWgO3eEwTquJpIYjILUbjkhLEHFDGsHSGzY-I,16200
@@ -209,9 +214,9 @@ coralnet_toolbox/Tools/QtTool.py,sha256=2MCjT151gYBN8KbsK0GX4WOrEg1uw3oeSkp7Elw1
209
214
  coralnet_toolbox/Tools/QtWorkAreaTool.py,sha256=-CDrEPenOdSI3sf5wn19Cip4alE1ef7WsRDxQFDkHlc,22162
210
215
  coralnet_toolbox/Tools/QtZoomTool.py,sha256=F9CAoABv1jxcUS7dyIh1FYjgjOXYRI1xtBPNIR1g62o,4041
211
216
  coralnet_toolbox/Tools/__init__.py,sha256=218iQ8IFXIkKXiUDVYtXk9e08UY9-LhHjcryaJAanQ0,797
212
- coralnet_toolbox-0.0.66.dist-info/licenses/LICENSE.txt,sha256=AURacZ_G_PZKqqPQ9VB9Sqegblk67RNgWSGAYKwXXMY,521
213
- coralnet_toolbox-0.0.66.dist-info/METADATA,sha256=qfto0iWfF3y1_KaU8v69Do8HnVj-3Rm958g5Xv6pxFg,17070
214
- coralnet_toolbox-0.0.66.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
215
- coralnet_toolbox-0.0.66.dist-info/entry_points.txt,sha256=oEeMoDlJ_2lq95quOeDHIx9hZpubUlSo80OLtgbcrbM,63
216
- coralnet_toolbox-0.0.66.dist-info/top_level.txt,sha256=SMWPh4_9JfB8zVpPOOvjucV2_B_hvWW7bNWmMjG0LsY,17
217
- coralnet_toolbox-0.0.66.dist-info/RECORD,,
217
+ coralnet_toolbox-0.0.68.dist-info/licenses/LICENSE.txt,sha256=AURacZ_G_PZKqqPQ9VB9Sqegblk67RNgWSGAYKwXXMY,521
218
+ coralnet_toolbox-0.0.68.dist-info/METADATA,sha256=8bXO26D1r1thJ7dWD73C1PBHE2YkkBQi88O58lkZtjE,17872
219
+ coralnet_toolbox-0.0.68.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
220
+ coralnet_toolbox-0.0.68.dist-info/entry_points.txt,sha256=oEeMoDlJ_2lq95quOeDHIx9hZpubUlSo80OLtgbcrbM,63
221
+ coralnet_toolbox-0.0.68.dist-info/top_level.txt,sha256=SMWPh4_9JfB8zVpPOOvjucV2_B_hvWW7bNWmMjG0LsY,17
222
+ coralnet_toolbox-0.0.68.dist-info/RECORD,,