lannotex 0.1.0__tar.gz → 0.2.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.
- {lannotex-0.1.0 → lannotex-0.2.0}/CHANGELOG.md +58 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/PKG-INFO +6 -5
- {lannotex-0.1.0 → lannotex-0.2.0}/README.md +4 -3
- {lannotex-0.1.0 → lannotex-0.2.0}/docs/guide/annotating.md +34 -7
- {lannotex-0.1.0 → lannotex-0.2.0}/docs/guide/import-export.md +28 -8
- {lannotex-0.1.0 → lannotex-0.2.0}/docs/migrate-from-labelme.md +10 -6
- {lannotex-0.1.0 → lannotex-0.2.0}/pyproject.toml +3 -1
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex/__init__.py +1 -1
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex/app.py +181 -37
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex/canvas.py +165 -15
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex/exporters.py +77 -22
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex/home.py +15 -7
- lannotex-0.2.0/src/lannotex/icons.py +55 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex/models.py +20 -2
- lannotex-0.2.0/src/lannotex/palette.py +72 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex/theme.py +9 -0
- lannotex-0.2.0/src/lannotex/thumbnails.py +101 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex/workers.py +84 -22
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex.egg-info/PKG-INFO +6 -5
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex.egg-info/SOURCES.txt +3 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex.egg-info/requires.txt +1 -1
- lannotex-0.2.0/tests/test_exporters.py +107 -0
- lannotex-0.2.0/tests/test_ui.py +283 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/tests/test_workflows.py +17 -0
- lannotex-0.1.0/tests/test_exporters.py +0 -63
- lannotex-0.1.0/tests/test_ui.py +0 -148
- {lannotex-0.1.0 → lannotex-0.2.0}/LICENSE +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/LICENSES/GPL-3.0-only.txt +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/LICENSES/LGPL-3.0-only.txt +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/LICENSES/Qt-GPL-exception-1.0.txt +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/LICENSES/THIRD_PARTY_NOTICES.md +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/Lannotex.spec +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/MANIFEST.in +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/docs/MICROSOFT_STORE.md +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/docs/PERFORMANCE.md +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/docs/ROADMAP.md +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/docs/TEAM.md +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/docs/VERIFICATION.md +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/docs/cli.md +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/docs/getting-started/installation.md +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/docs/getting-started/quickstart.md +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/docs/guide/projects.md +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/docs/index.md +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/requirements-windows-build.txt +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/run_lannotex.py +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/scripts/benchmark.py +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/scripts/build_linux.sh +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/scripts/build_macos.sh +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/scripts/build_windows.ps1 +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/scripts/collect_notices.py +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/scripts/verify_executable.py +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/setup.cfg +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex/__main__.py +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex/cli.py +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex/domain.py +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex/py.typed +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex/storage.py +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex/team.py +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex.egg-info/dependency_links.txt +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex.egg-info/entry_points.txt +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/src/lannotex.egg-info/top_level.txt +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/tests/test_cli.py +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/tests/test_domain.py +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/tests/test_storage.py +0 -0
- {lannotex-0.1.0 → lannotex-0.2.0}/tests/test_team.py +0 -0
|
@@ -6,6 +6,64 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.2.0] — 2026-10-14
|
|
10
|
+
|
|
11
|
+
Viewing, speed and layout: sharp zoom on large images, instant navigation, and a
|
|
12
|
+
workspace you can arrange yourself.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- **Full-resolution viewing.** Zooming in past the preview loads the original pixels in the
|
|
17
|
+
background, so large images stay sharp at any zoom. Only the visible region is drawn.
|
|
18
|
+
Detail decoding is capped at 64 MP to protect memory.
|
|
19
|
+
- **Instant next/previous.** Neighbouring images are decoded ahead of time.
|
|
20
|
+
- **Minimap** (`M`) for orientation and click-to-jump, and a **pixel grid** (`G`) from
|
|
21
|
+
1200% zoom upwards.
|
|
22
|
+
- **Zoom controls:** actual pixels (`Ctrl+1`), zoom in/out (`Ctrl+=` / `Ctrl+-`) up to
|
|
23
|
+
6400%. The zoom readout now shows true pixel scale, so 100% means actual pixels.
|
|
24
|
+
- **Image adjustments:** brightness, contrast and gamma in a new **Image view** panel. They
|
|
25
|
+
change the display only, never your files, and are applied just to the visible region, so
|
|
26
|
+
they stay fast on large images.
|
|
27
|
+
- **Dockable panels:** Dataset, Inspector and Image view can be moved, tabbed, floated onto
|
|
28
|
+
another monitor, or closed. Your layout is remembered between sessions. Use
|
|
29
|
+
**View → Panels** to bring a panel back or apply a preset (default, or all panels on the
|
|
30
|
+
right). Focus mode hides every panel and restores your exact layout afterwards.
|
|
31
|
+
- **Thumbnails in the image list**, generated in the background with the rows you can see
|
|
32
|
+
first. They're cached on disk in your user cache folder, not the project, so reopening a
|
|
33
|
+
project is instant. The cache is capped at 512 MB. Toggle them under **View → Show
|
|
34
|
+
thumbnails in image list**.
|
|
35
|
+
- **Icons:** a consistent line-icon set for the toolbar, navigation and Home screen,
|
|
36
|
+
redrawn for light and dark themes, plus the Lannotex logo as the window icon. Icon-only
|
|
37
|
+
buttons have tooltips and screen-reader names.
|
|
38
|
+
- **Command palette** (`Ctrl+K`): type part of any menu command, for example "zoom",
|
|
39
|
+
"export" or "layout", and press Enter to run it.
|
|
40
|
+
- **Number keys 1–9** choose the drawing label, which relabels the selected shape, or
|
|
41
|
+
toggle classes in classification projects.
|
|
42
|
+
- **Project → Import LabelMe folder…** imports a whole folder, including subfolders.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- **LabelMe import keeps going.**
|
|
47
|
+
- Circles and rotated rectangles are converted to polygons.
|
|
48
|
+
- Points, lines and masks, which Lannotex can't draw yet, are skipped and counted in the
|
|
49
|
+
import summary instead of rejecting the whole file.
|
|
50
|
+
- Invalid shapes are dropped one at a time.
|
|
51
|
+
- A malformed JSON file no longer stops the rest of the folder.
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- PySide6 6.12.0 is excluded. On Linux with Python 3.11 it over-releases references on every
|
|
56
|
+
background job, which made Lannotex abort on exit. Versions 6.8.3–6.11 are unaffected.
|
|
57
|
+
|
|
58
|
+
## [0.1.1] — 2026-10-14
|
|
59
|
+
|
|
60
|
+
### Changed
|
|
61
|
+
|
|
62
|
+
- **YOLO export is ready to train with Ultralytics:** `images/` (hard-linked when
|
|
63
|
+
possible, otherwise copied), matching `labels/`, and a `data.yaml` with class names.
|
|
64
|
+
Images that haven't been annotated yet are left out, so they don't become false
|
|
65
|
+
negatives.
|
|
66
|
+
|
|
9
67
|
## [0.1.0] — 2026-10-14
|
|
10
68
|
|
|
11
69
|
First public release on PyPI: `pip install lannotex` or `uv tool install lannotex`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lannotex
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Fast, offline-first image annotation for classifications, boxes, and polygons.
|
|
5
5
|
Author: Lourdhu Raju
|
|
6
6
|
Maintainer: Lourdhu Raju
|
|
@@ -30,7 +30,7 @@ Requires-Python: >=3.11
|
|
|
30
30
|
Description-Content-Type: text/markdown
|
|
31
31
|
License-File: LICENSE
|
|
32
32
|
License-File: LICENSES/THIRD_PARTY_NOTICES.md
|
|
33
|
-
Requires-Dist: PySide6-Essentials
|
|
33
|
+
Requires-Dist: PySide6-Essentials!=6.12.0,<7,>=6.8.3
|
|
34
34
|
Requires-Dist: Pillow>=11.1
|
|
35
35
|
Provides-Extra: dev
|
|
36
36
|
Requires-Dist: pytest>=8.3; extra == "dev"
|
|
@@ -131,9 +131,10 @@ Every shortcut can be remapped. See the [annotating guide](https://lourdhu02.git
|
|
|
131
131
|
| | |
|
|
132
132
|
| --- | --- |
|
|
133
133
|
| **Annotate** | Bounding boxes · polygons with vertex drag, insert, and delete · multi-label image classes · "no target" negatives · 100-step undo/redo · zoom under the pointer, pan, arrow-key nudging · focus mode · light and dark themes |
|
|
134
|
+
| **View** | Sharp full-resolution zoom up to 6400% · next/previous images decoded ahead · minimap · pixel grid · brightness, contrast and gamma · thumbnails · dockable panels you can float onto a second monitor, with saved layouts · `Ctrl+K` command palette |
|
|
134
135
|
| **Stay safe** | SQLite projects with versioned migrations · recovery drafts and 700 ms autosave · transactional saves · geometry validation · backup and restore · relinking for moved images · EXIF orientation handled |
|
|
135
136
|
| **Scale** | Virtualized image list (at most 1,024 records in memory) · background import and decoding · 96 MB preview cache · coordinates normalized to the original resolution |
|
|
136
|
-
| **Export** | Labelme JSON · YOLO · COCO JSON · classification CSV · lossless native JSONL · each export reports anything it skipped |
|
|
137
|
+
| **Export** | Labelme JSON · ready-to-train YOLO (`images/`, `labels/`, `data.yaml`) · COCO JSON · classification CSV · lossless native JSONL · each export reports anything it skipped |
|
|
137
138
|
| **Automate** | `lannotex export` and `lannotex analyze` run headless in CI, with no display needed |
|
|
138
139
|
| **Collaborate** | Optional LAN host with per-reviewer tokens, background sync, revision conflicts you resolve explicitly, revocation, and an audit history |
|
|
139
140
|
|
|
@@ -181,8 +182,8 @@ hashes. There is no telemetry, no external AI service, and no automatic upload.
|
|
|
181
182
|
|
|
182
183
|
## Roadmap
|
|
183
184
|
|
|
184
|
-
Next up:
|
|
185
|
-
|
|
185
|
+
Next up: point, line, rotated-box, keypoint and brush-mask tools, per-object attributes,
|
|
186
|
+
and VOC, YOLO-seg and YOLO-OBB export. See the
|
|
186
187
|
[roadmap](https://lourdhu02.github.io/Lannotex/ROADMAP/) and the
|
|
187
188
|
[measured performance](https://lourdhu02.github.io/Lannotex/PERFORMANCE/).
|
|
188
189
|
|
|
@@ -89,9 +89,10 @@ Every shortcut can be remapped. See the [annotating guide](https://lourdhu02.git
|
|
|
89
89
|
| | |
|
|
90
90
|
| --- | --- |
|
|
91
91
|
| **Annotate** | Bounding boxes · polygons with vertex drag, insert, and delete · multi-label image classes · "no target" negatives · 100-step undo/redo · zoom under the pointer, pan, arrow-key nudging · focus mode · light and dark themes |
|
|
92
|
+
| **View** | Sharp full-resolution zoom up to 6400% · next/previous images decoded ahead · minimap · pixel grid · brightness, contrast and gamma · thumbnails · dockable panels you can float onto a second monitor, with saved layouts · `Ctrl+K` command palette |
|
|
92
93
|
| **Stay safe** | SQLite projects with versioned migrations · recovery drafts and 700 ms autosave · transactional saves · geometry validation · backup and restore · relinking for moved images · EXIF orientation handled |
|
|
93
94
|
| **Scale** | Virtualized image list (at most 1,024 records in memory) · background import and decoding · 96 MB preview cache · coordinates normalized to the original resolution |
|
|
94
|
-
| **Export** | Labelme JSON · YOLO · COCO JSON · classification CSV · lossless native JSONL · each export reports anything it skipped |
|
|
95
|
+
| **Export** | Labelme JSON · ready-to-train YOLO (`images/`, `labels/`, `data.yaml`) · COCO JSON · classification CSV · lossless native JSONL · each export reports anything it skipped |
|
|
95
96
|
| **Automate** | `lannotex export` and `lannotex analyze` run headless in CI, with no display needed |
|
|
96
97
|
| **Collaborate** | Optional LAN host with per-reviewer tokens, background sync, revision conflicts you resolve explicitly, revocation, and an audit history |
|
|
97
98
|
|
|
@@ -139,8 +140,8 @@ hashes. There is no telemetry, no external AI service, and no automatic upload.
|
|
|
139
140
|
|
|
140
141
|
## Roadmap
|
|
141
142
|
|
|
142
|
-
Next up:
|
|
143
|
-
|
|
143
|
+
Next up: point, line, rotated-box, keypoint and brush-mask tools, per-object attributes,
|
|
144
|
+
and VOC, YOLO-seg and YOLO-OBB export. See the
|
|
144
145
|
[roadmap](https://lourdhu02.github.io/Lannotex/ROADMAP/) and the
|
|
145
146
|
[measured performance](https://lourdhu02.github.io/Lannotex/PERFORMANCE/).
|
|
146
147
|
|
|
@@ -8,7 +8,10 @@
|
|
|
8
8
|
| Box | ++b++ | Drag from one corner to the opposite corner. |
|
|
9
9
|
| Polygon | ++p++ | Click to add vertices; ++enter++ finishes, ++escape++ cancels. |
|
|
10
10
|
|
|
11
|
-
The label selected in the **Labels & annotations** panel is applied to new shapes.
|
|
11
|
+
The label selected in the **Labels & annotations** panel is applied to new shapes. Press
|
|
12
|
+
++1++–++9++ to choose the first nine labels, in alphabetical order. If a shape is selected,
|
|
13
|
+
it is relabelled. In classification projects, the number keys toggle classes on the
|
|
14
|
+
current image instead.
|
|
12
15
|
|
|
13
16
|
### Editing polygons
|
|
14
17
|
|
|
@@ -22,16 +25,38 @@ The label selected in the **Labels & annotations** panel is applied to new shape
|
|
|
22
25
|
|
|
23
26
|
| Action | Control |
|
|
24
27
|
| --- | --- |
|
|
25
|
-
| Zoom | Mouse wheel (zooms under the pointer) |
|
|
26
|
-
|
|
|
28
|
+
| Zoom | Mouse wheel (zooms under the pointer), ++ctrl+equal++ / ++ctrl+minus++ |
|
|
29
|
+
| Actual pixels (100%) | ++ctrl+1++ |
|
|
30
|
+
| Pan | Hold ++space++ and drag, or click and drag in the minimap |
|
|
27
31
|
| Fit to window | ++f++ |
|
|
32
|
+
| Minimap on/off | ++m++ |
|
|
33
|
+
| Pixel grid on/off (from 1200%) | ++g++ |
|
|
28
34
|
| Nudge selection | Arrow keys (hold ++shift++ for a 10× step) |
|
|
29
35
|
| Focus mode (hide panels) | ++ctrl+shift+f++ |
|
|
30
36
|
|
|
37
|
+
## Image adjustments
|
|
38
|
+
|
|
39
|
+
The **Image view** panel has brightness, contrast and gamma sliders for dark, washed-out or
|
|
40
|
+
low-contrast images. They change only what you see, never your files or the exported data.
|
|
41
|
+
**Reset adjustments**, or **View → Reset image adjustments**, returns to the original.
|
|
42
|
+
|
|
43
|
+
## Arranging the workspace
|
|
44
|
+
|
|
45
|
+
The **Dataset**, **Inspector** and **Image view** panels are dockable:
|
|
46
|
+
|
|
47
|
+
- Drag a panel's title bar to move it to another side, or onto another panel to tab them.
|
|
48
|
+
- Use the float button to detach a panel, for example onto a second monitor.
|
|
49
|
+
- Close panels you don't need. **View → Panels** lists them all so you can bring them back.
|
|
50
|
+
- **View → Panels → Default layout** and **All panels on the right** are one-click presets.
|
|
51
|
+
- **Focus mode** (++ctrl+shift+f++) hides every panel. Press it again to restore your layout.
|
|
52
|
+
|
|
53
|
+
Your layout is saved when you close Lannotex.
|
|
54
|
+
|
|
31
55
|
## Keyboard reference
|
|
32
56
|
|
|
33
57
|
| Action | Default |
|
|
34
58
|
| --- | --- |
|
|
59
|
+
| Command palette: search and run any command | ++ctrl+k++ |
|
|
35
60
|
| Save | ++ctrl+s++ |
|
|
36
61
|
| Save & next | ++ctrl+enter++ |
|
|
37
62
|
| Previous / next image | ++alt+left++ / ++alt+right++ |
|
|
@@ -57,9 +82,11 @@ dataset:
|
|
|
57
82
|
|
|
58
83
|
## Coordinates
|
|
59
84
|
|
|
60
|
-
Geometry is stored **normalized** (0–1) relative to the original image size.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
85
|
+
Geometry is stored **normalized** (0–1) relative to the original image size. Images open
|
|
86
|
+
as a fast preview (up to 2,560 px). When you zoom in past that, Lannotex loads the
|
|
87
|
+
original pixels in the background, so the image stays sharp up to 6400%. The zoom
|
|
88
|
+
readout shows true scale: 100% means one image pixel per screen pixel. Full-resolution
|
|
89
|
+
detail is available for images up to 64 megapixels; larger images stay on the preview.
|
|
90
|
+
EXIF orientation is respected.
|
|
64
91
|
|
|
65
92
|
Undo history keeps the last 100 changes for the image you're working on.
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
| Format | Contains | Use it for |
|
|
6
6
|
| --- | --- | --- |
|
|
7
7
|
| **Labelme JSON** | One JSON per image: boxes as `rectangle`, polygons, classes as `flags` | LabelMe and tools that read its format |
|
|
8
|
-
| **YOLO boxes** |
|
|
8
|
+
| **YOLO boxes** | Ready-to-train Ultralytics dataset: `images/`, `labels/`, `data.yaml` | YOLO detection training |
|
|
9
9
|
| **COCO JSON** | One `coco.json` with boxes, polygon segmentations, and areas | Detection and instance segmentation |
|
|
10
10
|
| **Classification CSV** | One row per image, one 0/1 column per class | Image classification |
|
|
11
11
|
| **Native JSONL** | Every annotation with its ID and status | Lossless backup and round-trips |
|
|
@@ -24,10 +24,11 @@ Lannotex-export-1a2b3c4d/
|
|
|
24
24
|
├── classification.csv
|
|
25
25
|
├── images.jsonl
|
|
26
26
|
├── annotations.jsonl
|
|
27
|
-
└── 00000001_street.json # per-image files (Labelme JSON
|
|
27
|
+
└── 00000001_street.json # per-image files (Labelme JSON)
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
Images are **referenced, not copied**: exported records point to the original files.
|
|
30
|
+
Images are **referenced, not copied**: exported records point to the original files. YOLO
|
|
31
|
+
is the exception, described below.
|
|
31
32
|
|
|
32
33
|
### What gets skipped
|
|
33
34
|
|
|
@@ -39,11 +40,30 @@ An image is left out of the export, and listed in `manifest.json`, if:
|
|
|
39
40
|
|
|
40
41
|
Run **View → Analysis** or `lannotex analyze` beforehand to find these images.
|
|
41
42
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
### YOLO: ready to train
|
|
44
|
+
|
|
45
|
+
The YOLO export is a complete [Ultralytics](https://docs.ultralytics.com/datasets/detect/)
|
|
46
|
+
dataset:
|
|
47
|
+
|
|
48
|
+
```text
|
|
49
|
+
Lannotex-export-1a2b3c4d/
|
|
50
|
+
├── data.yaml # path, train/val, class names
|
|
51
|
+
├── images/00000001_street.jpg
|
|
52
|
+
└── labels/00000001_street.txt # class cx cy w h, normalized
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
yolo detect train data=Lannotex-export-1a2b3c4d/data.yaml model=yolo11n.pt
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
- Images are **hard-linked** into `images/` when the export is on the same drive, so they
|
|
60
|
+
take no extra space. Otherwise they're copied. Your originals are never modified.
|
|
61
|
+
- Images marked **No target objects** get an empty label file, so YOLO learns them as
|
|
62
|
+
background.
|
|
63
|
+
- Images you haven't annotated yet are **left out**. If they were included, YOLO would
|
|
64
|
+
treat them as "nothing here".
|
|
65
|
+
- `train` and `val` point at the same images. Split them yourself for a real evaluation.
|
|
66
|
+
- If you move the export folder, update `path:` in `data.yaml`.
|
|
47
67
|
|
|
48
68
|
## Importing annotations
|
|
49
69
|
|
|
@@ -6,8 +6,9 @@ and still hand files back to LabelMe users.
|
|
|
6
6
|
## Import a LabelMe folder
|
|
7
7
|
|
|
8
8
|
1. Create a project (**Combined pipeline** enables every tool).
|
|
9
|
-
2. Choose **Project → Import
|
|
10
|
-
LabelMe `.json` files.
|
|
9
|
+
2. Choose **Project → Import LabelMe folder…** and select the folder that contains your
|
|
10
|
+
LabelMe `.json` files. Subfolders are included. Use **Import annotations…** for a single
|
|
11
|
+
file.
|
|
11
12
|
3. Lannotex reads each file, finds the image through its `imagePath`, checks that the
|
|
12
13
|
dimensions match, and creates any missing labels.
|
|
13
14
|
|
|
@@ -19,16 +20,19 @@ Your LabelMe JSON files and images are left untouched.
|
|
|
19
20
|
| --- | --- |
|
|
20
21
|
| `rectangle` shapes | Bounding boxes |
|
|
21
22
|
| `polygon` shapes | Polygons |
|
|
23
|
+
| `circle` shapes | Polygons (32 points around the circle) |
|
|
24
|
+
| `rotation` (rotated rectangle) shapes | Polygons with the four corners |
|
|
22
25
|
| `flags` set to `true` | Image classes |
|
|
23
26
|
| Image files via `imagePath` | Referenced in place, not copied |
|
|
24
27
|
|
|
25
28
|
!!! warning "Current limitations"
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
shapes is planned.
|
|
29
|
+
- `point`, `line`, `linestrip` and `mask` shapes are **skipped**. The rest of each file
|
|
30
|
+
still imports, and the import summary lists how many of each were skipped. Support
|
|
31
|
+
for these shapes is planned.
|
|
32
|
+
- Shapes with invalid geometry, such as a polygon with fewer than 3 points, are skipped
|
|
33
|
+
and listed the same way.
|
|
29
34
|
- `imageData` embedded in the JSON isn't used. The image file must exist on disk.
|
|
30
35
|
- `group_id`, `description`, and per-shape `flags` aren't imported.
|
|
31
|
-
- Only JSON files directly inside the chosen folder are read, not subfolders.
|
|
32
36
|
|
|
33
37
|
## Export back to LabelMe
|
|
34
38
|
|
|
@@ -32,7 +32,9 @@ classifiers = [
|
|
|
32
32
|
]
|
|
33
33
|
# Ranges, not pins: exact pins break installs on newer Pythons. Release binaries pin
|
|
34
34
|
# their full set in requirements-windows-build.txt.
|
|
35
|
-
|
|
35
|
+
# PySide6 6.12.0 over-releases None/True on every QThreadPool job and worker-thread signal,
|
|
36
|
+
# which aborts Python 3.11 on Linux at exit ("bool_dealloc"); 6.8.3-6.11.0 are unaffected.
|
|
37
|
+
dependencies = ["PySide6-Essentials>=6.8.3,<7,!=6.12.0", "Pillow>=11.1"]
|
|
36
38
|
|
|
37
39
|
[project.optional-dependencies]
|
|
38
40
|
dev = [
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""Lannotex: offline-first image annotation."""
|
|
2
|
-
__version__ = "0.
|
|
2
|
+
__version__ = "0.2.0"
|