mirror of
https://github.com/wassname/sloth.git
synced 2026-07-12 11:59:49 +08:00
pep8
This commit is contained in:
+46
-31
@@ -2,24 +2,28 @@ from PyQt4.QtGui import *
|
||||
from PyQt4.Qt import *
|
||||
import math
|
||||
|
||||
|
||||
class ItemInserter(QObject):
|
||||
"""
|
||||
The base class for all item insertion handlers.
|
||||
"""
|
||||
# Signals
|
||||
annotationFinished = pyqtSignal()
|
||||
inserterFinished = pyqtSignal()
|
||||
inserterFinished = pyqtSignal()
|
||||
|
||||
def __init__(self, labeltool, scene, default_properties=None, prefix="", commit=True):
|
||||
def __init__(self, labeltool, scene, default_properties={},
|
||||
prefix="", commit=True):
|
||||
QObject.__init__(self)
|
||||
self._labeltool = labeltool
|
||||
self._scene = scene
|
||||
self._default_properties = default_properties if default_properties is not None else {}
|
||||
self._prefix = prefix
|
||||
self._ann = {}
|
||||
self._commit = commit
|
||||
self._item = None
|
||||
self._pen = Qt.red
|
||||
self._labeltool = labeltool
|
||||
self._scene = scene
|
||||
self._default_properties = default_properties
|
||||
if self._default_properties is None:
|
||||
self._default_properties = {}
|
||||
self._prefix = prefix
|
||||
self._ann = {}
|
||||
self._commit = commit
|
||||
self._item = None
|
||||
self._pen = Qt.red
|
||||
|
||||
def annotation(self):
|
||||
return self._ann
|
||||
@@ -57,6 +61,7 @@ class ItemInserter(QObject):
|
||||
def abort(self):
|
||||
self.inserterFinished.emit()
|
||||
|
||||
|
||||
class PointItemInserter(ItemInserter):
|
||||
def mousePressEvent(self, event, image_item):
|
||||
pos = event.scenePos()
|
||||
@@ -66,15 +71,19 @@ class PointItemInserter(ItemInserter):
|
||||
self._ann.update(self._default_properties)
|
||||
if self._commit:
|
||||
image_item.addAnnotation(self._ann)
|
||||
self._item = QGraphicsEllipseItem(QRectF(pos.x()-2, pos.y()-2, 5, 5))
|
||||
self._item = QGraphicsEllipseItem(QRectF(pos.x() - 2,
|
||||
pos.y() - 2, 5, 5))
|
||||
self._item.setPen(self.pen())
|
||||
self.annotationFinished.emit()
|
||||
event.accept()
|
||||
|
||||
|
||||
class RectItemInserter(ItemInserter):
|
||||
def __init__(self, labeltool, scene, default_properties=None, prefix="", commit=True):
|
||||
ItemInserter.__init__(self, labeltool, scene, default_properties, prefix, commit)
|
||||
self._init_pos = None
|
||||
def __init__(self, labeltool, scene, default_properties={},
|
||||
prefix="", commit=True):
|
||||
ItemInserter.__init__(self, labeltool, scene, default_properties,
|
||||
prefix, commit)
|
||||
self._init_pos = None
|
||||
|
||||
def mousePressEvent(self, event, image_item):
|
||||
pos = event.scenePos()
|
||||
@@ -120,36 +129,41 @@ class RectItemInserter(ItemInserter):
|
||||
self._init_pos = None
|
||||
ItemInserter.abort(self)
|
||||
|
||||
|
||||
class FixedRatioRectItemInserter(RectItemInserter):
|
||||
def __init__(self, labeltool, scene, default_properties=None, prefix="", commit=True):
|
||||
RectItemInserter.__init__(self, labeltool, scene, default_properties, prefix, commit)
|
||||
self._ratio = 1
|
||||
if default_properties is not None:
|
||||
self._ratio = float(default_properties.get('_ratio', 1))
|
||||
def __init__(self, labeltool, scene, default_properties={},
|
||||
prefix="", commit=True):
|
||||
RectItemInserter.__init__(self, labeltool, scene, default_properties,
|
||||
prefix, commit)
|
||||
self._ratio = float(default_properties.get('_ratio', 1))
|
||||
|
||||
def mouseMoveEvent(self, event, image_item):
|
||||
if self._current_item is not None:
|
||||
new_geometry = QRectF(self._current_item.rect().topLeft(), event.scenePos())
|
||||
new_geometry = QRectF(self._current_item.rect().topLeft(),
|
||||
event.scenePos())
|
||||
dx = new_geometry.width()
|
||||
dy = new_geometry.height()
|
||||
d = math.sqrt(dx*dx + dy*dy)
|
||||
d = math.sqrt(dx * dx + dy * dy)
|
||||
r = self._ratio
|
||||
k = math.sqrt(r*r+1)
|
||||
h = d/k
|
||||
w = d*r/k
|
||||
k = math.sqrt(r * r + 1)
|
||||
h = d / k
|
||||
w = d * r / k
|
||||
new_geometry.setWidth(w)
|
||||
new_geometry.setHeight(h)
|
||||
self._current_item.setRect(new_geometry.normalized())
|
||||
|
||||
event.accept()
|
||||
|
||||
|
||||
class SequenceItemInserter(ItemInserter):
|
||||
inserters = []
|
||||
|
||||
def __init__(self, labeltool, scene, default_properties=None, prefix="", commit=True):
|
||||
ItemInserter.__init__(self, labeltool, scene, default_properties, prefix, commit)
|
||||
self._items = []
|
||||
self._state = 0
|
||||
def __init__(self, labeltool, scene, default_properties={},
|
||||
prefix="", commit=True):
|
||||
ItemInserter.__init__(self, labeltool, scene, default_properties,
|
||||
prefix, commit)
|
||||
self._items = []
|
||||
self._state = 0
|
||||
self._current_inserter = None
|
||||
self._current_image_item = None
|
||||
|
||||
@@ -171,8 +185,7 @@ class SequenceItemInserter(ItemInserter):
|
||||
next_state = self._state + 1
|
||||
|
||||
if self._current_inserter is not None:
|
||||
if self._current_inserter is not None:
|
||||
self.updateAnnotation(self._current_inserter.annotation())
|
||||
self.updateAnnotation(self._current_inserter.annotation())
|
||||
item = self._current_inserter.item()
|
||||
if item is not None:
|
||||
self._scene.addItem(item)
|
||||
@@ -189,7 +202,8 @@ class SequenceItemInserter(ItemInserter):
|
||||
next_state = 0
|
||||
|
||||
callable_, prefix, message = self.inserters[next_state]
|
||||
self._current_inserter = callable_(self._labeltool, self._scene, prefix=prefix, commit=False)
|
||||
self._current_inserter = callable_(self._labeltool, self._scene,
|
||||
prefix=prefix, commit=False)
|
||||
self._current_inserter.annotationFinished.connect(self.nextState)
|
||||
if message:
|
||||
self._scene.setMessage(message)
|
||||
@@ -217,6 +231,7 @@ class SequenceItemInserter(ItemInserter):
|
||||
self._cleanup()
|
||||
self.inserterFinished.emit()
|
||||
|
||||
|
||||
class BBoxFaceInserter(SequenceItemInserter):
|
||||
inserters = [
|
||||
(RectItemInserter, "bbox", "Labelling bounding box"),
|
||||
|
||||
+23
-8
@@ -4,12 +4,15 @@ from PyQt4.Qt import *
|
||||
import logging
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class IgnorePrefix:
|
||||
def __init__(self, value):
|
||||
self.value = value
|
||||
|
||||
def __str__(self):
|
||||
return self.value
|
||||
|
||||
|
||||
class BaseItem(QAbstractGraphicsShapeItem):
|
||||
"""
|
||||
Base class for visualization items.
|
||||
@@ -29,9 +32,9 @@ class BaseItem(QAbstractGraphicsShapeItem):
|
||||
parent :
|
||||
"""
|
||||
QAbstractGraphicsShapeItem.__init__(self, parent)
|
||||
self.setFlags(QGraphicsItem.ItemIsSelectable | \
|
||||
QGraphicsItem.ItemIsMovable | \
|
||||
QGraphicsItem.ItemSendsGeometryChanges | \
|
||||
self.setFlags(QGraphicsItem.ItemIsSelectable |
|
||||
QGraphicsItem.ItemIsMovable |
|
||||
QGraphicsItem.ItemSendsGeometryChanges |
|
||||
QGraphicsItem.ItemSendsScenePositionChanges)
|
||||
|
||||
self._model_item = model_item
|
||||
@@ -45,6 +48,7 @@ class BaseItem(QAbstractGraphicsShapeItem):
|
||||
self._text = ""
|
||||
self._text_bg_brush = None
|
||||
self._auto_text_keys = self.defaultAutoTextKeys[:]
|
||||
self._valid = True
|
||||
|
||||
def changeColor(self):
|
||||
if self._model_item is not None:
|
||||
@@ -190,7 +194,8 @@ class BaseItem(QAbstractGraphicsShapeItem):
|
||||
nextindex = 0
|
||||
else:
|
||||
try:
|
||||
nextindex = (valuelist.index(oldvalue)+1) % len(valuelist)
|
||||
nextindex = valuelist.index(oldvalue) + 1
|
||||
nextindex %= len(valuelist)
|
||||
except ValueError:
|
||||
nextindex = 0
|
||||
newvalue = valuelist[nextindex]
|
||||
@@ -296,7 +301,8 @@ class RectItem(BaseItem):
|
||||
self._resize_start_rect = None
|
||||
|
||||
self._updateRect(self._dataToRect(self._model_item))
|
||||
LOG.debug("Constructed rect %s for model item %s" % (self._rect, model_item))
|
||||
LOG.debug("Constructed rect %s for model item %s" %
|
||||
(self._rect, model_item))
|
||||
|
||||
def __call__(self, model_item=None, parent=None):
|
||||
item = RectItem(model_item, parent)
|
||||
@@ -365,7 +371,9 @@ class RectItem(BaseItem):
|
||||
def mouseMoveEvent(self, event):
|
||||
if self._resize:
|
||||
diff = event.scenePos() - self._resize_start
|
||||
rect = QRectF(self._resize_start_rect.topLeft(), self._resize_start_rect.bottomRight() + diff).normalized()
|
||||
tl = self._resize_start_rect.topLeft()
|
||||
br = self._resize_start_rect.bottomRight()
|
||||
rect = QRectF(tl, br + diff).normalized()
|
||||
self._updateRect(rect)
|
||||
self.updateModel()
|
||||
event.accept()
|
||||
@@ -398,6 +406,7 @@ class RectItem(BaseItem):
|
||||
self.updateModel()
|
||||
event.accept()
|
||||
|
||||
|
||||
class GroupItem(BaseItem):
|
||||
items = []
|
||||
|
||||
@@ -421,6 +430,7 @@ class GroupItem(BaseItem):
|
||||
def boundingRect(self):
|
||||
return self.childrenBoundingRect()
|
||||
|
||||
|
||||
class OccludablePointItem(PointItem):
|
||||
cycleValuesOnKeypress = {
|
||||
'o': ('occluded', [True, False])
|
||||
@@ -440,6 +450,7 @@ class OccludablePointItem(PointItem):
|
||||
occluded = self._model_item[key]
|
||||
self.setColor(Qt.red if occluded else Qt.yellow)
|
||||
|
||||
|
||||
class IDRectItem(RectItem):
|
||||
cycleValuesOnKeypress = dict(
|
||||
[('i', (IgnorePrefix('id'), range(10)))] +
|
||||
@@ -447,6 +458,7 @@ class IDRectItem(RectItem):
|
||||
)
|
||||
defaultAutoTextKeys = ['id']
|
||||
|
||||
|
||||
class BBoxFaceItem(GroupItem):
|
||||
items = [
|
||||
(IDRectItem, "bbox"),
|
||||
@@ -455,6 +467,7 @@ class BBoxFaceItem(GroupItem):
|
||||
(OccludablePointItem, "mc"),
|
||||
]
|
||||
|
||||
|
||||
class ControlItem(QGraphicsItem):
|
||||
def __init__(self, parent=None):
|
||||
QGraphicsItem.__init__(self, parent)
|
||||
@@ -467,6 +480,7 @@ class ControlItem(QGraphicsItem):
|
||||
color.setAlpha(200)
|
||||
painter.fillRect(self.boundingRect(), color)
|
||||
|
||||
|
||||
class NPointFacePointItem(QGraphicsEllipseItem):
|
||||
def __init__(self, landmark, *args, **kwargs):
|
||||
self._landmark = landmark
|
||||
@@ -489,6 +503,7 @@ class NPointFacePointItem(QGraphicsEllipseItem):
|
||||
self.setPen(color)
|
||||
self.update()
|
||||
|
||||
|
||||
class NPointFaceItem(GroupItem):
|
||||
items = [
|
||||
(OccludablePointItem, "leoc"),
|
||||
@@ -506,7 +521,8 @@ class NPointFaceItem(GroupItem):
|
||||
|
||||
def createChildren(self):
|
||||
for callable_, prefix in self.items:
|
||||
if prefix + 'x' in self._model_item and prefix + 'y' in self._model_item:
|
||||
if prefix + 'x' in self._model_item and \
|
||||
prefix + 'y' in self._model_item:
|
||||
child = callable_(self._model_item, prefix, self)
|
||||
self._children.append(child)
|
||||
|
||||
@@ -523,4 +539,3 @@ class NPointFaceItem(GroupItem):
|
||||
pen.setStyle(Qt.DashLine)
|
||||
painter.setPen(pen)
|
||||
painter.drawRect(self.boundingRect())
|
||||
|
||||
|
||||
Reference in New Issue
Block a user