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.
- coralnet_toolbox/Annotations/QtMultiPolygonAnnotation.py +1 -1
- coralnet_toolbox/Annotations/QtPatchAnnotation.py +1 -1
- coralnet_toolbox/Annotations/QtPolygonAnnotation.py +1 -1
- coralnet_toolbox/Annotations/QtRectangleAnnotation.py +1 -1
- coralnet_toolbox/AutoDistill/QtDeployModel.py +4 -0
- coralnet_toolbox/Explorer/QtDataItem.py +300 -0
- coralnet_toolbox/Explorer/QtExplorer.py +1825 -0
- coralnet_toolbox/Explorer/QtSettingsWidgets.py +494 -0
- coralnet_toolbox/Explorer/__init__.py +7 -0
- coralnet_toolbox/IO/QtImportViscoreAnnotations.py +2 -4
- coralnet_toolbox/IO/QtOpenProject.py +2 -1
- coralnet_toolbox/Icons/magic.png +0 -0
- coralnet_toolbox/MachineLearning/DeployModel/QtDetect.py +4 -0
- coralnet_toolbox/MachineLearning/DeployModel/QtSegment.py +4 -0
- coralnet_toolbox/MachineLearning/TrainModel/QtClassify.py +1 -1
- coralnet_toolbox/QtConfidenceWindow.py +2 -23
- coralnet_toolbox/QtEventFilter.py +18 -7
- coralnet_toolbox/QtLabelWindow.py +35 -8
- coralnet_toolbox/QtMainWindow.py +81 -2
- coralnet_toolbox/QtProgressBar.py +12 -0
- coralnet_toolbox/SAM/QtDeployGenerator.py +4 -0
- coralnet_toolbox/__init__.py +1 -1
- coralnet_toolbox/utilities.py +24 -0
- {coralnet_toolbox-0.0.66.dist-info → coralnet_toolbox-0.0.68.dist-info}/METADATA +12 -6
- {coralnet_toolbox-0.0.66.dist-info → coralnet_toolbox-0.0.68.dist-info}/RECORD +29 -24
- {coralnet_toolbox-0.0.66.dist-info → coralnet_toolbox-0.0.68.dist-info}/WHEEL +0 -0
- {coralnet_toolbox-0.0.66.dist-info → coralnet_toolbox-0.0.68.dist-info}/entry_points.txt +0 -0
- {coralnet_toolbox-0.0.66.dist-info → coralnet_toolbox-0.0.68.dist-info}/licenses/LICENSE.txt +0 -0
- {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
|
-
|
398
|
-
|
399
|
-
if
|
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
|
402
|
-
text = f"Annotations: {
|
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()
|
coralnet_toolbox/QtMainWindow.py
CHANGED
@@ -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
|
coralnet_toolbox/__init__.py
CHANGED
coralnet_toolbox/utilities.py
CHANGED
@@ -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.
|
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
|
-
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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=
|
3
|
-
coralnet_toolbox/QtEventFilter.py,sha256=
|
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
|
6
|
-
coralnet_toolbox/QtMainWindow.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
15
|
-
coralnet_toolbox/Annotations/QtPatchAnnotation.py,sha256=
|
16
|
-
coralnet_toolbox/Annotations/QtPolygonAnnotation.py,sha256=
|
17
|
-
coralnet_toolbox/Annotations/QtRectangleAnnotation.py,sha256=
|
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=
|
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=
|
55
|
-
coralnet_toolbox/IO/QtOpenProject.py,sha256=
|
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=
|
123
|
-
coralnet_toolbox/MachineLearning/DeployModel/QtSegment.py,sha256=
|
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=
|
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=
|
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.
|
213
|
-
coralnet_toolbox-0.0.
|
214
|
-
coralnet_toolbox-0.0.
|
215
|
-
coralnet_toolbox-0.0.
|
216
|
-
coralnet_toolbox-0.0.
|
217
|
-
coralnet_toolbox-0.0.
|
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,,
|
File without changes
|
File without changes
|
{coralnet_toolbox-0.0.66.dist-info → coralnet_toolbox-0.0.68.dist-info}/licenses/LICENSE.txt
RENAMED
File without changes
|
File without changes
|