diff --git a/examples/example1_labels.json b/examples/example1_labels.json index 4631af5..f188928 100644 --- a/examples/example1_labels.json +++ b/examples/example1_labels.json @@ -14,7 +14,8 @@ "width": 56.0, "y": 119.0, "x": 636.0, - "class": "Face" + "class": "Face", + "unconfirmed": "true" } ], "filename": "image1.jpg" @@ -25,7 +26,8 @@ { "y": 155.0, "x": 409.0, - "class": "mouth" + "class": "mouth", + "unconfirmed": "true" } ], "filename": "image2.jpg", diff --git a/sloth/annotations/model.py b/sloth/annotations/model.py index 3a4fa29..58b98cb 100644 --- a/sloth/annotations/model.py +++ b/sloth/annotations/model.py @@ -33,7 +33,9 @@ class ModelItem: if role == Qt.DisplayRole: return "" if role == Qt.BackgroundRole: - return self.getColor() + c = self.getColor() + if c is not None: + return QBrush(c) if role == ItemRole: return self else: @@ -194,7 +196,7 @@ class KeyValueModelItem(ModelItem, MutableMapping): ModelItem.__init__(self) self._dict = {} self._items = {} - self._hidden = hidden + [None, 'class', 'unlabeled'] + self._hidden = hidden + [None, 'class', 'unlabeled', 'unconfirmed'] # dummy key/value so that pyqt does not convert the dict # into a QVariantMap while communicating with the Views self._dict[None] = None @@ -253,6 +255,9 @@ class KeyValueModelItem(ModelItem, MutableMapping): def isUnlabeled(self): return 'unlabeled' in self._dict and self._dict['unlabeled'] + def isUnconfirmed(self): + return 'unconfirmed' in self._dict and self._dict['unconfirmed'] + class FileModelItem(KeyValueModelItem): def __init__(self, fileinfo, hidden=['filename']): KeyValueModelItem.__init__(self, hidden=hidden, properties=fileinfo) @@ -267,7 +272,7 @@ class FileModelItem(KeyValueModelItem): def getColor(self): if self.isUnlabeled(): - return QBrush(Qt.red) + return Qt.red return None @staticmethod @@ -343,7 +348,7 @@ class FrameModelItem(ImageModelItem, KeyValueModelItem): def getColor(self): if self.isUnlabeled(): - return QBrush(Qt.red) + return Qt.red return None def getAnnotations(self): @@ -364,12 +369,19 @@ class AnnotationModelItem(KeyValueModelItem): if role == Qt.DisplayRole: if column == 0: return self['class'] + elif column == 1 and self.isUnconfirmed(): + return '[unconfirmed]' else: return "" elif role == DataRole: return self._annotation return ModelItem.data(self, role, column) + def getColor(self): + if self.isUnconfirmed(): + return Qt.red + return None + class KeyValueRowModelItem(ModelItem): def __init__(self, key): ModelItem.__init__(self) diff --git a/sloth/items/items.py b/sloth/items/items.py index eaa835d..bab6e9c 100644 --- a/sloth/items/items.py +++ b/sloth/items/items.py @@ -22,7 +22,12 @@ class BaseItem(QAbstractGraphicsShapeItem): QGraphicsItem.ItemIsMovable | \ QGraphicsItem.ItemSendsGeometryChanges | \ QGraphicsItem.ItemSendsScenePositionChanges) - self.setColor(Qt.yellow) + if model_item is not None: + c = model_item.getColor() + if c is not None: + self.setColor(c) + else: + self.setColor(Qt.yellow) self._model_item = model_item