|
@@ -18,6 +18,7 @@ from qtpy import QtWidgets
|
|
from labelme import __appname__
|
|
from labelme import __appname__
|
|
from labelme import PY2
|
|
from labelme import PY2
|
|
|
|
|
|
|
|
+from . import ai
|
|
from . import utils
|
|
from . import utils
|
|
from labelme.config import get_config
|
|
from labelme.config import get_config
|
|
from labelme.label_file import LabelFile
|
|
from labelme.label_file import LabelFile
|
|
@@ -367,6 +368,14 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
self.tr("Start drawing linestrip. Ctrl+LeftClick ends creation."),
|
|
self.tr("Start drawing linestrip. Ctrl+LeftClick ends creation."),
|
|
enabled=False,
|
|
enabled=False,
|
|
)
|
|
)
|
|
|
|
+ createAiPolygonMode = action(
|
|
|
|
+ self.tr("Create AI-Polygon"),
|
|
|
|
+ lambda: self.toggleDrawMode(False, createMode="ai_polygon"),
|
|
|
|
+ None,
|
|
|
|
+ "objects",
|
|
|
|
+ self.tr("Start drawing ai_polygon. Ctrl+LeftClick ends creation."),
|
|
|
|
+ enabled=False,
|
|
|
|
+ )
|
|
editMode = action(
|
|
editMode = action(
|
|
self.tr("Edit Polygons"),
|
|
self.tr("Edit Polygons"),
|
|
self.setEditMode,
|
|
self.setEditMode,
|
|
@@ -603,6 +612,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
createLineMode=createLineMode,
|
|
createLineMode=createLineMode,
|
|
createPointMode=createPointMode,
|
|
createPointMode=createPointMode,
|
|
createLineStripMode=createLineStripMode,
|
|
createLineStripMode=createLineStripMode,
|
|
|
|
+ createAiPolygonMode=createAiPolygonMode,
|
|
zoom=zoom,
|
|
zoom=zoom,
|
|
zoomIn=zoomIn,
|
|
zoomIn=zoomIn,
|
|
zoomOut=zoomOut,
|
|
zoomOut=zoomOut,
|
|
@@ -637,6 +647,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
createLineMode,
|
|
createLineMode,
|
|
createPointMode,
|
|
createPointMode,
|
|
createLineStripMode,
|
|
createLineStripMode,
|
|
|
|
+ createAiPolygonMode,
|
|
editMode,
|
|
editMode,
|
|
edit,
|
|
edit,
|
|
duplicate,
|
|
duplicate,
|
|
@@ -655,6 +666,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
createLineMode,
|
|
createLineMode,
|
|
createPointMode,
|
|
createPointMode,
|
|
createLineStripMode,
|
|
createLineStripMode,
|
|
|
|
+ createAiPolygonMode,
|
|
editMode,
|
|
editMode,
|
|
brightnessContrast,
|
|
brightnessContrast,
|
|
),
|
|
),
|
|
@@ -817,6 +829,12 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
# if self.firstStart:
|
|
# if self.firstStart:
|
|
# QWhatsThis.enterWhatsThisMode()
|
|
# QWhatsThis.enterWhatsThisMode()
|
|
|
|
|
|
|
|
+ @property
|
|
|
|
+ def _ai_model(self):
|
|
|
|
+ if not hasattr(self, "_ai_model_initialized"):
|
|
|
|
+ self._ai_model_initialized = ai.SegmentAnythingModel()
|
|
|
|
+ return self._ai_model_initialized
|
|
|
|
+
|
|
def menu(self, title, actions=None):
|
|
def menu(self, title, actions=None):
|
|
menu = self.menuBar().addMenu(title)
|
|
menu = self.menuBar().addMenu(title)
|
|
if actions:
|
|
if actions:
|
|
@@ -852,6 +870,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
self.actions.createLineMode,
|
|
self.actions.createLineMode,
|
|
self.actions.createPointMode,
|
|
self.actions.createPointMode,
|
|
self.actions.createLineStripMode,
|
|
self.actions.createLineStripMode,
|
|
|
|
+ self.actions.createAiPolygonMode,
|
|
self.actions.editMode,
|
|
self.actions.editMode,
|
|
)
|
|
)
|
|
utils.addActions(self.menus.edit, actions + self.actions.editMenu)
|
|
utils.addActions(self.menus.edit, actions + self.actions.editMenu)
|
|
@@ -883,6 +902,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
self.actions.createLineMode.setEnabled(True)
|
|
self.actions.createLineMode.setEnabled(True)
|
|
self.actions.createPointMode.setEnabled(True)
|
|
self.actions.createPointMode.setEnabled(True)
|
|
self.actions.createLineStripMode.setEnabled(True)
|
|
self.actions.createLineStripMode.setEnabled(True)
|
|
|
|
+ self.actions.createAiPolygonMode.setEnabled(True)
|
|
title = __appname__
|
|
title = __appname__
|
|
if self.filename is not None:
|
|
if self.filename is not None:
|
|
title = "{} - {}".format(title, self.filename)
|
|
title = "{} - {}".format(title, self.filename)
|
|
@@ -953,6 +973,13 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
def toggleDrawMode(self, edit=True, createMode="polygon"):
|
|
def toggleDrawMode(self, edit=True, createMode="polygon"):
|
|
self.canvas.setEditing(edit)
|
|
self.canvas.setEditing(edit)
|
|
self.canvas.createMode = createMode
|
|
self.canvas.createMode = createMode
|
|
|
|
+ if createMode == "ai_polygon":
|
|
|
|
+ self._ai_model.set_image(utils.img_data_to_arr(self.imageData))
|
|
|
|
+ self.canvas.setAiCallback(
|
|
|
|
+ self._ai_model.points_to_polygon_callback
|
|
|
|
+ )
|
|
|
|
+ else:
|
|
|
|
+ self.canvas.setAiCallback(None)
|
|
if edit:
|
|
if edit:
|
|
self.actions.createMode.setEnabled(True)
|
|
self.actions.createMode.setEnabled(True)
|
|
self.actions.createRectangleMode.setEnabled(True)
|
|
self.actions.createRectangleMode.setEnabled(True)
|
|
@@ -960,6 +987,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
self.actions.createLineMode.setEnabled(True)
|
|
self.actions.createLineMode.setEnabled(True)
|
|
self.actions.createPointMode.setEnabled(True)
|
|
self.actions.createPointMode.setEnabled(True)
|
|
self.actions.createLineStripMode.setEnabled(True)
|
|
self.actions.createLineStripMode.setEnabled(True)
|
|
|
|
+ self.actions.createAiPolygonMode.setEnabled(True)
|
|
else:
|
|
else:
|
|
if createMode == "polygon":
|
|
if createMode == "polygon":
|
|
self.actions.createMode.setEnabled(False)
|
|
self.actions.createMode.setEnabled(False)
|
|
@@ -968,6 +996,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
self.actions.createLineMode.setEnabled(True)
|
|
self.actions.createLineMode.setEnabled(True)
|
|
self.actions.createPointMode.setEnabled(True)
|
|
self.actions.createPointMode.setEnabled(True)
|
|
self.actions.createLineStripMode.setEnabled(True)
|
|
self.actions.createLineStripMode.setEnabled(True)
|
|
|
|
+ self.actions.createAiPolygonMode.setEnabled(True)
|
|
elif createMode == "rectangle":
|
|
elif createMode == "rectangle":
|
|
self.actions.createMode.setEnabled(True)
|
|
self.actions.createMode.setEnabled(True)
|
|
self.actions.createRectangleMode.setEnabled(False)
|
|
self.actions.createRectangleMode.setEnabled(False)
|
|
@@ -975,6 +1004,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
self.actions.createLineMode.setEnabled(True)
|
|
self.actions.createLineMode.setEnabled(True)
|
|
self.actions.createPointMode.setEnabled(True)
|
|
self.actions.createPointMode.setEnabled(True)
|
|
self.actions.createLineStripMode.setEnabled(True)
|
|
self.actions.createLineStripMode.setEnabled(True)
|
|
|
|
+ self.actions.createAiPolygonMode.setEnabled(True)
|
|
elif createMode == "line":
|
|
elif createMode == "line":
|
|
self.actions.createMode.setEnabled(True)
|
|
self.actions.createMode.setEnabled(True)
|
|
self.actions.createRectangleMode.setEnabled(True)
|
|
self.actions.createRectangleMode.setEnabled(True)
|
|
@@ -982,6 +1012,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
self.actions.createLineMode.setEnabled(False)
|
|
self.actions.createLineMode.setEnabled(False)
|
|
self.actions.createPointMode.setEnabled(True)
|
|
self.actions.createPointMode.setEnabled(True)
|
|
self.actions.createLineStripMode.setEnabled(True)
|
|
self.actions.createLineStripMode.setEnabled(True)
|
|
|
|
+ self.actions.createAiPolygonMode.setEnabled(True)
|
|
elif createMode == "point":
|
|
elif createMode == "point":
|
|
self.actions.createMode.setEnabled(True)
|
|
self.actions.createMode.setEnabled(True)
|
|
self.actions.createRectangleMode.setEnabled(True)
|
|
self.actions.createRectangleMode.setEnabled(True)
|
|
@@ -989,6 +1020,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
self.actions.createLineMode.setEnabled(True)
|
|
self.actions.createLineMode.setEnabled(True)
|
|
self.actions.createPointMode.setEnabled(False)
|
|
self.actions.createPointMode.setEnabled(False)
|
|
self.actions.createLineStripMode.setEnabled(True)
|
|
self.actions.createLineStripMode.setEnabled(True)
|
|
|
|
+ self.actions.createAiPolygonMode.setEnabled(True)
|
|
elif createMode == "circle":
|
|
elif createMode == "circle":
|
|
self.actions.createMode.setEnabled(True)
|
|
self.actions.createMode.setEnabled(True)
|
|
self.actions.createRectangleMode.setEnabled(True)
|
|
self.actions.createRectangleMode.setEnabled(True)
|
|
@@ -996,6 +1028,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
self.actions.createLineMode.setEnabled(True)
|
|
self.actions.createLineMode.setEnabled(True)
|
|
self.actions.createPointMode.setEnabled(True)
|
|
self.actions.createPointMode.setEnabled(True)
|
|
self.actions.createLineStripMode.setEnabled(True)
|
|
self.actions.createLineStripMode.setEnabled(True)
|
|
|
|
+ self.actions.createAiPolygonMode.setEnabled(True)
|
|
elif createMode == "linestrip":
|
|
elif createMode == "linestrip":
|
|
self.actions.createMode.setEnabled(True)
|
|
self.actions.createMode.setEnabled(True)
|
|
self.actions.createRectangleMode.setEnabled(True)
|
|
self.actions.createRectangleMode.setEnabled(True)
|
|
@@ -1003,6 +1036,15 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
self.actions.createLineMode.setEnabled(True)
|
|
self.actions.createLineMode.setEnabled(True)
|
|
self.actions.createPointMode.setEnabled(True)
|
|
self.actions.createPointMode.setEnabled(True)
|
|
self.actions.createLineStripMode.setEnabled(False)
|
|
self.actions.createLineStripMode.setEnabled(False)
|
|
|
|
+ self.actions.createAiPolygonMode.setEnabled(True)
|
|
|
|
+ elif createMode == "ai_polygon":
|
|
|
|
+ self.actions.createMode.setEnabled(True)
|
|
|
|
+ self.actions.createRectangleMode.setEnabled(True)
|
|
|
|
+ self.actions.createCircleMode.setEnabled(True)
|
|
|
|
+ self.actions.createLineMode.setEnabled(True)
|
|
|
|
+ self.actions.createPointMode.setEnabled(True)
|
|
|
|
+ self.actions.createLineStripMode.setEnabled(True)
|
|
|
|
+ self.actions.createAiPolygonMode.setEnabled(False)
|
|
else:
|
|
else:
|
|
raise ValueError("Unsupported createMode: %s" % createMode)
|
|
raise ValueError("Unsupported createMode: %s" % createMode)
|
|
self.actions.editMode.setEnabled(not edit)
|
|
self.actions.editMode.setEnabled(not edit)
|