lazylabel-gui 1.2.0__tar.gz → 1.3.0__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 (58) hide show
  1. {lazylabel_gui-1.2.0/src/lazylabel_gui.egg-info → lazylabel_gui-1.3.0}/PKG-INFO +194 -200
  2. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/README.md +0 -6
  3. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/pyproject.toml +1 -1
  4. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/setup.cfg +4 -4
  5. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/config/settings.py +3 -0
  6. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/main.py +1 -0
  7. lazylabel_gui-1.3.0/src/lazylabel/models/sam2_model.py +371 -0
  8. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/control_panel.py +17 -15
  9. lazylabel_gui-1.3.0/src/lazylabel/ui/editable_vertex.py +136 -0
  10. lazylabel_gui-1.3.0/src/lazylabel/ui/hoverable_pixelmap_item.py +47 -0
  11. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/hoverable_polygon_item.py +26 -0
  12. lazylabel_gui-1.3.0/src/lazylabel/ui/main_window.py +8810 -0
  13. lazylabel_gui-1.3.0/src/lazylabel/ui/modes/__init__.py +6 -0
  14. lazylabel_gui-1.3.0/src/lazylabel/ui/modes/base_mode.py +52 -0
  15. lazylabel_gui-1.3.0/src/lazylabel/ui/modes/multi_view_mode.py +1173 -0
  16. lazylabel_gui-1.3.0/src/lazylabel/ui/modes/single_view_mode.py +299 -0
  17. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/photo_viewer.py +31 -3
  18. lazylabel_gui-1.3.0/src/lazylabel/ui/test_hover.py +48 -0
  19. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/widgets/adjustments_widget.py +2 -2
  20. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/widgets/border_crop_widget.py +11 -0
  21. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/widgets/channel_threshold_widget.py +50 -6
  22. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/widgets/fft_threshold_widget.py +116 -22
  23. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/widgets/model_selection_widget.py +117 -4
  24. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0/src/lazylabel_gui.egg-info}/PKG-INFO +194 -200
  25. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel_gui.egg-info/SOURCES.txt +5 -0
  26. lazylabel_gui-1.2.0/src/lazylabel/models/sam2_model.py +0 -223
  27. lazylabel_gui-1.2.0/src/lazylabel/ui/editable_vertex.py +0 -64
  28. lazylabel_gui-1.2.0/src/lazylabel/ui/hoverable_pixelmap_item.py +0 -22
  29. lazylabel_gui-1.2.0/src/lazylabel/ui/main_window.py +0 -3489
  30. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/LICENSE +0 -0
  31. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/__init__.py +0 -0
  32. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/__main__.py +0 -0
  33. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/config/__init__.py +0 -0
  34. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/config/hotkeys.py +0 -0
  35. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/config/paths.py +0 -0
  36. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/core/__init__.py +0 -0
  37. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/core/file_manager.py +0 -0
  38. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/core/model_manager.py +0 -0
  39. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/core/segment_manager.py +0 -0
  40. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/models/__init__.py +0 -0
  41. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/models/sam_model.py +0 -0
  42. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/__init__.py +0 -0
  43. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/hotkey_dialog.py +0 -0
  44. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/numeric_table_widget_item.py +0 -0
  45. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/reorderable_class_table.py +0 -0
  46. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/right_panel.py +0 -0
  47. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/widgets/__init__.py +0 -0
  48. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/widgets/fragment_threshold_widget.py +0 -0
  49. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/widgets/settings_widget.py +0 -0
  50. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/ui/widgets/status_bar.py +0 -0
  51. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/utils/__init__.py +0 -0
  52. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/utils/custom_file_system_model.py +0 -0
  53. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/utils/logger.py +0 -0
  54. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel/utils/utils.py +0 -0
  55. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel_gui.egg-info/dependency_links.txt +0 -0
  56. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel_gui.egg-info/entry_points.txt +0 -0
  57. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel_gui.egg-info/requires.txt +0 -0
  58. {lazylabel_gui-1.2.0 → lazylabel_gui-1.3.0}/src/lazylabel_gui.egg-info/top_level.txt +0 -0
@@ -1,200 +1,194 @@
1
- Metadata-Version: 2.4
2
- Name: lazylabel-gui
3
- Version: 1.2.0
4
- Summary: An image segmentation GUI for generating ML ready mask tensors and annotations.
5
- Author-email: "Deniz N. Cakan" <deniz.n.cakan@gmail.com>
6
- License: MIT License
7
-
8
- Copyright (c) 2025 Deniz N. Cakan
9
-
10
- Permission is hereby granted, free of charge, to any person obtaining a copy
11
- of this software and associated documentation files (the "Software"), to deal
12
- in the Software without restriction, including without limitation the rights
13
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
- copies of the Software, and to permit persons to whom the Software is
15
- furnished to do so, subject to the following conditions:
16
-
17
- The above copyright notice and this permission notice shall be included in all
18
- copies or substantial portions of the Software.
19
-
20
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
- SOFTWARE.
27
-
28
- Project-URL: Homepage, https://github.com/dnzckn/lazylabel
29
- Project-URL: Bug Tracker, https://github.com/dnzckn/lazylabel/issues
30
- Classifier: Programming Language :: Python :: 3
31
- Classifier: License :: OSI Approved :: MIT License
32
- Classifier: Operating System :: OS Independent
33
- Classifier: Topic :: Scientific/Engineering :: Image Processing
34
- Classifier: Environment :: X11 Applications :: Qt
35
- Requires-Python: >=3.10
36
- Description-Content-Type: text/markdown
37
- License-File: LICENSE
38
- Requires-Dist: PyQt6>=6.9.0
39
- Requires-Dist: pyqtdarktheme==2.1.0
40
- Requires-Dist: torch>=2.7.1
41
- Requires-Dist: torchvision>=0.22.1
42
- Requires-Dist: segment-anything==1.0
43
- Requires-Dist: numpy>=2.1.2
44
- Requires-Dist: opencv-python>=4.11.0.86
45
- Requires-Dist: scipy>=1.15.3
46
- Requires-Dist: requests>=2.32.4
47
- Requires-Dist: tqdm>=4.67.1
48
- Provides-Extra: dev
49
- Requires-Dist: pytest>=7.0.0; extra == "dev"
50
- Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
51
- Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
52
- Requires-Dist: pytest-qt>=4.2.0; extra == "dev"
53
- Requires-Dist: ruff>=0.8.0; extra == "dev"
54
- Dynamic: license-file
55
-
56
- # <img src="https://raw.githubusercontent.com/dnzckn/LazyLabel/main/src/lazylabel/demo_pictures/logo2.png" alt="LazyLabel Logo" style="height:60px; vertical-align:middle;" /> <img src="https://raw.githubusercontent.com/dnzckn/LazyLabel/main/src/lazylabel/demo_pictures/logo_black.png" alt="LazyLabel Cursive" style="height:60px; vertical-align:middle;" />
57
-
58
- **AI-Assisted Image Segmentation Made Simple**
59
-
60
- LazyLabel combines Meta's Segment Anything Model (SAM) with intuitive editing tools for fast, precise image labeling. Perfect for machine learning datasets and computer vision research.
61
-
62
- ![LazyLabel Screenshot](https://raw.githubusercontent.com/dnzckn/LazyLabel/main/src/lazylabel/demo_pictures/gui.PNG)
63
-
64
- ---
65
-
66
- ## 🚀 Quick Start
67
-
68
- ### Installation
69
- ```bash
70
- pip install lazylabel-gui
71
- lazylabel-gui
72
- ```
73
-
74
- ### Optional: SAM-2 Support
75
- For advanced SAM-2 models, install manually:
76
- ```bash
77
- pip install git+https://github.com/facebookresearch/sam2.git
78
- ```
79
- *Note: SAM-2 is optional - LazyLabel works with SAM 1.0 models by default*
80
-
81
- ### Usage
82
- 1. **Open Folder** → Select your image directory
83
- 2. **Click on image** → AI generates instant masks
84
- 3. **Fine-tune** → Edit polygons, merge segments
85
- 4. **Export** → Clean `.npz` files ready for ML training
86
-
87
- ---
88
-
89
- ## ✨ Key Features
90
-
91
- - **🧠 One-click AI segmentation** with Meta's SAM and SAM2 models
92
- - **🎨 Manual polygon drawing** with full vertex control
93
- - **⚡ Smart editing tools** - merge segments, adjust class names, and class order
94
- - **📊 ML-ready exports** - One-hot encoded `.npz` format and `.json` for YOLO format
95
- - **🔧 Image enhancement** - brightness, contrast, gamma adjustment
96
- - **🔍 Image viewer** - zoom, pan, brightness, contrast, and gamma adjustment
97
- - **✂️ Edge cropping** - define custom crop areas to focus on specific regions
98
- - **🔄 Undo/Redo** - full history of all actions
99
- - **💾 Auto-saving** - Automatic saving of your labels when navigating between images
100
- - **🎛️ Advanced filtering** - FFT thresholding and color channel thresholding
101
- - **⌨️ Customizable hotkeys** for all functions
102
-
103
- ---
104
-
105
- ## ⌨️ Essential Hotkeys
106
-
107
- | Action | Key | Description |
108
- |--------|-----|-------------|
109
- | **AI Mode** | `1` | Point-click segmentation |
110
- | **Draw Mode** | `2` | Manual polygon drawing |
111
- | **Edit Mode** | `E` | Select and modify shapes |
112
- | **Save Segment** | `Space` | Confirm current mask |
113
- | **Merge** | `M` | Combine selected segments |
114
- | **Pan** | `Q` + drag | Navigate large images |
115
- | **Positive Point** | `Left Click` | Add to segment |
116
- | **Negative Point** | `Right Click` | Remove from segment |
117
-
118
- 💡 **All hotkeys customizable** - Click "Hotkeys" button to personalize
119
-
120
- ---
121
-
122
- ## 📦 Output Format
123
-
124
- Perfect for ML training - clean, structured data:
125
-
126
- ```python
127
- import numpy as np
128
-
129
- # Load your labeled data
130
- data = np.load('your_image.npz')
131
- mask = data['mask'] # Shape: (height, width, num_classes)
132
-
133
- # Each channel is a binary mask for one class
134
- class_0_mask = mask[:, :, 0] # Background
135
- class_1_mask = mask[:, :, 1] # Object type 1
136
- class_2_mask = mask[:, :, 2] # Object type 2
137
- ```
138
-
139
-
140
- **Ideal for:**
141
- - Semantic segmentation datasets
142
- - Instance segmentation training
143
- - Computer vision research
144
- - Automated annotation pipelines
145
-
146
- ---
147
-
148
- ## 🛠️ Development
149
-
150
- **Requirements:** Python 3.10+
151
- **2.5GB** disk space for SAM model (auto-downloaded)
152
-
153
- ### Installation from Source
154
- ```bash
155
- git clone https://github.com/dnzckn/LazyLabel.git
156
- cd LazyLabel
157
- pip install -e .
158
- lazylabel-gui
159
- ```
160
-
161
- ### Testing & Quality
162
- ```bash
163
- # Run full test suite
164
- python -m pytest --cov=lazylabel --cov-report=html
165
-
166
- # Code formatting & linting
167
- ruff check . && ruff format .
168
- ```
169
-
170
- ### Architecture
171
- - **Modular design** with clean component separation
172
- - **Signal-based communication** between UI elements
173
- - **Extensible model system** for new SAM variants
174
- - **Comprehensive test suite** (150+ tests, 60%+ coverage)
175
-
176
- ---
177
-
178
- ## 🤝 Contributing
179
-
180
- LazyLabel welcomes contributions! Check out:
181
- - [Architecture Guide](src/lazylabel/ARCHITECTURE.md) for technical details
182
- - [Hotkey System](src/lazylabel/HOTKEY_FEATURE.md) for customization
183
- - Issues page for feature requests and bug reports
184
-
185
- ---
186
-
187
- ## 🙏 Acknowledgments
188
-
189
- - [LabelMe](https://github.com/wkentaro/labelme)
190
- - [Segment-Anything-UI](https://github.com/branislavhesko/segment-anything-ui)
191
-
192
- ---
193
-
194
- ## Support
195
-
196
- If LazyLabel saves you time on annotation tasks, [consider supporting the project!](https://buymeacoffee.com/dnzckn)
197
-
198
- ---
199
-
200
- **Made with ❤️ for the computer vision community**
1
+ Metadata-Version: 2.4
2
+ Name: lazylabel-gui
3
+ Version: 1.3.0
4
+ Summary: An image segmentation GUI for generating ML ready mask tensors and annotations.
5
+ Author-email: "Deniz N. Cakan" <deniz.n.cakan@gmail.com>
6
+ License: MIT License
7
+
8
+ Copyright (c) 2025 Deniz N. Cakan
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Project-URL: Homepage, https://github.com/dnzckn/lazylabel
29
+ Project-URL: Bug Tracker, https://github.com/dnzckn/lazylabel/issues
30
+ Classifier: Programming Language :: Python :: 3
31
+ Classifier: License :: OSI Approved :: MIT License
32
+ Classifier: Operating System :: OS Independent
33
+ Classifier: Topic :: Scientific/Engineering :: Image Processing
34
+ Classifier: Environment :: X11 Applications :: Qt
35
+ Requires-Python: >=3.10
36
+ Description-Content-Type: text/markdown
37
+ License-File: LICENSE
38
+ Requires-Dist: PyQt6>=6.9.0
39
+ Requires-Dist: pyqtdarktheme==2.1.0
40
+ Requires-Dist: torch>=2.7.1
41
+ Requires-Dist: torchvision>=0.22.1
42
+ Requires-Dist: segment-anything==1.0
43
+ Requires-Dist: numpy>=2.1.2
44
+ Requires-Dist: opencv-python>=4.11.0.86
45
+ Requires-Dist: scipy>=1.15.3
46
+ Requires-Dist: requests>=2.32.4
47
+ Requires-Dist: tqdm>=4.67.1
48
+ Provides-Extra: dev
49
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
50
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
51
+ Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
52
+ Requires-Dist: pytest-qt>=4.2.0; extra == "dev"
53
+ Requires-Dist: ruff>=0.8.0; extra == "dev"
54
+ Dynamic: license-file
55
+
56
+ # <img src="https://raw.githubusercontent.com/dnzckn/LazyLabel/main/src/lazylabel/demo_pictures/logo2.png" alt="LazyLabel Logo" style="height:60px; vertical-align:middle;" /> <img src="https://raw.githubusercontent.com/dnzckn/LazyLabel/main/src/lazylabel/demo_pictures/logo_black.png" alt="LazyLabel Cursive" style="height:60px; vertical-align:middle;" />
57
+
58
+ **AI-Assisted Image Segmentation Made Simple**
59
+
60
+ LazyLabel combines Meta's Segment Anything Model (SAM) with intuitive editing tools for fast, precise image labeling. Perfect for machine learning datasets and computer vision research.
61
+
62
+ ![LazyLabel Screenshot](https://raw.githubusercontent.com/dnzckn/LazyLabel/main/src/lazylabel/demo_pictures/gui.PNG)
63
+
64
+ ---
65
+
66
+ ## 🚀 Quick Start
67
+
68
+ ### Installation
69
+ ```bash
70
+ pip install lazylabel-gui
71
+ lazylabel-gui
72
+ ```
73
+
74
+ ### Optional: SAM-2 Support
75
+ For advanced SAM-2 models, install manually:
76
+ ```bash
77
+ pip install git+https://github.com/facebookresearch/sam2.git
78
+ ```
79
+ *Note: SAM-2 is optional - LazyLabel works with SAM 1.0 models by default*
80
+
81
+ ### Usage
82
+ 1. **Open Folder** → Select your image directory
83
+ 2. **Click on image** → AI generates instant masks
84
+ 3. **Fine-tune** → Edit polygons, merge segments
85
+ 4. **Export** → Clean `.npz` files ready for ML training
86
+
87
+ ---
88
+
89
+ ## ✨ Key Features
90
+
91
+ - **🧠 One-click AI segmentation** with Meta's SAM and SAM2 models
92
+ - **🎨 Manual polygon drawing** with full vertex control
93
+ - **⚡ Smart editing tools** - merge segments, adjust class names, and class order
94
+ - **📊 ML-ready exports** - One-hot encoded `.npz` format and `.json` for YOLO format
95
+ - **🔧 Image enhancement** - brightness, contrast, gamma adjustment
96
+ - **🔍 Image viewer** - zoom, pan, brightness, contrast, and gamma adjustment
97
+ - **✂️ Edge cropping** - define custom crop areas to focus on specific regions
98
+ - **🔄 Undo/Redo** - full history of all actions
99
+ - **💾 Auto-saving** - Automatic saving of your labels when navigating between images
100
+ - **🎛️ Advanced filtering** - FFT thresholding and color channel thresholding
101
+ - **⌨️ Customizable hotkeys** for all functions
102
+
103
+ ---
104
+
105
+ ## ⌨️ Essential Hotkeys
106
+
107
+ | Action | Key | Description |
108
+ |--------|-----|-------------|
109
+ | **AI Mode** | `1` | Point-click segmentation |
110
+ | **Draw Mode** | `2` | Manual polygon drawing |
111
+ | **Edit Mode** | `E` | Select and modify shapes |
112
+ | **Save Segment** | `Space` | Confirm current mask |
113
+ | **Merge** | `M` | Combine selected segments |
114
+ | **Pan** | `Q` + drag | Navigate large images |
115
+ | **Positive Point** | `Left Click` | Add to segment |
116
+ | **Negative Point** | `Right Click` | Remove from segment |
117
+
118
+ 💡 **All hotkeys customizable** - Click "Hotkeys" button to personalize
119
+
120
+ ---
121
+
122
+ ## 📦 Output Format
123
+
124
+ Perfect for ML training - clean, structured data:
125
+
126
+ ```python
127
+ import numpy as np
128
+
129
+ # Load your labeled data
130
+ data = np.load('your_image.npz')
131
+ mask = data['mask'] # Shape: (height, width, num_classes)
132
+
133
+ # Each channel is a binary mask for one class
134
+ class_0_mask = mask[:, :, 0] # Background
135
+ class_1_mask = mask[:, :, 1] # Object type 1
136
+ class_2_mask = mask[:, :, 2] # Object type 2
137
+ ```
138
+
139
+
140
+ **Ideal for:**
141
+ - Semantic segmentation datasets
142
+ - Instance segmentation training
143
+ - Computer vision research
144
+ - Automated annotation pipelines
145
+
146
+ ---
147
+
148
+ ## 🛠️ Development
149
+
150
+ **Requirements:** Python 3.10+
151
+ **2.5GB** disk space for SAM model (auto-downloaded)
152
+
153
+ ### Installation from Source
154
+ ```bash
155
+ git clone https://github.com/dnzckn/LazyLabel.git
156
+ cd LazyLabel
157
+ pip install -e .
158
+ lazylabel-gui
159
+ ```
160
+
161
+ ### Testing & Quality
162
+ ```bash
163
+ # Run full test suite
164
+ python -m pytest --cov=lazylabel --cov-report=html
165
+
166
+ # Code formatting & linting
167
+ ruff check . && ruff format .
168
+ ```
169
+
170
+ ### Architecture
171
+ - **Modular design** with clean component separation
172
+ - **Signal-based communication** between UI elements
173
+ - **Extensible model system** for new SAM variants
174
+ - **Comprehensive test suite** (150+ tests, 60%+ coverage)
175
+
176
+ ---
177
+
178
+ ## 🤝 Contributing
179
+
180
+ LazyLabel welcomes contributions! Check out:
181
+ - [Architecture Guide](src/lazylabel/ARCHITECTURE.md) for technical details
182
+ - [Hotkey System](src/lazylabel/HOTKEY_FEATURE.md) for customization
183
+ - Issues page for feature requests and bug reports
184
+
185
+ ---
186
+
187
+ ## 🙏 Acknowledgments
188
+
189
+ - [LabelMe](https://github.com/wkentaro/labelme)
190
+ - [Segment-Anything-UI](https://github.com/branislavhesko/segment-anything-ui)
191
+
192
+ ---
193
+
194
+ **Made with ❤️ for the computer vision community**
@@ -136,10 +136,4 @@ LazyLabel welcomes contributions! Check out:
136
136
 
137
137
  ---
138
138
 
139
- ## ☕ Support
140
-
141
- If LazyLabel saves you time on annotation tasks, [consider supporting the project!](https://buymeacoffee.com/dnzckn)
142
-
143
- ---
144
-
145
139
  **Made with ❤️ for the computer vision community**
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "lazylabel-gui"
7
- version = "1.2.0"
7
+ version = "1.3.0"
8
8
  authors = [
9
9
  { name="Deniz N. Cakan", email="deniz.n.cakan@gmail.com" },
10
10
  ]
@@ -1,4 +1,4 @@
1
- [egg_info]
2
- tag_build =
3
- tag_date = 0
4
-
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -42,6 +42,9 @@ class Settings:
42
42
  # UI State
43
43
  annotation_size_multiplier: float = 1.0
44
44
 
45
+ # Multi-view Settings
46
+ multi_view_grid_mode: str = "2_view" # "2_view" or "4_view"
47
+
45
48
  def save_to_file(self, filepath: str) -> None:
46
49
  """Save settings to JSON file."""
47
50
  os.makedirs(os.path.dirname(filepath), exist_ok=True)
@@ -23,6 +23,7 @@ def main():
23
23
  logger.info("Step 3/8: Applying dark theme...")
24
24
  qdarktheme.setup_theme()
25
25
 
26
+ logger.info("Step 4/8: Setting up main window...")
26
27
  main_window = MainWindow()
27
28
 
28
29
  logger.info("Step 7/8: Showing main window...")