labelimgplusplus 2.3.1__tar.gz → 2.3.2__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. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/HISTORY.rst +24 -0
  2. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/PKG-INFO +1 -1
  3. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/labelImgPlusPlus.py +12 -5
  4. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/labelimgplusplus.egg-info/PKG-INFO +1 -1
  5. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/__init__.py +2 -2
  6. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/formats/create_ml_io.py +3 -4
  7. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/formats/yolo_io.py +21 -3
  8. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/resources.py +43 -43
  9. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/tools/label_checker.py +0 -2
  10. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/pyproject.toml +1 -1
  11. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/CONTRIBUTING.rst +0 -0
  12. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/LICENSE +0 -0
  13. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/MANIFEST.in +0 -0
  14. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/README.rst +0 -0
  15. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/data/predefined_classes.txt +0 -0
  16. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/labelimgplusplus.egg-info/SOURCES.txt +0 -0
  17. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/labelimgplusplus.egg-info/dependency_links.txt +0 -0
  18. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/labelimgplusplus.egg-info/entry_points.txt +0 -0
  19. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/labelimgplusplus.egg-info/requires.txt +0 -0
  20. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/labelimgplusplus.egg-info/top_level.txt +0 -0
  21. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/core/__init__.py +0 -0
  22. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/core/commands.py +0 -0
  23. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/core/keypoint_config.py +0 -0
  24. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/core/settings.py +0 -0
  25. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/core/shape.py +0 -0
  26. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/core/shortcut_config.py +0 -0
  27. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/formats/__init__.py +0 -0
  28. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/formats/coco_io.py +0 -0
  29. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/formats/labelFile.py +0 -0
  30. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/formats/pascal_voc_io.py +0 -0
  31. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/formats/yolo_seg_io.py +0 -0
  32. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/tools/__init__.py +0 -0
  33. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/tools/dataset_splitter.py +0 -0
  34. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/utils/__init__.py +0 -0
  35. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/utils/constants.py +0 -0
  36. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/utils/hashableQListWidgetItem.py +0 -0
  37. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/utils/stringBundle.py +0 -0
  38. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/utils/styles.py +0 -0
  39. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/utils/ustr.py +0 -0
  40. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/utils/utils.py +0 -0
  41. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/__init__.py +0 -0
  42. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/batchVerifyDialog.py +0 -0
  43. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/canvas.py +0 -0
  44. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/colorDialog.py +0 -0
  45. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/combobox.py +0 -0
  46. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/default_label_combobox.py +0 -0
  47. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/galleryWidget.py +0 -0
  48. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/keypointPanel.py +0 -0
  49. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/labelCheckerDialog.py +0 -0
  50. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/labelDialog.py +0 -0
  51. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/lightWidget.py +0 -0
  52. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/shortcutsDialog.py +0 -0
  53. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/splitDialog.py +0 -0
  54. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/statsWidget.py +0 -0
  55. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/toolBar.py +0 -0
  56. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/libs/widgets/zoomWidget.py +0 -0
  57. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/resources.qrc +0 -0
  58. {labelimgplusplus-2.3.1 → labelimgplusplus-2.3.2}/setup.cfg +0 -0
@@ -1,6 +1,30 @@
1
1
  History
2
2
  =======
3
3
 
4
+ 2.3.2 (2026-05-20)
5
+ ------------------
6
+
7
+ Patch release hardening the annotation format loaders against malformed
8
+ input. Slightly corrupt or hand-edited label files previously crashed the
9
+ load or silently dropped valid annotations.
10
+
11
+ * Skip individual malformed YOLO lines instead of discarding the whole
12
+ file — a line with non-numeric values no longer raises an error that
13
+ drops every annotation in that file
14
+ * Report corrupt CreateML JSON through an error dialog instead of
15
+ silently loading zero annotations, and defer the format switch until
16
+ the reader succeeds so a bad file no longer flips the saved format
17
+ * Fix the CreateML branch of label extraction, which passed the wrong
18
+ number of constructor arguments and could never return labels
19
+ * Replace a mutable default argument in the YOLO writer that could leak
20
+ class names across files and corrupt class indices in ``classes.txt``
21
+ * Guard ``load_predefined_classes`` against a missing class-file path
22
+
23
+ Internal: tolerate a PyQt5/coverage shutdown segfault in CI, ignore
24
+ coverage and local working-directory artifacts, and add 8 regression
25
+ tests (full suite now 471 passing).
26
+
27
+
4
28
  2.3.1 (2026-05-14)
5
29
  ------------------
6
30
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: labelimgplusplus
3
- Version: 2.3.1
3
+ Version: 2.3.2
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
@@ -3384,7 +3384,7 @@ class MainWindow(QMainWindow, WindowMixin):
3384
3384
  self.set_dirty()
3385
3385
 
3386
3386
  def load_predefined_classes(self, predef_classes_file):
3387
- if os.path.exists(predef_classes_file) is True:
3387
+ if predef_classes_file and os.path.exists(predef_classes_file):
3388
3388
  with codecs.open(predef_classes_file, 'r', 'utf8') as f:
3389
3389
  for line in f:
3390
3390
  line = line.strip()
@@ -3445,10 +3445,17 @@ class MainWindow(QMainWindow, WindowMixin):
3445
3445
  if os.path.isfile(json_path) is False:
3446
3446
  return
3447
3447
 
3448
- self.set_format(FORMAT_CREATEML)
3448
+ try:
3449
+ create_ml_parse_reader = CreateMLReader(json_path, file_path)
3450
+ shapes = create_ml_parse_reader.get_shapes()
3451
+ except Exception as e:
3452
+ self.error_message(
3453
+ 'Annotation Error',
3454
+ f'Error loading CreateML annotations from '
3455
+ f'{os.path.basename(json_path)}: {e}')
3456
+ return
3449
3457
 
3450
- create_ml_parse_reader = CreateMLReader(json_path, file_path)
3451
- shapes = create_ml_parse_reader.get_shapes()
3458
+ self.set_format(FORMAT_CREATEML)
3452
3459
  self.load_labels(shapes)
3453
3460
  self.canvas.verified = create_ml_parse_reader.verified
3454
3461
 
@@ -3832,7 +3839,7 @@ class MainWindow(QMainWindow, WindowMixin):
3832
3839
  json_path = base_path + JSON_EXT
3833
3840
  if os.path.exists(json_path):
3834
3841
  try:
3835
- reader = CreateMLReader(json_path)
3842
+ reader = CreateMLReader(json_path, img_path)
3836
3843
  shapes = reader.get_shapes()
3837
3844
  labels = [shape[0] for shape in shapes]
3838
3845
  except Exception:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: labelimgplusplus
3
- Version: 2.3.1
3
+ Version: 2.3.2
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
@@ -1,8 +1,8 @@
1
1
  # libs/__init__.py
2
2
  """LabelImg++ library package."""
3
3
 
4
- __version_info__ = ('2', '3', '1')
5
- __version__ = '2.3.1'
4
+ __version_info__ = ('2', '3', '2')
5
+ __version__ = '2.3.2'
6
6
 
7
7
  # Re-export subpackages for convenient access
8
8
  from libs import core, formats, widgets, utils
@@ -87,10 +87,9 @@ class CreateMLReader:
87
87
  self.shapes = []
88
88
  self.verified = False
89
89
  self.filename = os.path.basename(file_path)
90
- try:
91
- self.parse_json()
92
- except ValueError:
93
- print("JSON decoding failed")
90
+ # Let parse failures propagate so callers can surface them, instead
91
+ # of silently swallowing a malformed file into an empty shape list.
92
+ self.parse_json()
94
93
 
95
94
  def parse_json(self):
96
95
  with open(self.json_path, "r") as file:
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf8 -*-
3
+ # libs/formats/yolo_io.py
3
4
  import codecs
4
5
  import os
5
6
 
@@ -25,7 +26,10 @@ class YOLOWriter:
25
26
  bnd_box['difficult'] = difficult
26
27
  self.box_list.append(bnd_box)
27
28
 
28
- def bnd_box_to_yolo_line(self, box, class_list=[]):
29
+ def bnd_box_to_yolo_line(self, box, class_list=None):
30
+ if class_list is None:
31
+ class_list = []
32
+
29
33
  x_min = box['xmin']
30
34
  x_max = box['xmax']
31
35
  y_min = box['ymin']
@@ -46,7 +50,10 @@ class YOLOWriter:
46
50
 
47
51
  return class_index, x_center, y_center, w, h
48
52
 
49
- def save(self, class_list=[], target_file=None):
53
+ def save(self, class_list=None, target_file=None):
54
+ if class_list is None:
55
+ class_list = []
56
+
50
57
  if target_file is None:
51
58
  out_path = self.filename + TXT_EXT
52
59
  else:
@@ -140,8 +147,19 @@ class YoloReader:
140
147
  continue # Skip malformed lines
141
148
  class_index, x_center, y_center, w, h = parts
142
149
 
150
+ # Validate that all tokens are numeric - a line can have the
151
+ # right token count yet still hold garbage. Skip gracefully
152
+ # instead of raising ValueError out of the reader.
153
+ try:
154
+ idx = int(class_index)
155
+ x_center, y_center, w, h = (
156
+ float(x_center), float(y_center), float(w), float(h))
157
+ except ValueError:
158
+ print(f"Warning: Skipping invalid annotation in {self.file_path}: "
159
+ f"line {line_num} has non-numeric values")
160
+ continue # Skip this line, continue with next
161
+
143
162
  # Validate class index - skip invalid lines gracefully
144
- idx = int(class_index)
145
163
  if idx < 0 or idx >= len(self.classes):
146
164
  print(f"Warning: Skipping invalid annotation in {self.file_path}: "
147
165
  f"class index {idx} at line {line_num} is out of range "
@@ -4195,91 +4195,91 @@ qt_resource_struct_v2 = b"\
4195
4195
  \x00\x00\x00\x00\x00\x02\x00\x00\x00\x2b\x00\x00\x00\x01\
4196
4196
  \x00\x00\x00\x00\x00\x00\x00\x00\
4197
4197
  \x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
4198
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4198
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa4\
4199
4199
  \x00\x00\x00\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x7a\x97\
4200
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4200
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4201
4201
  \x00\x00\x00\x18\x00\x00\x00\x00\x00\x01\x00\x00\x7b\xd5\
4202
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4202
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4203
4203
  \x00\x00\x00\x24\x00\x00\x00\x00\x00\x01\x00\x00\x7e\x0a\
4204
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4204
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4205
4205
  \x00\x00\x00\x32\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x3f\
4206
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4206
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4207
4207
  \x00\x00\x00\x40\x00\x00\x00\x00\x00\x01\x00\x00\x80\x1c\
4208
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4208
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4209
4209
  \x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x81\x2d\
4210
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4210
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4211
4211
  \x00\x00\x00\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x82\x50\
4212
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4212
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4213
4213
  \x00\x00\x00\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x83\x84\
4214
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4214
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4215
4215
  \x00\x00\x00\x78\x00\x00\x00\x00\x00\x01\x00\x00\x85\x23\
4216
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4216
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4217
4217
  \x00\x00\x00\x86\x00\x00\x00\x00\x00\x01\x00\x00\x86\x00\
4218
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4218
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4219
4219
  \x00\x00\x00\x94\x00\x00\x00\x00\x00\x01\x00\x00\x87\x11\
4220
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4220
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4221
4221
  \x00\x00\x00\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x87\xef\
4222
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4222
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4223
4223
  \x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x88\xfe\
4224
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4224
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4225
4225
  \x00\x00\x00\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x36\
4226
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4226
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4227
4227
  \x00\x00\x00\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x8b\x86\
4228
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4228
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4229
4229
  \x00\x00\x00\xda\x00\x00\x00\x00\x00\x01\x00\x00\x8c\x8f\
4230
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4230
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4231
4231
  \x00\x00\x00\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x8d\x95\
4232
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4232
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4233
4233
  \x00\x00\x00\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x8e\x99\
4234
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4234
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4235
4235
  \x00\x00\x01\x08\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x84\
4236
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4236
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4237
4237
  \x00\x00\x01\x1c\x00\x00\x00\x00\x00\x01\x00\x00\x90\xd6\
4238
- \x00\x00\x01\x9e\x3c\x48\x08\xc2\
4238
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa8\
4239
4239
  \x00\x00\x01\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x9b\x2a\
4240
- \x00\x00\x01\x9e\x3c\x48\x08\xc2\
4240
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa8\
4241
4241
  \x00\x00\x01\x5c\x00\x00\x00\x00\x00\x01\x00\x00\xa4\x77\
4242
- \x00\x00\x01\x9e\x3c\x48\x08\xc2\
4242
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa8\
4243
4243
  \x00\x00\x01\x7c\x00\x00\x00\x00\x00\x01\x00\x00\xb0\xcb\
4244
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4244
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4245
4245
  \x00\x00\x01\x96\x00\x00\x00\x00\x00\x01\x00\x00\xb3\xe1\
4246
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4246
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4247
4247
  \x00\x00\x01\xb0\x00\x00\x00\x00\x00\x01\x00\x00\xb5\x2d\
4248
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4248
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4249
4249
  \x00\x00\x01\xc6\x00\x00\x00\x00\x00\x01\x00\x00\xb6\x59\
4250
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4250
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4251
4251
  \x00\x00\x01\xe0\x00\x00\x00\x00\x00\x01\x00\x00\xb7\x56\
4252
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4252
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4253
4253
  \x00\x00\x01\xf2\x00\x00\x00\x00\x00\x01\x00\x00\xb8\xd9\
4254
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4254
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4255
4255
  \x00\x00\x02\x04\x00\x00\x00\x00\x00\x01\x00\x00\xba\xe5\
4256
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4256
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4257
4257
  \x00\x00\x02\x24\x00\x00\x00\x00\x00\x01\x00\x00\xbd\x1a\
4258
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4258
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4259
4259
  \x00\x00\x02\x36\x00\x00\x00\x00\x00\x01\x00\x00\xbe\x78\
4260
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4260
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4261
4261
  \x00\x00\x02\x4e\x00\x00\x00\x00\x00\x01\x00\x00\xbf\x9b\
4262
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4262
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa4\
4263
4263
  \x00\x00\x02\x60\x00\x00\x00\x00\x00\x01\x00\x00\xc0\xad\
4264
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4264
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4265
4265
  \x00\x00\x02\x7c\x00\x00\x00\x00\x00\x01\x00\x00\xc3\x54\
4266
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4266
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4267
4267
  \x00\x00\x02\x90\x00\x00\x00\x00\x00\x01\x00\x00\xc4\x8e\
4268
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4268
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4269
4269
  \x00\x00\x02\xac\x00\x00\x00\x00\x00\x01\x00\x00\xc6\xc3\
4270
- \x00\x00\x01\x9e\x3c\x48\x08\xc2\
4270
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa8\
4271
4271
  \x00\x00\x02\xc0\x00\x00\x00\x00\x00\x01\x00\x00\xd9\x78\
4272
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4272
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4273
4273
  \x00\x00\x02\xe4\x00\x00\x00\x00\x00\x01\x00\x00\xe9\xb8\
4274
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4274
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4275
4275
  \x00\x00\x03\x02\x00\x00\x00\x00\x00\x01\x00\x00\xea\x96\
4276
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4276
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4277
4277
  \x00\x00\x03\x20\x00\x00\x00\x00\x00\x01\x00\x00\xeb\x8b\
4278
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4278
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4279
4279
  \x00\x00\x03\x36\x00\x00\x00\x00\x00\x01\x00\x00\xec\xdd\
4280
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4280
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4281
4281
  \x00\x00\x03\x4c\x00\x00\x00\x00\x00\x01\x00\x00\xf0\xa0\
4282
- \x00\x00\x01\x9e\x3c\x48\x08\xbe\
4282
+ \x00\x00\x01\x9e\x44\x7a\x2d\xa5\
4283
4283
  "
4284
4284
 
4285
4285
  qt_version = [int(v) for v in QtCore.qVersion().split('.')]
@@ -8,9 +8,7 @@ from difflib import SequenceMatcher
8
8
  from enum import IntEnum
9
9
  from typing import Dict, List, Optional, Set, Tuple
10
10
 
11
- from libs.formats.yolo_io import YoloReader
12
11
  from libs.formats.pascal_voc_io import PascalVocReader
13
- from libs.formats.create_ml_io import CreateMLReader
14
12
 
15
13
 
16
14
  class IssueType(IntEnum):
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "labelimgplusplus"
7
- version = "2.3.1"
7
+ version = "2.3.2"
8
8
  description = "labelImg++ is an enhanced graphical image annotation tool with Gallery Mode for browsing and labeling images"
9
9
  readme = "README.rst"
10
10
  license = {file = "LICENSE"}