labelimgplusplus 2.3.2__tar.gz → 2.4.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 (67) hide show
  1. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/HISTORY.rst +91 -0
  2. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/PKG-INFO +4 -5
  3. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/README.rst +1 -1
  4. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/labelImgPlusPlus.py +216 -639
  5. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/labelimgplusplus.egg-info/PKG-INFO +4 -5
  6. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/labelimgplusplus.egg-info/SOURCES.txt +8 -0
  7. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/core/commands.py +7 -3
  8. labelimgplusplus-2.4.0/libs/core/settings.py +119 -0
  9. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/core/shape.py +2 -2
  10. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/core/shortcut_config.py +21 -6
  11. labelimgplusplus-2.4.0/libs/data/predefined_classes.txt +15 -0
  12. labelimgplusplus-2.4.0/libs/formats/annotation_loader.py +87 -0
  13. labelimgplusplus-2.4.0/libs/formats/annotation_probe.py +197 -0
  14. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/formats/coco_io.py +22 -12
  15. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/formats/create_ml_io.py +18 -5
  16. labelimgplusplus-2.4.0/libs/formats/format_metadata.py +80 -0
  17. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/formats/labelFile.py +9 -8
  18. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/formats/pascal_voc_io.py +16 -7
  19. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/formats/yolo_seg_io.py +20 -8
  20. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/resources.py +43 -43
  21. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/tools/dataset_splitter.py +83 -27
  22. labelimgplusplus-2.4.0/libs/utils/dpi.py +50 -0
  23. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/utils/stringBundle.py +3 -2
  24. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/utils/styles.py +88 -84
  25. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/utils/utils.py +3 -3
  26. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/batchVerifyDialog.py +3 -1
  27. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/canvas.py +110 -20
  28. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/galleryWidget.py +8 -5
  29. labelimgplusplus-2.4.0/libs/widgets/gallery_status_controller.py +91 -0
  30. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/keypointPanel.py +22 -11
  31. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/shortcutsDialog.py +25 -11
  32. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/splitDialog.py +14 -2
  33. labelimgplusplus-2.4.0/libs/widgets/stats_controller.py +89 -0
  34. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/toolBar.py +6 -29
  35. labelimgplusplus-2.4.0/libs/widgets/view_scaling.py +39 -0
  36. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/pyproject.toml +3 -4
  37. labelimgplusplus-2.3.2/libs/core/settings.py +0 -50
  38. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/CONTRIBUTING.rst +0 -0
  39. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/LICENSE +0 -0
  40. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/MANIFEST.in +0 -0
  41. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/data/predefined_classes.txt +0 -0
  42. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/labelimgplusplus.egg-info/dependency_links.txt +0 -0
  43. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/labelimgplusplus.egg-info/entry_points.txt +0 -0
  44. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/labelimgplusplus.egg-info/requires.txt +0 -0
  45. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/labelimgplusplus.egg-info/top_level.txt +0 -0
  46. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/__init__.py +0 -0
  47. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/core/__init__.py +0 -0
  48. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/core/keypoint_config.py +0 -0
  49. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/formats/__init__.py +0 -0
  50. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/formats/yolo_io.py +0 -0
  51. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/tools/__init__.py +0 -0
  52. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/tools/label_checker.py +0 -0
  53. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/utils/__init__.py +0 -0
  54. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/utils/constants.py +0 -0
  55. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/utils/hashableQListWidgetItem.py +0 -0
  56. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/utils/ustr.py +0 -0
  57. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/__init__.py +0 -0
  58. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/colorDialog.py +0 -0
  59. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/combobox.py +0 -0
  60. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/default_label_combobox.py +0 -0
  61. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/labelCheckerDialog.py +0 -0
  62. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/labelDialog.py +0 -0
  63. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/lightWidget.py +0 -0
  64. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/statsWidget.py +0 -0
  65. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/libs/widgets/zoomWidget.py +0 -0
  66. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/resources.qrc +0 -0
  67. {labelimgplusplus-2.3.2 → labelimgplusplus-2.4.0}/setup.cfg +0 -0
@@ -1,6 +1,97 @@
1
1
  History
2
2
  =======
3
3
 
4
+ 2.4.0 (2026-06-09)
5
+ ------------------
6
+
7
+ HiDPI scaling release. The interface now scales consistently on high-density
8
+ and fractionally-scaled displays: chrome, dialogs, stylesheets, and the canvas
9
+ grab tolerance all grow by the same factor that already drove icon sizing.
10
+ Backward compatible — every change is a no-op at the standard 96 DPI baseline,
11
+ so non-HiDPI displays are unchanged.
12
+
13
+ New features
14
+ ~~~~~~~~~~~~
15
+
16
+ * Scale the full UI for HiDPI displays from a single DPI factor (#66) —
17
+ dialog and dock minimum sizes, status-bar labels, keypoint-panel
18
+ indicators, gallery preset controls, the collapsible toolbar, every
19
+ stylesheet padding/margin/border/font-size value, and the canvas
20
+ hit-test radius
21
+
22
+ Bug fixes
23
+ ~~~~~~~~~
24
+
25
+ * Fix a ``ModuleNotFoundError`` crash when selecting the "Auto" toolbar icon
26
+ size — the handler imported from a stale ``libs.toolBar`` path (#93)
27
+
28
+ Internal
29
+ ~~~~~~~~
30
+
31
+ * Add ``libs/utils/dpi.py`` as the single source of truth for screen scaling
32
+ (``get_dpi_scale_factor`` + ``scale_px``); chrome and stylesheets now scale
33
+ through it instead of recomputing DPI per site
34
+
35
+ 2.3.3 (2026-06-09)
36
+ ------------------
37
+
38
+ Security, correctness, and reliability release. Hardens settings storage and
39
+ annotation parsing against untrusted input, closes several undo/redo gaps, and
40
+ decomposes the monolithic main window into focused, unit-tested modules. No new
41
+ features and no breaking changes.
42
+
43
+ Security
44
+ ~~~~~~~~
45
+
46
+ * Store user settings as JSON instead of a Python pickle, removing an
47
+ arbitrary-code-execution vector (the old ``~/.labelImgSettings.pkl`` is no
48
+ longer read; settings start fresh on upgrade)
49
+ * Harden the PASCAL VOC XML reader against entity-expansion (billion-laughs)
50
+ and external-entity / network (XXE) attacks
51
+
52
+ Bug fixes
53
+ ~~~~~~~~~
54
+
55
+ * Make whole-shape moves, rectangle resizes, arrow-key nudges, the
56
+ context-menu "Move here", and in-mode keypoint Ctrl-Z all undoable — these
57
+ mutations previously bypassed the undo stack (#68)
58
+ * Defer the annotation-format switch until the reader succeeds for the YOLO and
59
+ PASCAL VOC loaders, so a malformed file no longer flips the saved format;
60
+ PASCAL VOC now reports parse errors gracefully instead of crashing (#69)
61
+ * Stop PASCAL VOC bounding-box coordinate data loss on save (round rather than
62
+ truncate), and round polygon coordinates likewise
63
+ * Harden the COCO, YOLO-seg, and CreateML readers against malformed input
64
+ * Report a clear error instead of crashing when an annotation file is opened
65
+ as an image
66
+ * Restore label-list ordering on delete and refresh the label combo on edit so
67
+ undo/redo stays consistent
68
+ * Surface batch-verify failures instead of silently swallowing them
69
+ * Validate imported shortcut configurations instead of crashing on bad input
70
+ * Deep-copy points in ``Shape.copy()`` and preserve a ``None`` label
71
+ * Correct the label-fix status message and make "Reset All" relaunch through
72
+ the Python interpreter so installed entry points restart correctly
73
+ * Theme the gallery regardless of the thumbnail-size slider, and source the
74
+ keypoint-panel and shortcuts-dialog colors from the active palette
75
+ * Zoom-scale the keypoint hit-test and cache the canvas overlay composite
76
+
77
+ Packaging
78
+ ~~~~~~~~~
79
+
80
+ * Ship the default class list inside the installed wheel
81
+ * Require Python >= 3.8 and drop dead Py2 / Qt4 shims
82
+
83
+ Internal
84
+ ~~~~~~~~
85
+
86
+ * Decompose the ~3,700-line ``MainWindow``: extract annotation loading,
87
+ fit-to-window scaling, the statistics controller, the gallery
88
+ status-refresh controller, and the format-metadata registry into focused,
89
+ unit-tested modules
90
+ * Unify annotation status / label probing across the gallery and stats views
91
+ * Run the CI test matrix on the ``dev`` branch and cache pip
92
+ * Add a real mouse-event polygon insert/drag/undo integration test (#70);
93
+ the full suite now runs 592 tests (up from 471)
94
+
4
95
  2.3.2 (2026-05-20)
5
96
  ------------------
6
97
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: labelimgplusplus
3
- Version: 2.3.2
3
+ Version: 2.4.0
4
4
  Summary: labelImg++ is an enhanced graphical image annotation tool with Gallery Mode for browsing and labeling images
5
5
  Author-email: Abhik Sarkar <abhiksark@gmail.com>
6
6
  License: Copyright (c) <2015-Present> Tzutalin
@@ -21,15 +21,14 @@ Classifier: Intended Audience :: Developers
21
21
  Classifier: Intended Audience :: Science/Research
22
22
  Classifier: Natural Language :: English
23
23
  Classifier: Programming Language :: Python :: 3
24
- Classifier: Programming Language :: Python :: 3.6
25
- Classifier: Programming Language :: Python :: 3.7
26
24
  Classifier: Programming Language :: Python :: 3.8
27
25
  Classifier: Programming Language :: Python :: 3.9
28
26
  Classifier: Programming Language :: Python :: 3.10
29
27
  Classifier: Programming Language :: Python :: 3.11
28
+ Classifier: Programming Language :: Python :: 3.12
30
29
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
31
30
  Classifier: Topic :: Scientific/Engineering :: Image Recognition
32
- Requires-Python: >=3.6
31
+ Requires-Python: >=3.8
33
32
  Description-Content-Type: text/x-rst
34
33
  License-File: LICENSE
35
34
  Requires-Dist: pyqt5
@@ -276,7 +275,7 @@ If you encounter issues, reset the settings:
276
275
 
277
276
  .. code:: shell
278
277
 
279
- rm ~/.labelImgSettings.pkl
278
+ rm ~/.labelImgSettings.json
280
279
 
281
280
  Or use **Menu > File > Reset All**
282
281
 
@@ -239,7 +239,7 @@ If you encounter issues, reset the settings:
239
239
 
240
240
  .. code:: shell
241
241
 
242
- rm ~/.labelImgSettings.pkl
242
+ rm ~/.labelImgSettings.json
243
243
 
244
244
  Or use **Menu > File > Reset All**
245
245