PyImageLabeling 1.0.0__py3-none-any.whl

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 (99) hide show
  1. PyImageLabeling/__init__.py +22 -0
  2. PyImageLabeling/config.json +289 -0
  3. PyImageLabeling/controller/Controller.py +25 -0
  4. PyImageLabeling/controller/Events.py +147 -0
  5. PyImageLabeling/controller/FileEvents.py +69 -0
  6. PyImageLabeling/controller/ImageEvents.py +32 -0
  7. PyImageLabeling/controller/LabelEvents.py +219 -0
  8. PyImageLabeling/controller/LabelingEvents.py +123 -0
  9. PyImageLabeling/controller/settings/ContourFillinSetting.py +93 -0
  10. PyImageLabeling/controller/settings/CoutourFillingApplyCancel.py +37 -0
  11. PyImageLabeling/controller/settings/EraserSetting.py +73 -0
  12. PyImageLabeling/controller/settings/LabelSetting.py +91 -0
  13. PyImageLabeling/controller/settings/MagicPenSetting.py +125 -0
  14. PyImageLabeling/controller/settings/OpacitySetting.py +66 -0
  15. PyImageLabeling/controller/settings/PaintBrushSetting.py +66 -0
  16. PyImageLabeling/icons/apply.png +0 -0
  17. PyImageLabeling/icons/asterisk-green.png +0 -0
  18. PyImageLabeling/icons/asterisk-red.png +0 -0
  19. PyImageLabeling/icons/back.png +0 -0
  20. PyImageLabeling/icons/border.png +0 -0
  21. PyImageLabeling/icons/cancel.png +0 -0
  22. PyImageLabeling/icons/cleaner.png +0 -0
  23. PyImageLabeling/icons/close.png +0 -0
  24. PyImageLabeling/icons/down.png +0 -0
  25. PyImageLabeling/icons/ellipse.png +0 -0
  26. PyImageLabeling/icons/eraser.png +0 -0
  27. PyImageLabeling/icons/filling.png +0 -0
  28. PyImageLabeling/icons/logoMAIA.png +0 -0
  29. PyImageLabeling/icons/magic.png +0 -0
  30. PyImageLabeling/icons/maia.png +0 -0
  31. PyImageLabeling/icons/maia1.png +0 -0
  32. PyImageLabeling/icons/maia3.ico +0 -0
  33. PyImageLabeling/icons/maia_icon.png +0 -0
  34. PyImageLabeling/icons/move.png +0 -0
  35. PyImageLabeling/icons/opacity.png +0 -0
  36. PyImageLabeling/icons/open_image.png +0 -0
  37. PyImageLabeling/icons/open_layer.png +0 -0
  38. PyImageLabeling/icons/paint.png +0 -0
  39. PyImageLabeling/icons/plus.png +0 -0
  40. PyImageLabeling/icons/polygon.png +0 -0
  41. PyImageLabeling/icons/rectangle.png +0 -0
  42. PyImageLabeling/icons/reset.png +0 -0
  43. PyImageLabeling/icons/save.png +0 -0
  44. PyImageLabeling/icons/setting.png +0 -0
  45. PyImageLabeling/icons/transparency.png:Zone.Identifier +4 -0
  46. PyImageLabeling/icons/up.png +0 -0
  47. PyImageLabeling/icons/visibility.png +0 -0
  48. PyImageLabeling/icons/zoom_minus.png +0 -0
  49. PyImageLabeling/icons/zoom_plus.png +0 -0
  50. PyImageLabeling/model/Core.py +795 -0
  51. PyImageLabeling/model/File/Files.py +166 -0
  52. PyImageLabeling/model/File/NextImage.py +36 -0
  53. PyImageLabeling/model/File/PreviousImage.py +19 -0
  54. PyImageLabeling/model/Image/MoveImage.py +32 -0
  55. PyImageLabeling/model/Image/ResetMoveZoomImage.py +16 -0
  56. PyImageLabeling/model/Image/ZoomMinus.py +25 -0
  57. PyImageLabeling/model/Image/ZoomPlus.py +16 -0
  58. PyImageLabeling/model/Labeling/ClearAll.py +22 -0
  59. PyImageLabeling/model/Labeling/ContourFilling.py +135 -0
  60. PyImageLabeling/model/Labeling/Ellipse.py +350 -0
  61. PyImageLabeling/model/Labeling/Eraser.py +131 -0
  62. PyImageLabeling/model/Labeling/MagicPen.py +131 -0
  63. PyImageLabeling/model/Labeling/PaintBrush.py +207 -0
  64. PyImageLabeling/model/Labeling/Polygon.py +279 -0
  65. PyImageLabeling/model/Labeling/Rectangle.py +248 -0
  66. PyImageLabeling/model/Labeling/Undo.py +12 -0
  67. PyImageLabeling/model/Model.py +40 -0
  68. PyImageLabeling/model/Utils.py +40 -0
  69. PyImageLabeling/old_version/label_rectangle_properties.json +6 -0
  70. PyImageLabeling/old_version/main.py +2073 -0
  71. PyImageLabeling/old_version/models/EraseSettingsDialog.py +51 -0
  72. PyImageLabeling/old_version/models/LabeledRectangle.py +80 -0
  73. PyImageLabeling/old_version/models/MagicSettingsDialog.py +119 -0
  74. PyImageLabeling/old_version/models/OverlayOpacityDialog.py +63 -0
  75. PyImageLabeling/old_version/models/PaintSettingsDialog.py +289 -0
  76. PyImageLabeling/old_version/models/PointItem.py +66 -0
  77. PyImageLabeling/old_version/models/ProcessWorker.py +52 -0
  78. PyImageLabeling/old_version/models/ZoomableGraphicsView.py +1214 -0
  79. PyImageLabeling/old_version/models/tools/ContourTool.py +279 -0
  80. PyImageLabeling/old_version/models/tools/EraserTool.py +290 -0
  81. PyImageLabeling/old_version/models/tools/MagicPenTool.py +199 -0
  82. PyImageLabeling/old_version/models/tools/OverlayTool.py +179 -0
  83. PyImageLabeling/old_version/models/tools/PaintTool.py +68 -0
  84. PyImageLabeling/old_version/models/tools/PolygonTool.py +786 -0
  85. PyImageLabeling/old_version/models/tools/RectangleTool.py +1036 -0
  86. PyImageLabeling/parameters.json +1 -0
  87. PyImageLabeling/style.css +611 -0
  88. PyImageLabeling/view/Builder.py +333 -0
  89. PyImageLabeling/view/QBackgroundItem.py +30 -0
  90. PyImageLabeling/view/QWidgets.py +10 -0
  91. PyImageLabeling/view/View.py +226 -0
  92. PyImageLabeling/view/ZoomableGraphicsView.py +91 -0
  93. PyImageLabeling/view/__init__.py +0 -0
  94. pyimagelabeling-1.0.0.dist-info/METADATA +55 -0
  95. pyimagelabeling-1.0.0.dist-info/RECORD +99 -0
  96. pyimagelabeling-1.0.0.dist-info/WHEEL +5 -0
  97. pyimagelabeling-1.0.0.dist-info/licenses/LICENCE +22 -0
  98. pyimagelabeling-1.0.0.dist-info/top_level.txt +2 -0
  99. pypi/publish_pypi.py +18 -0
@@ -0,0 +1,91 @@
1
+ import cv2
2
+ import numpy as np
3
+ import sys
4
+ import os
5
+ import time
6
+ from PyQt6.QtWidgets import (
7
+ QGraphicsEllipseItem, QComboBox, QGraphicsRectItem, QInputDialog, QGraphicsItem, QGraphicsItemGroup, QGraphicsPixmapItem, QGraphicsOpacityEffect, QGraphicsView, QGraphicsScene, QApplication, QMainWindow, QLabel, QVBoxLayout, QPushButton,
8
+ QFileDialog, QWidget, QMessageBox, QHBoxLayout, QColorDialog, QDialog, QSlider, QFormLayout, QDialogButtonBox, QGridLayout, QProgressDialog, QCheckBox, QSpinBox, QSplashScreen, QMenu, QLineEdit, QFrame
9
+ )
10
+ from PyQt6.QtGui import QPixmap, QMouseEvent, QImage, QPainter, QColor, QPen, QBrush, QCursor, QIcon, QPainterPath, QFont
11
+ from PyQt6.QtCore import Qt, QPoint, QPointF, QTimer, QThread, pyqtSignal, QSize, QRectF, QObject, QLineF
12
+ import gc
13
+ import math
14
+ import traceback
15
+
16
+ from PyImageLabeling.model.Utils import Utils
17
+
18
+ #from models.LabeledRectangle import LabeledRectangle
19
+ #from models.PointItem import PointItem
20
+ #from models.ProcessWorker import ProcessWorker
21
+ #from models.OverlayOpacityDialog import OverlayOpacityDialog
22
+ #from models.tools.PaintTool import PaintTool
23
+ #from models.tools.EraserTool import EraserTool
24
+ #from models.tools.MagicPenTool import MagicPenTool
25
+ #from models.tools.OverlayTool import OverlayTool
26
+ #from models.tools.RectangleTool import RectangleTool, LabelPropertiesManager, LabelRectanglePropertiesDialog
27
+ #from models.tools.ContourTool import ContourTool
28
+ #from models.tools.PolygonTool import PolygonTool, LabelPolygonPropertiesDialog
29
+
30
+ #class ZoomableGraphicsView(QGraphicsView, PaintTool, EraserTool, MagicPenTool, OverlayTool, RectangleTool, ContourTool, PolygonTool):
31
+
32
+ class ZoomableGraphicsView(QGraphicsView):
33
+ def __init__(self, view, parent=None):
34
+ super().__init__(parent)
35
+
36
+ self.view = view
37
+ # Create scene
38
+ self.scene = QGraphicsScene(self)
39
+ self.setScene(self.scene)
40
+
41
+ # Setup view properties for best performance
42
+ self.setRenderHint(QPainter.RenderHint.Antialiasing, True)
43
+ self.setRenderHint(QPainter.RenderHint.SmoothPixmapTransform, True)
44
+ self.setOptimizationFlag(QGraphicsView.OptimizationFlag.DontAdjustForAntialiasing, True)
45
+ self.setOptimizationFlag(QGraphicsView.OptimizationFlag.DontSavePainterState, True)
46
+ self.setViewportUpdateMode(QGraphicsView.ViewportUpdateMode.MinimalViewportUpdate)
47
+ self.setTransformationAnchor(QGraphicsView.ViewportAnchor.AnchorUnderMouse)
48
+ self.setResizeAnchor(QGraphicsView.ViewportAnchor.AnchorViewCenter)
49
+ self.setDragMode(QGraphicsView.DragMode.NoDrag)
50
+ #self.setAlignment(Qt.AlignmentFlag.AlignCenter)
51
+ #self.setCacheMode(QGraphicsView.CacheModeFlag.CacheBackground)
52
+
53
+ self.data_parameters = Utils.load_parameters() # To use only for recuparate constant values (not save)
54
+
55
+ # Zoom properties
56
+ self.view.zoom_factor = 0
57
+ self.view.min_zoom = self.data_parameters["zoom"]["min_zoom"]
58
+ self.view.max_zoom = self.data_parameters["zoom"]["max_zoom"]
59
+ self.view.plus_zoom_factor = self.data_parameters["zoom"]["plus_zoom_factor"]
60
+ self.view.minus_zoom_factor = self.data_parameters["zoom"]["minus_zoom_factor"]
61
+
62
+ self.view.layer_activation = False
63
+
64
+ def change_cursor(self, name):
65
+ cursor_pixmap = QPixmap(Utils.get_icon_path(name))
66
+ cursor_pixmap = cursor_pixmap.scaled(*self.view.config["window_size"]["icon"])
67
+ cursor = QCursor(cursor_pixmap)
68
+ self.viewport().setCursor(cursor)
69
+ return cursor.pixmap().width(), cursor.pixmap().height()
70
+
71
+ def zoom(self, factor):
72
+ if self.view.min_zoom <= self.view.zoom_factor*factor <= self.view.max_zoom:
73
+ view = self.view.zoomable_graphics_view
74
+ self.view.zoom_factor = self.view.zoom_factor * factor
75
+ #self.view.controller.model.get_current_image_item().set_zoom_factor(self.view.zoom_factor)
76
+ mouse_pos = view.mapFromGlobal(view.cursor().pos())
77
+ scene_pos = view.mapToScene(mouse_pos)
78
+ view.scale(factor, factor)
79
+ new_viewport_pos = view.mapFromScene(scene_pos)
80
+ delta = new_viewport_pos - mouse_pos
81
+ view.horizontalScrollBar().setValue(view.horizontalScrollBar().value() + delta.x())
82
+ view.verticalScrollBar().setValue(view.verticalScrollBar().value() + delta.y())
83
+
84
+
85
+
86
+ def wheelEvent(self, event):
87
+ zoom_in = event.angleDelta().y() > 0
88
+ if zoom_in is True:
89
+ self.zoom(self.view.plus_zoom_factor)
90
+ else:
91
+ self.zoom(self.view.minus_zoom_factor)
File without changes
@@ -0,0 +1,55 @@
1
+ Metadata-Version: 2.4
2
+ Name: PyImageLabeling
3
+ Version: 1.0.0
4
+ Summary: PyImageLabeling is a tool designed to help create image masks, i.e., labeled images for training machine learning models.
5
+ Author-email: Szczepanski Nicolas <szczepanski@cril.fr>, Fayette Pierre-Marie <pmarie.fayette@univ-artois.fr>
6
+ Maintainer-email: Szczepanski Nicolas <szczepanski@cril.fr>, Fayette Pierre-Marie <pmarie.fayette@univ-artois.fr>
7
+ License: MIT
8
+ Project-URL: Git, https://github.com/crillab/PyImageLabeling
9
+ Keywords: AI,ML,labeling,learning,image
10
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
11
+ Classifier: Topic :: Education
12
+ Requires-Python: >=3.7
13
+ Description-Content-Type: text/markdown
14
+ License-File: LICENCE
15
+ Requires-Dist: pyqt6
16
+ Requires-Dist: opencv-python
17
+ Requires-Dist: pillow
18
+ Requires-Dist: matplotlib
19
+ Dynamic: license-file
20
+
21
+
22
+
23
+ PyImageLabeling is designed to assist in the creation of image masks (labeled images) that can be used to train Machine Learning models.
24
+
25
+ ## Principle
26
+
27
+ You load a study image and use a variety of tools to annotate key data points.
28
+ Once your work is saved, a save directory will be automatically created in your working folder, containing the mask in PNG format.
29
+
30
+ ## Navigation and control
31
+
32
+ | Movement | Function |
33
+ | ----------------- | -------------------------------------------- |
34
+ | Mouse wheel | Zoom in/out |
35
+ | Left-click + drag | Move the image (only when "Move" is enabled) |
36
+ | Arrow keys | Pan the image in fixed steps |
37
+
38
+ ## Tools
39
+
40
+ | Tool | Functionality |
41
+ | ------------------ | ------------------------------------------------------------------------------------------------------ |
42
+ | **Load image** | Load an image from your local system. |
43
+ | **Load layer** | Add a layer on top of the loaded image (useful for editing existing masks). Changes are irreversible. |
44
+ | **Unload layer** | Remove the currently loaded layer. |
45
+ | **Save** | Save the current layer with all modifications. |
46
+ | **Move** | Activate image movement using the mouse. Enabled by default. |
47
+ | **Reset** | Reset zoom and pan to default. |
48
+ | **Undo** | Undo the last action. |
49
+ | **Opacity** | Adjust the transparency of the active layer. |
50
+ | **Contour Filling**| Automatically detect and extract shapes from the image. Shapes can be filled by clicking. |
51
+ | **Paintbrush** | Draw on the image using a customizable brush (size, color). These points feed smart tools. |
52
+ | **Magic Pen** | Automatically fill shapes based on the clicked pixel's color and tolerance. Uses paint-defined points. |
53
+ | **Rectangle** | Draw rectangles to select areas of interest and assign labels. Saved in the `save` folder. |
54
+ | **Eraser** | Remove drawn points. Adjustable size and "Absolute" mode allows erasing from loaded layers. |
55
+ | **Clear all** | Delete all drawn points from the canvas. |
@@ -0,0 +1,99 @@
1
+ PyImageLabeling/__init__.py,sha256=QZQbnG81YFykW-GKQAdgZ3qL3u851daeYDtQHc6smxo,549
2
+ PyImageLabeling/config.json,sha256=pm7JswL4FsOpjUPv31vRmJYuCDZg4xApvMsae1OH8g8,10091
3
+ PyImageLabeling/parameters.json,sha256=HoehwU9-hEe_k3YvciIL7P7a_t0a5h14tTbw_SBtrEU,468
4
+ PyImageLabeling/style.css,sha256=bV6QPSrW8GpA6XVUj4W-suwjQ9nbb2Ssh0cdQg9_gnc,11879
5
+ PyImageLabeling/controller/Controller.py,sha256=Aw9Y-NcX1MqKhSYad7UhOYCGpdefz-4FaG9uVJjmHak,704
6
+ PyImageLabeling/controller/Events.py,sha256=X1301FsOGLF2IjKEF4o4yuVO2w_WKvgzH3DASBRAMS8,6853
7
+ PyImageLabeling/controller/FileEvents.py,sha256=gPXA3IkDBDq_MS58OI4Up7RBGawjal21LAYkAk49SMQ,2283
8
+ PyImageLabeling/controller/ImageEvents.py,sha256=RK_fQOK9AEh2qBhfaLkUtxNBoMa3orHS_zWbO0CGb9Y,1045
9
+ PyImageLabeling/controller/LabelEvents.py,sha256=Mp4kye-oERUqeQqR3GXZ0UoQpIVwGVImP0GKefUAXto,10475
10
+ PyImageLabeling/controller/LabelingEvents.py,sha256=g8LcvbET-BqugkIdOZ_jGVkZ2lzR7fj_Up4HthVSUHg,4729
11
+ PyImageLabeling/controller/settings/ContourFillinSetting.py,sha256=qmtMLJ0IZ2hVRXX9JoSyc_1PdWpx9joHuNKMOMhP0Is,4132
12
+ PyImageLabeling/controller/settings/CoutourFillingApplyCancel.py,sha256=7qLTGo2NrQWKLN2qTQhm5jDfiuGIjSHjeuqYDelHbMg,1454
13
+ PyImageLabeling/controller/settings/EraserSetting.py,sha256=se8pIFo9jeQhVE48d8POLXLHv3yq5yV7Vh7c5Tr5L0s,3069
14
+ PyImageLabeling/controller/settings/LabelSetting.py,sha256=jjtfQyJsiNB4MAQjXQI7ujXj8t3gkoLK2ApZdFGvWyg,3749
15
+ PyImageLabeling/controller/settings/MagicPenSetting.py,sha256=ZuX9F1MTCwARFzTLkg_F_hn5h0VKGPmi8gEhqkmRWA0,5560
16
+ PyImageLabeling/controller/settings/OpacitySetting.py,sha256=i4NMJP61YG0xlmiQvj7nBzC3xmFlMgFDMD33me9bUPg,2750
17
+ PyImageLabeling/controller/settings/PaintBrushSetting.py,sha256=w4Q758KIRGQbCwKRqv7fMV96uxhIDauEtl-oiFzzDd4,3038
18
+ PyImageLabeling/icons/apply.png,sha256=BP5TFriJUtVdEwWnG1Fce1nHlMBZCLxibuPf4AainV8,1722
19
+ PyImageLabeling/icons/asterisk-green.png,sha256=ep-Tk2DZleRxJOb3G7D2NDGviNIcmdnaurz5mkNaw40,4563
20
+ PyImageLabeling/icons/asterisk-red.png,sha256=s6wCnkz5oWNrgxZsdB_EuxoZLegmC7vnM7ObmmXXc1I,1206
21
+ PyImageLabeling/icons/back.png,sha256=W2GoUzmgaukrQHkPweqYnVFEv-NLrN5dcWk1S6Z34vk,606
22
+ PyImageLabeling/icons/border.png,sha256=IAzlWKACIFMkEDDj1mKWMKTkmfPYPrbLYS3KSMIGb14,219
23
+ PyImageLabeling/icons/cancel.png,sha256=zSAfljfyLdOoxYsURxOKRHItrsmDyvx7m6bCOp2CtfY,1809
24
+ PyImageLabeling/icons/cleaner.png,sha256=MEbMV9LlfSAk4DDDdHcdlqXFSmB5TeWLDJHBc3woE34,981
25
+ PyImageLabeling/icons/close.png,sha256=ICvmgRAxJSXitX01xJaG2nd9MPvJdODHp7IRUiKIQXY,269
26
+ PyImageLabeling/icons/down.png,sha256=xyYxTHcU0J_69OUzN2IoV5weR0HPuwQ6-s28saWwtaM,489
27
+ PyImageLabeling/icons/ellipse.png,sha256=cf8NikAFsN7cBYMwMMxTm-FEseBD8dKzZJEUBONr4wY,1558
28
+ PyImageLabeling/icons/eraser.png,sha256=rrfh9nSzCsmZtRpICikrT9OZgIgXoZ7U9Ci3biyh3jM,455
29
+ PyImageLabeling/icons/filling.png,sha256=PsogU8dHrRMV-EYAVJPkuYJe7YsZa8Ekv7_np2VO7as,978
30
+ PyImageLabeling/icons/logoMAIA.png,sha256=99_KjOrDFIlnBaz4NiEf45r9hS5PpIvGV0KgtGOySBQ,27363
31
+ PyImageLabeling/icons/magic.png,sha256=lYS65Kp-pZuWd4zG7EQlhYMwsbNgwBA2tRLMmbj0_NM,921
32
+ PyImageLabeling/icons/maia.png,sha256=BGlyAm78qwjxo0mhoVPyrNQmxhdnPop2gB_5lWVxyPg,8671
33
+ PyImageLabeling/icons/maia1.png,sha256=qNQzQEz_e6faLKBNvBSbOBrKGj8qP8C9FRLBTZmO-AQ,231569
34
+ PyImageLabeling/icons/maia3.ico,sha256=m09qFuhLDH_R8ctJGcClgLuBjzOS7YHBcR_Fpn33ISU,10499
35
+ PyImageLabeling/icons/maia_icon.png,sha256=ZPUHN_30NGYCcMjlv12l4Gc7k0bbW6RBSKUxiyjkbzM,231569
36
+ PyImageLabeling/icons/move.png,sha256=P4PY7QYTXPopoop16zhGGyMxeAXVeRunXU86DQ6_zAo,6785
37
+ PyImageLabeling/icons/opacity.png,sha256=_Iije9vfcpip0qBqL3tsFRjGGjH7LY0W67e_QUOLofQ,10402
38
+ PyImageLabeling/icons/open_image.png,sha256=oaBLFbLSuwTAn23iA-2feRdZPIBvOWR0toDgwZtNbp8,4681
39
+ PyImageLabeling/icons/open_layer.png,sha256=0vyU1o3kufKn9PGqRXVdKDwIbmAQIFzC2fd4ud1VX6o,8675
40
+ PyImageLabeling/icons/paint.png,sha256=cz-KSYGJEH5ZwEIm70nImjg3gOtIp2ClwydAhPi4dAY,679
41
+ PyImageLabeling/icons/plus.png,sha256=7-tg_WaxLTxd_Dq4JlRV-rYFW9xJx5Uo1Il5bAxyfBg,343
42
+ PyImageLabeling/icons/polygon.png,sha256=IWQv2Lb8X7SpM8q1fdOgpJ0Ew-WH1JEEcfrWdbkPVqg,14639
43
+ PyImageLabeling/icons/rectangle.png,sha256=v74r2HKKTeYTF6hnYen__8udGPr3-wQUjo8JzbrkIE0,698
44
+ PyImageLabeling/icons/reset.png,sha256=aHCoy4HqQixhpa6a8RcS4mLUh5mlL05M15JCZQNPn8g,882
45
+ PyImageLabeling/icons/save.png,sha256=z2kyI20V485Rq3n0_fzBZptFUwv6qAOxQCEmTGA6qy4,323
46
+ PyImageLabeling/icons/setting.png,sha256=K76luCfxwMO7cLBUodU0F1oEa3U0UcXzKZpD6ZFOUbk,807
47
+ PyImageLabeling/icons/transparency.png:Zone.Identifier,sha256=xf7NyTud1TdqJuNJZ-Tk6gM2HwZhs1YfHcSp9PWw0Ls,108
48
+ PyImageLabeling/icons/up.png,sha256=5GfWvVUt4AQSkheG7eqmg8IBFlRaVP22T4FEH7XDi_4,499
49
+ PyImageLabeling/icons/visibility.png,sha256=lw6wpRZq-vXE9Y8qp2Si9f2qCWrP6rJjiVqjt_AoiHQ,12592
50
+ PyImageLabeling/icons/zoom_minus.png,sha256=7ETG2a8kvq0E_f24it4HBkXMrC4TbFwbfQolUx503Ng,4950
51
+ PyImageLabeling/icons/zoom_plus.png,sha256=svNDT0MQjyPjnUgw6-t8y7cEqr1yrC7jFU8fU-Qbypw,5035
52
+ PyImageLabeling/model/Core.py,sha256=-m6cC2k0LmaJBGQBXNqnAK9Lq59kA5eOTANN5XGgypU,32627
53
+ PyImageLabeling/model/Model.py,sha256=-7xo9n_isj8jh2zHlSVpkFwbtRGyzf-6En4SnsrcW5I,1590
54
+ PyImageLabeling/model/Utils.py,sha256=w1ol3SR-DZf3rIQj079gAgYrJeh1gtb1FN2Bs4c-FX0,1526
55
+ PyImageLabeling/model/File/Files.py,sha256=-3xW-yTS5YwSafIccxTx3749umg4ZqtR00oIZSDnbfg,6064
56
+ PyImageLabeling/model/File/NextImage.py,sha256=hcUy_U5UTG6ATP18M9armE4DxVJoFBBguiPHqSy_jYE,1346
57
+ PyImageLabeling/model/File/PreviousImage.py,sha256=OH30Y8QgyogfCYXmyyR7pA1jU88oSM81ZTdfE1bi7ck,587
58
+ PyImageLabeling/model/Image/MoveImage.py,sha256=Ra23OhwrCChoBpbcOxqMSdx_wMHIZkIDfVw-8KV-kRU,1343
59
+ PyImageLabeling/model/Image/ResetMoveZoomImage.py,sha256=KHmqGVBwva25KwYANTzsXtI027KJ7YD0MsXSvWLoytE,577
60
+ PyImageLabeling/model/Image/ZoomMinus.py,sha256=ksuMfcijUtAsUZ-2ViJucCjk2JQfNy5hopz45pDj8to,703
61
+ PyImageLabeling/model/Image/ZoomPlus.py,sha256=SKdzM_Iw2GhK2W2ZX9ohv1pvEo47Jk-vNW8AxphhFf0,450
62
+ PyImageLabeling/model/Labeling/ClearAll.py,sha256=t6MDyXRMCwMhytel5fl4PF8Ggs5Taw4wO0UE38dWC20,883
63
+ PyImageLabeling/model/Labeling/ContourFilling.py,sha256=yHg-9H6-zxwoCoMvskyQZ0RjELMRDf7t33Jkvt8wXQs,7386
64
+ PyImageLabeling/model/Labeling/Ellipse.py,sha256=eJq-ZsxucKvPEtugiEXdHIzvtqAnV1-orTEwD4Y8Fc8,14390
65
+ PyImageLabeling/model/Labeling/Eraser.py,sha256=mxYoeoWDaHUHvUDnV1WFO4lE21AuImxSbk5evKvid5k,6573
66
+ PyImageLabeling/model/Labeling/MagicPen.py,sha256=-r7UIdH5uOWZEe-vjefD7tJX6_OFnvM17GhnHrKJ8-I,5645
67
+ PyImageLabeling/model/Labeling/PaintBrush.py,sha256=p-Q5-s9ZQnr0CgkRptQ9SSKYatsj_p7ysxDY6j1zacE,9326
68
+ PyImageLabeling/model/Labeling/Polygon.py,sha256=4AHtMQKTH9_IvefJF0PauyzTPyUh8XcFBpwxtP99w0M,10983
69
+ PyImageLabeling/model/Labeling/Rectangle.py,sha256=Oe-2kvEp74CWyckC6S-yAciyR3j2G1KGpAoB2Mzey8E,9883
70
+ PyImageLabeling/model/Labeling/Undo.py,sha256=Y_xPxLpxbM4LRaBSaBNb1n4puMBeZxxnXB5jSAMIdcw,334
71
+ PyImageLabeling/old_version/label_rectangle_properties.json,sha256=IcF5N5yE6rE7xU-zTs5knNBUn8ZddzHbAxIOizTbllw,64
72
+ PyImageLabeling/old_version/main.py,sha256=oEqGHEcmUzUFcx0PzcZ0pcvc28BmaoAZmdqhdJtRSuU,91442
73
+ PyImageLabeling/old_version/models/EraseSettingsDialog.py,sha256=mn5VlFrE4Y62Pw0xpmbeQxBXlb4mNzG7lDb-9A5nEk8,2423
74
+ PyImageLabeling/old_version/models/LabeledRectangle.py,sha256=wZg8lvsyoPLkp79ZORzTldWESfACjpDvXEndDODxq2Y,3437
75
+ PyImageLabeling/old_version/models/MagicSettingsDialog.py,sha256=TRhmtAn56EsLnMwrT8XF4RllESs4aqu8RNKcLhS7zZ4,5367
76
+ PyImageLabeling/old_version/models/OverlayOpacityDialog.py,sha256=pvmNSu911txVCKmc62kFaH_gED42DblGBFFyhZNjtws,2754
77
+ PyImageLabeling/old_version/models/PaintSettingsDialog.py,sha256=owuknXuHrM_-L939neG66DehrPOJW7_xohIRaGc10bw,11784
78
+ PyImageLabeling/old_version/models/PointItem.py,sha256=4xxvOqScGcXscok9Nh6ACjDB9KgxKsRczjHhapT5TQI,3144
79
+ PyImageLabeling/old_version/models/ProcessWorker.py,sha256=nG7BDopwBL0l6b1AwpTMP4CHdP4GN8-igP_uBBkQpSg,2172
80
+ PyImageLabeling/old_version/models/ZoomableGraphicsView.py,sha256=DCkrKL1_9JMAxccttVIJPKhq1LlG4Wa5SZCyJrdGWCQ,62072
81
+ PyImageLabeling/old_version/models/tools/ContourTool.py,sha256=W9YpLXrqJkcAMa0q27TwOHM0JwfPLls4dhGZdodWJjY,12361
82
+ PyImageLabeling/old_version/models/tools/EraserTool.py,sha256=d3iIO0g0uK34qm-N4rfGLn-ZoT5cGln-alPRfyruCGM,13953
83
+ PyImageLabeling/old_version/models/tools/MagicPenTool.py,sha256=OGcaVNSN2_T6x7ZSpvMIzg2UECa2mzQgkcj3JIPO6JY,7763
84
+ PyImageLabeling/old_version/models/tools/OverlayTool.py,sha256=uGqCQJy5PXxy18V2rthQk2eRPjK1qT9kwOTp9qG2bvc,7816
85
+ PyImageLabeling/old_version/models/tools/PaintTool.py,sha256=jPwkj7xo7-_-XuDhNzZ_JRy8lWitWu_APQKUFhiH190,2666
86
+ PyImageLabeling/old_version/models/tools/PolygonTool.py,sha256=Dqe_uYAV7fxfVr0B9nD1-E43y9lRHKML6jo3PNEfni8,31892
87
+ PyImageLabeling/old_version/models/tools/RectangleTool.py,sha256=Z1Qu0tkTVtxWMsSPqSIDtiXEqU2lPc_YyWIKL3DRoKY,42451
88
+ PyImageLabeling/view/Builder.py,sha256=Q4XgV0_wqvjH7_IzK98RN6Y8qrsnjdWvmJK5NqbgsEM,18340
89
+ PyImageLabeling/view/QBackgroundItem.py,sha256=4aeFPAbz4DCZPihSnK85Ftw8o5U3i_aD1mksGPcKzcU,855
90
+ PyImageLabeling/view/QWidgets.py,sha256=0ZweZ4BIzg7ocb88Wr2KOTf5J86Qsxud3hW42ERCX-0,222
91
+ PyImageLabeling/view/View.py,sha256=FgzSBHI480qWNt38LqoerwiDm75SFbo2m8GBHhXhflE,9487
92
+ PyImageLabeling/view/ZoomableGraphicsView.py,sha256=BHboaxYTzsDHU6nr4HfoNttI3DDQpx-05s_szjgEctk,4722
93
+ PyImageLabeling/view/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
+ pyimagelabeling-1.0.0.dist-info/licenses/LICENCE,sha256=rfPByF7Oks_eGO_XwiX8lP4Yml4bL2bAVmZyKsJr8V4,1092
95
+ pypi/publish_pypi.py,sha256=oXqi5UD3YluJqXntS76RelYR4gxGh-lgRPM_6SSCc0g,518
96
+ pyimagelabeling-1.0.0.dist-info/METADATA,sha256=Rk46XQ54iKAovpYg8oHXI8UxS-nKZK2Mq94E-eyrhVI,3634
97
+ pyimagelabeling-1.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
98
+ pyimagelabeling-1.0.0.dist-info/top_level.txt,sha256=bPs9FEmunqLwhBMWe_Q6-KsR1PzXmJcJ0hWgsDA2mo4,21
99
+ pyimagelabeling-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025, MAIA, CRIL, Univ. Artois and CNRS
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
@@ -0,0 +1,2 @@
1
+ PyImageLabeling
2
+ pypi
pypi/publish_pypi.py ADDED
@@ -0,0 +1,18 @@
1
+ import os
2
+
3
+ # How to build, test and publish on pypi a new version:
4
+ # - Put the good version in the __init__.py file (variable __VERSION__).
5
+ # - This script get the last wheels and publish them on pypi
6
+
7
+ print("Type 'enter' to execute: 'python -m build ..'")
8
+ input()
9
+
10
+ os.system("python3 -m build ..")
11
+ os.system("mv ../dist/* .")
12
+
13
+ print("Type 'enter' to publish the wheels on pypi:")
14
+ input()
15
+ os.system("python3 -m twine upload --skip-existing *.whl")
16
+
17
+ print("Type 'enter' to delete the whell:")
18
+ os.system("rm -rf *.whl")