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.
- PyImageLabeling/__init__.py +22 -0
- PyImageLabeling/config.json +289 -0
- PyImageLabeling/controller/Controller.py +25 -0
- PyImageLabeling/controller/Events.py +147 -0
- PyImageLabeling/controller/FileEvents.py +69 -0
- PyImageLabeling/controller/ImageEvents.py +32 -0
- PyImageLabeling/controller/LabelEvents.py +219 -0
- PyImageLabeling/controller/LabelingEvents.py +123 -0
- PyImageLabeling/controller/settings/ContourFillinSetting.py +93 -0
- PyImageLabeling/controller/settings/CoutourFillingApplyCancel.py +37 -0
- PyImageLabeling/controller/settings/EraserSetting.py +73 -0
- PyImageLabeling/controller/settings/LabelSetting.py +91 -0
- PyImageLabeling/controller/settings/MagicPenSetting.py +125 -0
- PyImageLabeling/controller/settings/OpacitySetting.py +66 -0
- PyImageLabeling/controller/settings/PaintBrushSetting.py +66 -0
- PyImageLabeling/icons/apply.png +0 -0
- PyImageLabeling/icons/asterisk-green.png +0 -0
- PyImageLabeling/icons/asterisk-red.png +0 -0
- PyImageLabeling/icons/back.png +0 -0
- PyImageLabeling/icons/border.png +0 -0
- PyImageLabeling/icons/cancel.png +0 -0
- PyImageLabeling/icons/cleaner.png +0 -0
- PyImageLabeling/icons/close.png +0 -0
- PyImageLabeling/icons/down.png +0 -0
- PyImageLabeling/icons/ellipse.png +0 -0
- PyImageLabeling/icons/eraser.png +0 -0
- PyImageLabeling/icons/filling.png +0 -0
- PyImageLabeling/icons/logoMAIA.png +0 -0
- PyImageLabeling/icons/magic.png +0 -0
- PyImageLabeling/icons/maia.png +0 -0
- PyImageLabeling/icons/maia1.png +0 -0
- PyImageLabeling/icons/maia3.ico +0 -0
- PyImageLabeling/icons/maia_icon.png +0 -0
- PyImageLabeling/icons/move.png +0 -0
- PyImageLabeling/icons/opacity.png +0 -0
- PyImageLabeling/icons/open_image.png +0 -0
- PyImageLabeling/icons/open_layer.png +0 -0
- PyImageLabeling/icons/paint.png +0 -0
- PyImageLabeling/icons/plus.png +0 -0
- PyImageLabeling/icons/polygon.png +0 -0
- PyImageLabeling/icons/rectangle.png +0 -0
- PyImageLabeling/icons/reset.png +0 -0
- PyImageLabeling/icons/save.png +0 -0
- PyImageLabeling/icons/setting.png +0 -0
- PyImageLabeling/icons/transparency.png:Zone.Identifier +4 -0
- PyImageLabeling/icons/up.png +0 -0
- PyImageLabeling/icons/visibility.png +0 -0
- PyImageLabeling/icons/zoom_minus.png +0 -0
- PyImageLabeling/icons/zoom_plus.png +0 -0
- PyImageLabeling/model/Core.py +795 -0
- PyImageLabeling/model/File/Files.py +166 -0
- PyImageLabeling/model/File/NextImage.py +36 -0
- PyImageLabeling/model/File/PreviousImage.py +19 -0
- PyImageLabeling/model/Image/MoveImage.py +32 -0
- PyImageLabeling/model/Image/ResetMoveZoomImage.py +16 -0
- PyImageLabeling/model/Image/ZoomMinus.py +25 -0
- PyImageLabeling/model/Image/ZoomPlus.py +16 -0
- PyImageLabeling/model/Labeling/ClearAll.py +22 -0
- PyImageLabeling/model/Labeling/ContourFilling.py +135 -0
- PyImageLabeling/model/Labeling/Ellipse.py +350 -0
- PyImageLabeling/model/Labeling/Eraser.py +131 -0
- PyImageLabeling/model/Labeling/MagicPen.py +131 -0
- PyImageLabeling/model/Labeling/PaintBrush.py +207 -0
- PyImageLabeling/model/Labeling/Polygon.py +279 -0
- PyImageLabeling/model/Labeling/Rectangle.py +248 -0
- PyImageLabeling/model/Labeling/Undo.py +12 -0
- PyImageLabeling/model/Model.py +40 -0
- PyImageLabeling/model/Utils.py +40 -0
- PyImageLabeling/old_version/label_rectangle_properties.json +6 -0
- PyImageLabeling/old_version/main.py +2073 -0
- PyImageLabeling/old_version/models/EraseSettingsDialog.py +51 -0
- PyImageLabeling/old_version/models/LabeledRectangle.py +80 -0
- PyImageLabeling/old_version/models/MagicSettingsDialog.py +119 -0
- PyImageLabeling/old_version/models/OverlayOpacityDialog.py +63 -0
- PyImageLabeling/old_version/models/PaintSettingsDialog.py +289 -0
- PyImageLabeling/old_version/models/PointItem.py +66 -0
- PyImageLabeling/old_version/models/ProcessWorker.py +52 -0
- PyImageLabeling/old_version/models/ZoomableGraphicsView.py +1214 -0
- PyImageLabeling/old_version/models/tools/ContourTool.py +279 -0
- PyImageLabeling/old_version/models/tools/EraserTool.py +290 -0
- PyImageLabeling/old_version/models/tools/MagicPenTool.py +199 -0
- PyImageLabeling/old_version/models/tools/OverlayTool.py +179 -0
- PyImageLabeling/old_version/models/tools/PaintTool.py +68 -0
- PyImageLabeling/old_version/models/tools/PolygonTool.py +786 -0
- PyImageLabeling/old_version/models/tools/RectangleTool.py +1036 -0
- PyImageLabeling/parameters.json +1 -0
- PyImageLabeling/style.css +611 -0
- PyImageLabeling/view/Builder.py +333 -0
- PyImageLabeling/view/QBackgroundItem.py +30 -0
- PyImageLabeling/view/QWidgets.py +10 -0
- PyImageLabeling/view/View.py +226 -0
- PyImageLabeling/view/ZoomableGraphicsView.py +91 -0
- PyImageLabeling/view/__init__.py +0 -0
- pyimagelabeling-1.0.0.dist-info/METADATA +55 -0
- pyimagelabeling-1.0.0.dist-info/RECORD +99 -0
- pyimagelabeling-1.0.0.dist-info/WHEEL +5 -0
- pyimagelabeling-1.0.0.dist-info/licenses/LICENCE +22 -0
- pyimagelabeling-1.0.0.dist-info/top_level.txt +2 -0
- 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,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
|
+
|
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")
|