lazylabel-gui 1.3.1__tar.gz → 1.3.3__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 (55) hide show
  1. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/PKG-INFO +1 -1
  2. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/pyproject.toml +1 -1
  3. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/core/file_manager.py +33 -1
  4. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/main_window.py +380 -119
  5. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/right_panel.py +29 -2
  6. lazylabel_gui-1.3.3/src/lazylabel/utils/fast_file_manager.py +831 -0
  7. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel_gui.egg-info/PKG-INFO +1 -1
  8. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel_gui.egg-info/SOURCES.txt +1 -1
  9. lazylabel_gui-1.3.1/src/lazylabel/ui/test_hover.py +0 -48
  10. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/LICENSE +0 -0
  11. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/README.md +0 -0
  12. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/setup.cfg +0 -0
  13. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/__init__.py +0 -0
  14. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/__main__.py +0 -0
  15. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/config/__init__.py +0 -0
  16. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/config/hotkeys.py +0 -0
  17. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/config/paths.py +0 -0
  18. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/config/settings.py +0 -0
  19. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/core/__init__.py +0 -0
  20. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/core/model_manager.py +0 -0
  21. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/core/segment_manager.py +0 -0
  22. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/main.py +0 -0
  23. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/models/__init__.py +0 -0
  24. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/models/sam2_model.py +0 -0
  25. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/models/sam_model.py +0 -0
  26. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/__init__.py +0 -0
  27. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/control_panel.py +0 -0
  28. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/editable_vertex.py +0 -0
  29. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/hotkey_dialog.py +0 -0
  30. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/hoverable_pixelmap_item.py +0 -0
  31. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/hoverable_polygon_item.py +0 -0
  32. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/modes/__init__.py +0 -0
  33. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/modes/base_mode.py +0 -0
  34. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/modes/multi_view_mode.py +0 -0
  35. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/modes/single_view_mode.py +0 -0
  36. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/numeric_table_widget_item.py +0 -0
  37. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/photo_viewer.py +0 -0
  38. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/reorderable_class_table.py +0 -0
  39. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/widgets/__init__.py +0 -0
  40. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/widgets/adjustments_widget.py +0 -0
  41. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/widgets/border_crop_widget.py +0 -0
  42. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/widgets/channel_threshold_widget.py +0 -0
  43. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/widgets/fft_threshold_widget.py +0 -0
  44. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/widgets/fragment_threshold_widget.py +0 -0
  45. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/widgets/model_selection_widget.py +0 -0
  46. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/widgets/settings_widget.py +0 -0
  47. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/ui/widgets/status_bar.py +0 -0
  48. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/utils/__init__.py +0 -0
  49. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/utils/custom_file_system_model.py +0 -0
  50. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/utils/logger.py +0 -0
  51. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel/utils/utils.py +0 -0
  52. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel_gui.egg-info/dependency_links.txt +0 -0
  53. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel_gui.egg-info/entry_points.txt +0 -0
  54. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel_gui.egg-info/requires.txt +0 -0
  55. {lazylabel_gui-1.3.1 → lazylabel_gui-1.3.3}/src/lazylabel_gui.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lazylabel-gui
3
- Version: 1.3.1
3
+ Version: 1.3.3
4
4
  Summary: An image segmentation GUI for generating ML ready mask tensors and annotations.
5
5
  Author-email: "Deniz N. Cakan" <deniz.n.cakan@gmail.com>
6
6
  License: MIT License
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "lazylabel-gui"
7
- version = "1.3.1"
7
+ version = "1.3.3"
8
8
  authors = [
9
9
  { name="Deniz N. Cakan", email="deniz.n.cakan@gmail.com" },
10
10
  ]
@@ -24,16 +24,48 @@ class FileManager:
24
24
  crop_coords: tuple[int, int, int, int] | None = None,
25
25
  ) -> str:
26
26
  """Save segments as NPZ file."""
27
+ logger.debug(f"Saving NPZ for image: {image_path}")
28
+ logger.debug(f"Image size: {image_size}, Class order: {class_order}")
29
+
30
+ # Validate inputs
31
+ if not class_order:
32
+ raise ValueError("No classes defined for saving")
33
+
27
34
  final_mask_tensor = self.segment_manager.create_final_mask_tensor(
28
35
  image_size, class_order
29
36
  )
30
37
 
38
+ # Validate mask tensor
39
+ if final_mask_tensor.size == 0:
40
+ raise ValueError("Empty mask tensor generated")
41
+
42
+ logger.debug(f"Final mask tensor shape: {final_mask_tensor.shape}")
43
+
31
44
  # Apply crop if coordinates are provided
32
45
  if crop_coords:
33
46
  final_mask_tensor = self._apply_crop_to_mask(final_mask_tensor, crop_coords)
47
+ logger.debug(f"Applied crop: {crop_coords}")
34
48
 
35
49
  npz_path = os.path.splitext(image_path)[0] + ".npz"
36
- np.savez_compressed(npz_path, mask=final_mask_tensor.astype(np.uint8))
50
+
51
+ # Create parent directory if it doesn't exist
52
+ parent_dir = os.path.dirname(npz_path)
53
+ if parent_dir: # Only create if there's actually a parent directory
54
+ os.makedirs(parent_dir, exist_ok=True)
55
+ logger.debug(f"Ensured directory exists: {parent_dir}")
56
+
57
+ # Save the NPZ file
58
+ try:
59
+ np.savez_compressed(npz_path, mask=final_mask_tensor.astype(np.uint8))
60
+ logger.debug(f"Saved NPZ file: {npz_path}")
61
+ except Exception as e:
62
+ raise OSError(f"Failed to save NPZ file {npz_path}: {str(e)}") from e
63
+
64
+ # Verify the file was actually created
65
+ if not os.path.exists(npz_path):
66
+ raise OSError(f"NPZ file was not created: {npz_path}")
67
+
68
+ logger.info(f"Successfully saved NPZ: {os.path.basename(npz_path)}")
37
69
  return npz_path
38
70
 
39
71
  def save_yolo_txt(