From e0de26c775027770b18ed1f46d67361aea53ace5 Mon Sep 17 00:00:00 2001 From: Marius Cordts Date: Thu, 9 Jun 2016 16:23:25 +0200 Subject: [PATCH] added cityscapesLabelTool --- .gitignore | 3 + README.md | 1 + scripts/annotation/cityscapesLabelTool.py | 2777 +++++++++++++++++ scripts/annotation/icons/back.png | Bin 0 -> 6124 bytes scripts/annotation/icons/checked6.png | Bin 0 -> 12493 bytes scripts/annotation/icons/checked6_red.png | Bin 0 -> 1050910 bytes scripts/annotation/icons/clearpolygon.png | Bin 0 -> 1050910 bytes scripts/annotation/icons/deleteobject.png | Bin 0 -> 1050910 bytes scripts/annotation/icons/exit.png | Bin 0 -> 3391 bytes scripts/annotation/icons/filepath.png | Bin 0 -> 14178 bytes scripts/annotation/icons/help19.png | Bin 0 -> 13163 bytes scripts/annotation/icons/highlight.png | Bin 0 -> 11772 bytes scripts/annotation/icons/layerdown.png | Bin 0 -> 1050910 bytes scripts/annotation/icons/layerup.png | Bin 0 -> 1050910 bytes scripts/annotation/icons/minus.png | Bin 0 -> 2355 bytes scripts/annotation/icons/modify.png | Bin 0 -> 9477 bytes scripts/annotation/icons/newobject.png | Bin 0 -> 1050910 bytes scripts/annotation/icons/next.png | Bin 0 -> 1050910 bytes scripts/annotation/icons/open.png | Bin 0 -> 4992 bytes scripts/annotation/icons/play.png | Bin 0 -> 10655 bytes scripts/annotation/icons/plus.png | Bin 0 -> 4004 bytes scripts/annotation/icons/save.png | Bin 0 -> 2739 bytes scripts/annotation/icons/screenshot.png | Bin 0 -> 9938 bytes scripts/annotation/icons/screenshotToggle.png | Bin 0 -> 1050910 bytes scripts/annotation/icons/shuffle.png | Bin 0 -> 6454 bytes scripts/annotation/icons/undo.png | Bin 0 -> 5765 bytes scripts/annotation/icons/zoom.png | Bin 0 -> 12237 bytes scripts/helpers/annotation.py | 91 +- 28 files changed, 2869 insertions(+), 3 deletions(-) create mode 100755 scripts/annotation/cityscapesLabelTool.py create mode 100644 scripts/annotation/icons/back.png create mode 100644 scripts/annotation/icons/checked6.png create mode 100644 scripts/annotation/icons/checked6_red.png create mode 100644 scripts/annotation/icons/clearpolygon.png create mode 100644 scripts/annotation/icons/deleteobject.png create mode 100644 scripts/annotation/icons/exit.png create mode 100644 scripts/annotation/icons/filepath.png create mode 100644 scripts/annotation/icons/help19.png create mode 100644 scripts/annotation/icons/highlight.png create mode 100644 scripts/annotation/icons/layerdown.png create mode 100644 scripts/annotation/icons/layerup.png create mode 100644 scripts/annotation/icons/minus.png create mode 100644 scripts/annotation/icons/modify.png create mode 100644 scripts/annotation/icons/newobject.png create mode 100644 scripts/annotation/icons/next.png create mode 100644 scripts/annotation/icons/open.png create mode 100644 scripts/annotation/icons/play.png create mode 100644 scripts/annotation/icons/plus.png create mode 100644 scripts/annotation/icons/save.png create mode 100644 scripts/annotation/icons/screenshot.png create mode 100644 scripts/annotation/icons/screenshotToggle.png create mode 100644 scripts/annotation/icons/shuffle.png create mode 100644 scripts/annotation/icons/undo.png create mode 100644 scripts/annotation/icons/zoom.png diff --git a/.gitignore b/.gitignore index 6b4ec62..14de350 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,6 @@ target/ # JSON files *.json + +# configuration files +cityscapesLabelTool.conf diff --git a/README.md b/README.md index 5cd715d..4d12706 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,7 @@ There are several scripts included with the dataset in a folder named `scripts` - `viewer` view the images and the annotations - `preparation` convert the ground truth annotations into a format suitable for your approach - `evaluation` validate your approach + - `annotation` the annotation tool used for labeling the dataset Note that all files have a small documentation at the top. Most important files diff --git a/scripts/annotation/cityscapesLabelTool.py b/scripts/annotation/cityscapesLabelTool.py new file mode 100755 index 0000000..15061c9 --- /dev/null +++ b/scripts/annotation/cityscapesLabelTool.py @@ -0,0 +1,2777 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + + +################# +## Import modules +################# + +# pyqt for everything graphical +from PyQt4 import QtGui, QtCore +# get command line parameters +import sys +# walk directories +import glob +# access to OS functionality +import os +# (de)serialize config file +import json +# call processes +import subprocess +# get the user name +import getpass +# xml parsing +import xml.etree.ElementTree as ET +# copy text to clipboard +from Tkinter import Tk +# copy stuff +import copy + +################# +## Helper classes +################# + +# annotation helper +sys.path.append( os.path.normpath( os.path.join( os.path.dirname( __file__ ) , '..' , 'helpers' ) ) ) +from annotation import Point, Annotation, CsObject +from labels import name2label, assureSingleInstanceName + +# Helper class that contains the current configuration of the Gui +# This config is loaded when started and saved when leaving +class configuration: + # Constructor + def __init__(self): + # The filename of the image we currently working on + self.currentFile = "" + # The filename of the labels we currently working on + self.currentLabelFile = "" + # The filename of the corrections we currently working on + self.currentCorrectionFile = "" + # The path where the Cityscapes dataset is located + self.csPath = "" + # The path of the images of the currently loaded city + self.city = "" + # The name of the currently loaded city + self.cityName = "" + # The type of the current annotations + self.gtType = "" + # The split, where the currently loaded city belongs to + self.split = "" + # The path of the labels. In this folder we expect a folder for each city + # Within these city folders we expect the label with a filename matching + # the images, except for the extension + self.labelPath = "" + # The path to store correction markings + self.correctionPath = "" + # The transparency of the labels over the image + self.transp = 0.5 + # The zoom toggle + self.zoom = False + # The zoom factor + self.zoomFactor = 1.0 + # The size of the zoom window. Currently there is no setter or getter for that + self.zoomSize = 400 #px + # The highlight toggle + self.highlight = False + # The highlight label + self.highlightLabelSelection = "" + # Screenshot file + self.screenshotFilename = "%i" + # Correction mode + self.correctionMode = False + # Warn before saving that you are overwriting files + self.showSaveWarning = True + + # Load from given filename + def load(self, filename): + if os.path.isfile(filename): + with open(filename, 'r') as f: + jsonText = f.read() + jsonDict = json.loads(jsonText) + for key in jsonDict: + if key in self.__dict__: + self.__dict__[key] = jsonDict[key] + self.fixConsistency() + + # Make sure the config is consistent. + # Automatically called after loading + def fixConsistency(self): + if self.currentFile: + self.currentFile = os.path.normpath(self.currentFile) + if self.currentLabelFile: + self.currentLabelFile = os.path.normpath(self.currentLabelFile) + if self.currentCorrectionFile: + self.currentCorrectionFile = os.path.normpath(self.currentCorrectionFile) + if self.csPath: + self.csPath = os.path.normpath(self.csPath) + if not os.path.isdir(self.csPath): + self.csPath = "" + if self.city: + self.city = os.path.normpath(self.city) + if not os.path.isdir(self.city): + self.city = "" + if self.labelPath: + self.labelPath = os.path.normpath(self.labelPath) + + if self.correctionPath: + self.correctionPath = os.path.normpath(self.correctionPath) + + if self.city: + self.cityName == os.path.basename(self.city) + + if not os.path.isfile(self.currentFile) or os.path.dirname(self.currentFile) != self.city: + self.currentFile = "" + + if not os.path.isfile(self.currentLabelFile) or \ + not os.path.isdir( os.path.join(self.labelPath,self.cityName) ) or \ + os.path.dirname(self.currentLabelFile) != os.path.join(self.labelPath,self.cityName): + self.currentLabelFile = "" + + if not os.path.isfile(self.currentCorrectionFile) or \ + not os.path.isdir( os.path.join(self.correctionPath,self.cityName) ) or \ + os.path.dirname(self.currentCorrectionFile) != os.path.join(self.correctionPath,self.cityName): + self.currentCorrectionFile = "" + + + # Save to given filename (using pickle) + def save(self, filename): + with open(filename, 'w') as f: + f.write(json.dumps(self.__dict__, default=lambda o: o.__dict__, sort_keys=True, indent=4)) + + +def enum(**enums): + return type('Enum', (), enums) + + +class CorrectionBox: + + types = enum(TO_CORRECT=1, TO_REVIEW=2, RESOLVED=3, QUESTION=4) + + def __init__(self, rect=None, annotation=""): + self.type = CorrectionBox.types.TO_CORRECT + self.bbox = rect + self.annotation = annotation + self.selected = False + + return + + def get_colour(self): + if self.type == CorrectionBox.types.TO_CORRECT: + return QtGui.QColor(255,0,0) + elif self.type == CorrectionBox.types.TO_REVIEW: + return QtGui.QColor(255,255,0) + elif self.type == CorrectionBox.types.RESOLVED: + return QtGui.QColor(0,255,0) + elif self.type == CorrectionBox.types.QUESTION: + return QtGui.QColor(0,0,255) + + def select(self): + if not self.selected: + self.selected = True + return + + def unselect(self): + if self.selected: + self.selected = False + return + # Read the information from the given object node in an XML file + # The node must have the tag object and contain all expected fields + def readFromXMLNode(self, correctionNode): + if not correctionNode.tag == 'correction': + return + + typeNode = correctionNode.find('type') + self.type = int(typeNode.text) + annotationNode = correctionNode.find('annotation') + self.annotation = annotationNode.text + bboxNode = correctionNode.find('bbox') + x = float(bboxNode.find('x').text) + y = float(bboxNode.find('y').text) + width = float(bboxNode.find('width').text) + height = float(bboxNode.find('height').text) + self.bbox = QtCore.QRectF(x,y,width,height) + + # Append the information to a node of an XML file + # Creates an object node with all children and appends to the given node + # Usually the given node is the root + def appendToXMLNode(self, node): + + # New object node + correctionNode = ET.SubElement(node,'correction') + correctionNode.tail = "\n" + correctionNode.text = "\n" + + # Name node + typeNode = ET.SubElement(correctionNode,'type') + typeNode.tail = "\n" + typeNode.text = str(int(self.type)) + + # Deleted node + annotationNode = ET.SubElement(correctionNode,'annotation') + annotationNode.tail = "\n" + annotationNode.text = str(self.annotation) + + # Polygon node + bboxNode = ET.SubElement(correctionNode,'bbox') + bboxNode.text = "\n" + bboxNode.tail = "\n" + + xNode = ET.SubElement(bboxNode,'x') + xNode.tail = "\n" + yNode = ET.SubElement(bboxNode,'y') + yNode.tail = "\n" + xNode.text = str(int(round(self.bbox.x()))) + yNode.text = str(int(round(self.bbox.y()))) + wNode = ET.SubElement(bboxNode,'width') + wNode.tail = "\n" + hNode = ET.SubElement(bboxNode,'height') + hNode.tail = "\n" + wNode.text = str(int(round(self.bbox.width()))) + hNode.text = str(int(round(self.bbox.height()))) + + +################# +## Main GUI class +################# + +# The main class which is a QtGui -> Main Window +class CityscapesLabelTool(QtGui.QMainWindow): + + ############################# + ## Construction / Destruction + ############################# + + # Constructor + def __init__(self): + # Construct base class + super(CityscapesLabelTool, self).__init__() + + # The filename of where the config is saved and loaded + configDir = os.path.dirname( __file__ ) + self.configFile = os.path.join( configDir , "cityscapesLabelTool.conf" ) + + # This is the configuration. + self.config = configuration() + self.config.load(self.configFile) + + # for copying text to clipboard + self.tk = Tk() + + # Other member variables + + # The width that we actually use to show the image + self.w = 0 + # The height that we actually use to show the image + self.h = 0 + # The horizontal offset where we start drawing within the widget + self.xoff = 0 + # The vertical offset where we start drawing withing the widget + self.yoff = 0 + # A gap that we leave around the image as little border + self.bordergap = 20 + # The scale that was used, ie + # self.w = self.scale * self.image.width() + # self.h = self.scale * self.image.height() + self.scale = 1.0 + # Filenames of all images in current city + self.images = [] + # Image extension + self.imageExt = "_leftImg8bit.png" + # Ground truth extension + self.gtExt = "{}_polygons.json" + # Current image as QImage + self.image = QtGui.QImage() + # Index of the current image within the city folder + self.idx = 0 + # All annotated objects in current image + self.annotation = None + # The XML ElementTree representing the corrections for the current image + self.correctionXML = None + # A list of changes that we did on the current annotation + # Each change is simply a descriptive string + self.changes = [] + # The current object the mouse points to. It's index in self.annotation.objects + self.mouseObj = -1 + # The currently selected objects. Their index in self.annotation.objects + self.selObjs = [] + # The objects that are highlighted. List of object instances + self.highlightObjs = [] + # A label that is selected for highlighting + self.highlightObjLabel = None + # Texture for highlighting + self.highlightTexture = None + # The position of the mouse + self.mousePos = None + # TODO: NEEDS BETTER EXPLANATION/ORGANISATION + self.mousePosOrig = None + # The position of the mouse scaled to label coordinates + self.mousePosScaled = None + # If the mouse is outside of the image + self.mouseOutsideImage = True + # The position of the mouse upon enabling the zoom window + self.mousePosOnZoom = None + # The button state of the mouse + self.mouseButtons = 0 + # A list of objects with changed layer + self.changedLayer = [] + # A list of objects with changed polygon + self.changedPolygon = [] + # A polygon that is drawn by the user + self.drawPoly = QtGui.QPolygonF() + # Treat the polygon as being closed + self.drawPolyClosed = False + # A point of this poly that is dragged + self.draggedPt = -1 + # A list of toolbar actions that need an image + self.actImage = [] + # A list of toolbar actions that need an image that is not the first + self.actImageNotFirst = [] + # A list of toolbar actions that need an image that is not the last + self.actImageNotLast = [] + # A list of toolbar actions that need changes + self.actChanges = [] + # A list of toolbar actions that need a drawn polygon or selected objects + self.actPolyOrSelObj = [] + # A list of toolbar actions that need a closed drawn polygon + self.actClosedPoly = [] + # A list of toolbar actions that need selected objects + self.actSelObj = [] + # A list of toolbar actions that need a single active selected object + self.singleActSelObj = [] + # Toggle status of auto-doing screenshots + self.screenshotToggleState = False + # Toggle status of the play icon + self.playState = False + # Temporary zero transparency + self.transpTempZero = False + + # Toggle correction mode on and off + self.correctAction = [] + self.corrections = [] + self.selected_correction = -1 + + self.in_progress_bbox = None + self.in_progress_correction = None + self.mousePressEvent = [] + + # Default label + self.defaultLabel = 'static' + if not self.defaultLabel in name2label: + print( 'The {0} label is missing in the internal label definitions.'.format(self.defaultLabel) ) + return + # Last selected label + self.lastLabel = self.defaultLabel + + # Setup the GUI + self.initUI() + + # Initially clear stuff + self.deselectAllObjects() + self.clearPolygon() + self.clearChanges() + + # If we already know a city from the saved config -> load it + self.loadCity() + self.imageChanged() + + # Destructor + def __del__(self): + self.config.save(self.configFile) + + # Construct everything GUI related. Called by constructor + def initUI(self): + # Create a toolbar + self.toolbar = self.addToolBar('Tools') + + # Add the tool buttons + iconDir = os.path.join( os.path.dirname(__file__) , 'icons' ) + + # Loading a new city + loadAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'open.png' )), '&Tools', self) + loadAction.setShortcuts(['o']) + self.setTip( loadAction, 'Open city' ) + loadAction.triggered.connect( self.selectCity ) + self.toolbar.addAction(loadAction) + + # Open previous image + backAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'back.png')), '&Tools', self) + backAction.setShortcut('left') + backAction.setStatusTip('Previous image') + backAction.triggered.connect( self.prevImage ) + self.toolbar.addAction(backAction) + self.actImageNotFirst.append(backAction) + + # Open next image + nextAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'next.png')), '&Tools', self) + nextAction.setShortcut('right') + self.setTip( nextAction, 'Next image' ) + nextAction.triggered.connect( self.nextImage ) + self.toolbar.addAction(nextAction) + self.actImageNotLast.append(nextAction) + + # Play + playAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'play.png')), '&Tools', self) + playAction.setShortcut(' ') + playAction.setCheckable(True) + playAction.setChecked(False) + self.setTip( playAction, 'Play all images' ) + playAction.triggered.connect( self.playImages ) + self.toolbar.addAction(playAction) + self.actImageNotLast.append(playAction) + self.playAction = playAction + + # Select image + selImageAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'shuffle.png' )), '&Tools', self) + selImageAction.setShortcut('i') + self.setTip( selImageAction, 'Select image' ) + selImageAction.triggered.connect( self.selectImage ) + self.toolbar.addAction(selImageAction) + self.actImage.append(selImageAction) + + # Save the current image + saveAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'save.png' )), '&Tools', self) + saveAction.setShortcuts('s') + self.setTip( saveAction,'Save changes' ) + saveAction.triggered.connect( self.save ) + self.toolbar.addAction(saveAction) + self.actChanges.append(saveAction) + + # Clear the currently edited polygon + clearPolAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'clearpolygon.png' )), '&Tools', self) + clearPolAction.setShortcuts(['q','Esc']) + self.setTip( clearPolAction, 'Clear polygon' ) + clearPolAction.triggered.connect( self.clearPolygonAction ) + self.toolbar.addAction(clearPolAction) + self.actPolyOrSelObj.append(clearPolAction) + + # Create new object from drawn polygon + newObjAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'newobject.png' )), '&Tools', self) + newObjAction.setShortcuts(['n']) + self.setTip( newObjAction, 'New object' ) + newObjAction.triggered.connect( self.newObject ) + self.toolbar.addAction(newObjAction) + self.actClosedPoly.append(newObjAction) + + # Delete the currently selected object + deleteObjectAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'deleteobject.png' )), '&Tools', self) + deleteObjectAction.setShortcuts(['d','delete']) + self.setTip( deleteObjectAction, 'Delete object' ) + deleteObjectAction.triggered.connect( self.deleteObject ) + self.toolbar.addAction(deleteObjectAction) + self.actSelObj.append(deleteObjectAction) + + # Undo changes in current image, ie. reload labels from file + undoAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'undo.png' )), '&Tools', self) + undoAction.setShortcuts('u') + self.setTip( undoAction,'Undo all unsaved changes' ) + undoAction.triggered.connect( self.undo ) + self.toolbar.addAction(undoAction) + self.actChanges.append(undoAction) + + # Modify the label of a selected object + labelAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'modify.png' )), '&Tools', self) + labelAction.setShortcuts(['m','l']) + self.setTip( labelAction, 'Modify label' ) + labelAction.triggered.connect( self.modifyLabel ) + self.toolbar.addAction(labelAction) + self.actSelObj.append(labelAction) + + # Move selected object a layer up + layerUpAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'layerup.png' )), '&Tools', self) + layerUpAction.setShortcuts(['Up']) + self.setTip( layerUpAction, 'Move object a layer up' ) + layerUpAction.triggered.connect( self.layerUp ) + self.toolbar.addAction(layerUpAction) + self.singleActSelObj.append(layerUpAction) + + # Move selected object a layer down + layerDownAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'layerdown.png' )), '&Tools', self) + layerDownAction.setShortcuts(['Down']) + self.setTip( layerDownAction, 'Move object a layer down' ) + layerDownAction.triggered.connect( self.layerDown ) + self.toolbar.addAction(layerDownAction) + self.singleActSelObj.append(layerDownAction) + + # Enable/disable zoom. Toggle button + zoomAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'zoom.png' )), '&Tools', self) + zoomAction.setShortcuts(['z']) + zoomAction.setCheckable(True) + zoomAction.setChecked(self.config.zoom) + self.setTip( zoomAction, 'Enable/disable permanent zoom' ) + zoomAction.toggled.connect( self.zoomToggle ) + self.toolbar.addAction(zoomAction) + self.actImage.append(zoomAction) + + # Highlight objects of a certain class + highlightAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'highlight.png' )), '&Tools', self) + highlightAction.setShortcuts(['g']) + highlightAction.setCheckable(True) + highlightAction.setChecked(self.config.highlight) + self.setTip( highlightAction, 'Enable/disable highlight of certain object class' ) + highlightAction.toggled.connect( self.highlightClassToggle ) + self.toolbar.addAction(highlightAction) + self.actImage.append(highlightAction) + + # Decrease transparency + minusAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'minus.png' )), '&Tools', self) + minusAction.setShortcut('-') + self.setTip( minusAction, 'Decrease transparency' ) + minusAction.triggered.connect( self.minus ) + self.toolbar.addAction(minusAction) + + # Increase transparency + plusAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'plus.png' )), '&Tools', self) + plusAction.setShortcut('+') + self.setTip( plusAction, 'Increase transparency' ) + plusAction.triggered.connect( self.plus ) + self.toolbar.addAction(plusAction) + + # Take a screenshot + screenshotAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'screenshot.png' )), '&Tools', self) + screenshotAction.setShortcut('t') + self.setTip( screenshotAction, 'Take a screenshot' ) + screenshotAction.triggered.connect( self.screenshot ) + self.toolbar.addAction(screenshotAction) + self.actImage.append(screenshotAction) + + # Take a screenshot in each loaded frame + screenshotToggleAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'screenshotToggle.png' )), '&Tools', self) + screenshotToggleAction.setShortcut('Ctrl+t') + screenshotToggleAction.setCheckable(True) + screenshotToggleAction.setChecked(False) + self.setTip( screenshotToggleAction, 'Take a screenshot in each loaded frame' ) + screenshotToggleAction.toggled.connect( self.screenshotToggle ) + self.toolbar.addAction(screenshotToggleAction) + self.actImage.append(screenshotToggleAction) + + # Display path to current image in message bar + displayFilepathAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'filepath.png' )), '&Tools', self) + displayFilepathAction.setShortcut('f') + self.setTip( displayFilepathAction, 'Show path to current image' ) + displayFilepathAction.triggered.connect( self.displayFilepath ) + self.toolbar.addAction(displayFilepathAction) + + # Open correction mode + self.correctAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'checked6.png' )), '&Tools', self) + self.correctAction.setShortcut('c') + self.correctAction.setCheckable(True) + self.correctAction.setChecked(self.config.correctionMode) + if self.config.correctionMode: + self.correctAction.setIcon(QtGui.QIcon(os.path.join( iconDir , 'checked6_red.png' ))) + self.setTip( self.correctAction, 'Toggle correction mode' ) + self.correctAction.triggered.connect( self.toggleCorrectionMode ) + self.toolbar.addAction(self.correctAction) + + # Display help message + helpAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'help19.png' )), '&Tools', self) + helpAction.setShortcut('h') + self.setTip( helpAction, 'Help' ) + helpAction.triggered.connect( self.displayHelpMessage ) + self.toolbar.addAction(helpAction) + + # Close the application + exitAction = QtGui.QAction(QtGui.QIcon( os.path.join( iconDir , 'exit.png' )), '&Tools', self) + #exitAction.setShortcuts(['Esc']) + self.setTip( exitAction, 'Exit' ) + exitAction.triggered.connect( self.close ) + self.toolbar.addAction(exitAction) + + # The default text for the status bar + self.defaultStatusbar = 'Ready' + # Create a statusbar. Init with default + self.statusBar().showMessage( self.defaultStatusbar ) + + # Enable mouse move events + self.setMouseTracking(True) + self.toolbar.setMouseTracking(True) + # Open in full screen + screenShape = QtGui.QDesktopWidget().screenGeometry() + self.resize(screenShape.width(), screenShape.height()) + # Set a title + self.applicationTitle = 'Cityscapes Label Tool v1.0' + self.setWindowTitle(self.applicationTitle) + # And show the application + self.show() + + ############################# + ## Toolbar call-backs + ############################# + + # The user pressed "select city" + # The purpose of this method is to set these configuration attributes: + # - self.config.city : path to the folder containing the images to annotate + # - self.config.cityName : name of this folder, i.e. the city + # - self.config.labelPath : path to the folder to store the polygons + # - self.config.correctionPath : path to store the correction boxes in + # - self.config.gtType : type of ground truth, e.g. gtFine or gtCoarse + # - self.config.split : type of split, e.g. train, val, test + # The current implementation uses the environment variable 'CITYSCAPES_DATASET' + # to determine the dataset root folder and search available data within. + # Annotation types are required to start with 'gt', e.g. gtFine or gtCoarse. + # To add your own annotations you could create a folder gtCustom with similar structure. + # + # However, this implementation could be easily changed to a completely different folder structure. + # Just make sure to specify all three paths and a descriptive name as 'cityName'. + # The gtType and split can be left empty. + def selectCity(self): + # Reset the status bar to this message when leaving + restoreMessage = self.statusBar().currentMessage() + + csPath = self.config.csPath + if not csPath or not os.path.isdir(csPath): + if 'CITYSCAPES_DATASET' in os.environ: + csPath = os.environ['CITYSCAPES_DATASET'] + else: + csPath = os.path.join(os.path.dirname(os.path.realpath(__file__)),'..','..') + + availableCities = [] + annotations = sorted( glob.glob( os.path.join( csPath , 'gt*' ) ) ) + annotations = [ os.path.basename(a) for a in annotations ] + splits = [ "train_extra" , "train" , "val" , "test" ] + for gt in annotations: + for split in splits: + cities = glob.glob(os.path.join(csPath, gt, split, '*')) + cities.sort() + availableCities.extend( [ (split,gt,os.path.basename(c)) for c in cities if os.path.isdir(c)] ) + + # List of possible labels + items = [split + ", " + gt + ", " + city for (split,gt,city) in availableCities] + # default + previousItem = self.config.split + ", " + self.config.gtType + ", " + self.config.cityName + default = 0 + if previousItem in items: + default = items.index(previousItem) + + # Specify title + dlgTitle = "Select city" + message = dlgTitle + question = dlgTitle + message = "Select city for editing" + question = "Which city would you like to edit?" + self.statusBar().showMessage(message) + + if items: + + # Create and wait for dialog + (item, ok) = QtGui.QInputDialog.getItem(self, dlgTitle, question, items, default, False) + + # Restore message + self.statusBar().showMessage( restoreMessage ) + + if ok and item: + (split,gt,city) = [ str(i) for i in item.split(', ') ] + self.config.city = os.path.normpath( os.path.join( csPath, "leftImg8bit" , split , city ) ) + self.config.cityName = city + + self.config.labelPath = os.path.normpath( os.path.join( csPath, gt , split , city ) ) + self.config.correctionPath = os.path.normpath( os.path.join( csPath, gt+'_corrections', split , city ) ) + + self.config.gtType = gt + self.config.split = split + + self.deselectAllObjects() + self.clearPolygon() + self.loadCity() + self.imageChanged() + + else: + + warning = "" + warning += "The data was not found. Please:\n\n" + warning += " - make sure the scripts folder is in the Cityscapes root folder\n" + warning += "or\n" + warning += " - set CITYSCAPES_DATASET to the Cityscapes root folder\n" + warning += " e.g. 'export CITYSCAPES_DATASET='\n" + + reply = QtGui.QMessageBox.information(self, "ERROR!", warning, QtGui.QMessageBox.Ok) + if reply == QtGui.QMessageBox.Ok: + sys.exit() + + return + + # Switch to previous image in file list + # Load the image + # Load its labels + # Update the mouse selection + # View + def prevImage(self): + if not self.images: + return + if self.idx > 0: + if self.checkAndSave(): + self.idx -= 1 + self.imageChanged() + return + + # Switch to next image in file list + # Load the image + # Load its labels + # Update the mouse selection + # View + def nextImage(self): + if not self.images: + return + if self.idx < len(self.images)-1: + if self.checkAndSave(): + self.idx += 1 + self.imageChanged() + elif self.playState: + self.playState = False + self.playAction.setChecked(False) + + if self.playState: + QtCore.QTimer.singleShot(0, self.nextImage) + return + + # Play images, i.e. auto-switch to next image + def playImages(self, status): + self.playState = status + if self.playState: + QtCore.QTimer.singleShot(0, self.nextImage) + + + # switch correction mode on and off + def toggleCorrectionMode(self): + if not self.config.correctionMode: + self.config.correctionMode = True + iconDir = os.path.join( os.path.dirname(sys.argv[0]) , 'icons' ) + self.correctAction.setIcon(QtGui.QIcon(os.path.join( iconDir , 'checked6_red.png' ))) + else: + self.config.correctionMode = False + iconDir = os.path.join( os.path.dirname(sys.argv[0]) , 'icons' ) + self.correctAction.setIcon(QtGui.QIcon(os.path.join( iconDir , 'checked6.png' ))) + self.update() + return + + + # Switch to a selected image of the file list + # Ask the user for an image + # Load the image + # Load its labels + # Update the mouse selection + # View + def selectImage(self): + if not self.images: + return + + dlgTitle = "Select image to load" + self.statusBar().showMessage(dlgTitle) + items = QtCore.QStringList( [ "{}: {}".format(num,os.path.basename(i)) for (num,i) in enumerate(self.images) ] ) + (item, ok) = QtGui.QInputDialog.getItem(self, dlgTitle, "Image", items, self.idx, False) + if (ok and item): + idx = items.indexOf(item) + if idx != self.idx and self.checkAndSave(): + self.idx = idx + self.imageChanged() + else: + # Restore the message + self.statusBar().showMessage( self.defaultStatusbar ) + + + # Save labels + def save(self): + # Status + saved = False + # Message to show at the status bar when done + message = "" + # Only save if there are changes, labels, an image filename and an image + if self.changes and (self.annotation or self.corrections) and self.config.currentFile and self.image: + if self.annotation: + # Determine the filename + # If we have a loaded label file, then this is also the filename + filename = self.config.currentLabelFile + # If not, then generate one + if not filename: + filename = self.getLabelFilename(True) + + if filename: + proceed = True + # warn user that he is overwriting an old file + if os.path.isfile(filename) and self.config.showSaveWarning: + msgBox = QtGui.QMessageBox(self) + msgBox.setWindowTitle("Overwriting") + msgBox.setText("Saving overwrites the original file and it cannot be reversed. Do you want to continue?") + msgBox.addButton(QtGui.QMessageBox.Cancel) + okAndNeverAgainButton = msgBox.addButton('OK and never ask again',QtGui.QMessageBox.AcceptRole) + okButton = msgBox.addButton(QtGui.QMessageBox.Ok) + msgBox.setDefaultButton(QtGui.QMessageBox.Ok) + msgBox.setIcon(QtGui.QMessageBox.Warning) + msgBox.exec_() + + # User clicked on "OK" + if msgBox.clickedButton() == okButton: + pass + # User clicked on "OK and never ask again" + elif msgBox.clickedButton() == okAndNeverAgainButton: + self.config.showSaveWarning = False + else: + # Do nothing + message += "Nothing saved, no harm has been done. " + proceed = False + + # Save JSON file + if proceed: + try: + self.annotation.toJsonFile(filename) + saved = True + message += "Saved labels to {0} ".format(filename) + except IOError as e: + message += "Error writing labels to {0}. Message: {1} ".format( filename, e.strerror ) + + else: + message += "Error writing labels. Cannot generate a valid filename. " + if self.corrections or self.config.currentCorrectionFile: + # Determine the filename + # If we have a loaded label file, then this is also the filename + filename = self.config.currentCorrectionFile + # If not, then generate one + if not filename: + filename = self.getCorrectionFilename(True) + + if filename: + # Prepare the root + root = ET.Element('correction') + root.text = "\n" + root.tail = "\n" + # Add the filename of the image that is annotated + filenameNode = ET.SubElement(root,'filename') + filenameNode.text = os.path.basename(self.config.currentFile) + filenameNode.tail = "\n" + # Add the folder where this image is located in + # For compatibility with the LabelMe Tool, we need to use the folder + # StereoDataset/cityName + folderNode = ET.SubElement(root,'folder') + folderNode.text = "StereoDataset/" + self.config.cityName + folderNode.tail = "\n" + # The name of the tool. Here, we do not follow the output of the LabelMe tool, + # since this is crap anyway + sourceNode = ET.SubElement(root,'source') + sourceNode.text = "\n" + sourceNode.tail = "\n" + sourceImageNode = ET.SubElement(sourceNode,'sourceImage') + sourceImageNode.text = "Label Cities" + sourceImageNode.tail = "\n" + sourceAnnotationNode = ET.SubElement(sourceNode,'sourceAnnotation') + sourceAnnotationNode.text = "mcLabelTool" + sourceAnnotationNode.tail = "\n" + # The image size + imagesizeNode = ET.SubElement(root,'imagesize') + imagesizeNode.text = "\n" + imagesizeNode.tail = "\n" + nrowsNode = ET.SubElement(imagesizeNode,'nrows') + nrowsNode.text = str(self.image.height()) + nrowsNode.tail = "\n" + ncolsNode = ET.SubElement(imagesizeNode,'ncols') + ncolsNode.text = str(self.image.height()) + ncolsNode.tail = "\n" + # Add all objects + for correction in self.corrections: + correction.appendToXMLNode(root) + + # Create the actual XML tree + self.correctionXML = ET.ElementTree(root) + + # Save XML file + try: + self.correctionXML.write(filename) + saved = True + message += "Saved corrections to {0} ".format(filename) + except IOError as e: + message += "Error writing corrections to {0}. Message: {1} ".format( filename, e.strerror ) + else: + message += "Error writing corrections. Cannot generate a valid filename. " + # Clear changes + if saved: + self.clearChanges() + else: + message += "Nothing to save " + saved = True + + # Show the status message + self.statusBar().showMessage(message) + + return saved + + # Undo changes, ie. reload labels + def undo(self): + # check if we really want to do this in case there are multiple changes + if len( self.changes ) > 1: + # Backup of status message + restoreMessage = self.statusBar().currentMessage() + # Create the dialog + dlgTitle = "Undo changes?" + self.statusBar().showMessage(dlgTitle) + text = "Do you want to undo the following changes?\n" + for c in self.changes: + text += "- " + c + '\n' + buttons = QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel + ret = QtGui.QMessageBox.question(self, dlgTitle, text, buttons, QtGui.QMessageBox.Ok ) + proceed = False + # If the user selected yes -> undo + if ret == QtGui.QMessageBox.Ok: + proceed = True + self.statusBar().showMessage( restoreMessage ) + + # If we do not proceed -> return + if not proceed: + return + + # Clear labels to force a reload + self.annotation = None + # Reload + self.imageChanged() + + # Clear the drawn polygon and update + def clearPolygonAction(self): + self.deselectAllObjects() + self.clearPolygon() + self.update() + + # Create a new object from the current polygon + def newObject(self): + # Default label + label = self.lastLabel + + # Ask the user for a label + (label, ok) = self.getLabelFromUser( label ) + + if ok and label: + # Append and create the new object + self.appendObject( label , self.drawPoly ) + + # Clear the drawn polygon + self.deselectAllObjects() + self.clearPolygon() + + # Default message + self.statusBar().showMessage( self.defaultStatusbar ) + + # Set as default label for next time + self.lastLabel = label + + # Redraw + self.update() + + # Delete the currently selected object + def deleteObject(self): + # Cannot do anything without a selected object + if not self.selObjs: + return + # Cannot do anything without labels + if not self.annotation: + return + + for selObj in self.selObjs: + # The selected object that is deleted + obj = self.annotation.objects[selObj] + + # Delete + obj.delete() + + # Save changes + self.addChange( "Deleted object {0} with label {1}".format( obj.id, obj.label ) ) + + # Clear polygon + self.deselectAllObjects() + self.clearPolygon() + + # Redraw + self.update() + + # Modify the label of a selected object + def modifyLabel(self): + # Cannot do anything without labels + if not self.annotation: + return + # Cannot do anything without a selected object + if not self.selObjs: + return + + # The last selected object + obj = self.annotation.objects[self.selObjs[-1]] + # default label + defaultLabel = obj.label + defaultId = -1 + # If there is only one object the dialog text can be improved + if len(self.selObjs) == 1: + defaultId = obj.id + + (label, ok) = self.getLabelFromUser( defaultLabel , defaultId ) + + if ok and label: + for selObj in self.selObjs: + # The selected object that is modified + obj = self.annotation.objects[selObj] + + # Save changes + if obj.label != label: + self.addChange( "Set label {0} for object {1} with previous label {2}".format( label, obj.id, obj.label ) ) + obj.label = label + obj.updateDate() + + # Update + self.update() + + # Move object a layer up + def layerUp(self): + # Change layer + self.modifyLayer(+1) + # Update + self.update() + + # Move object a layer down + def layerDown(self): + # Change layer + self.modifyLayer(-1) + # Update + self.update() + + # Toggle zoom + def zoomToggle(self, status): + self.config.zoom = status + if status : + self.mousePosOnZoom = self.mousePos + self.update() + + # Toggle highlight + def highlightClassToggle(self, status): + if status : + defaultLabel = "" + if self.config.highlightLabelSelection and self.config.highlightLabelSelection in name2label: + defaultLabel = self.config.highlightLabelSelection + (label, ok) = self.getLabelFromUser( defaultLabel ) + + if ok and label: + self.config.highlightLabelSelection = label + else: + status = False + + self.config.highlight = status + self.update() + + # Increase label transparency + def minus(self): + self.config.transp = max(self.config.transp-0.1,0.0) + self.update() + + + def displayFilepath(self): + self.statusBar().showMessage("Current image: {0}".format( self.config.currentFile )) + self.update() + + + # Decrease label transparency + def plus(self): + self.config.transp = min(self.config.transp+0.1,1.0) + self.update() + + # Take a screenshot + def screenshot(self): + # Get a filename for saving + dlgTitle = "Get screenshot filename" + filter = "Images (*.png *.xpm *.jpg)" + answer = QtGui.QFileDialog.getSaveFileName(self, dlgTitle, self.config.screenshotFilename,filter, options=QtGui.QFileDialog.DontUseNativeDialog) + if answer: + self.config.screenshotFilename = str(answer) + else: + return + + # Actually make the screenshot + self.doScreenshot() + + # Toggle auto-making of screenshots + def screenshotToggle(self, status): + self.screenshotToggleState = status + if status: + self.screenshot() + + def displayHelpMessage(self): + + message = self.applicationTitle + "\n\n" + message += "INSTRUCTIONS\n" + message += " - press open (left button) to select a city from drop-down menu\n" + message += " - browse images and edit labels using\n" + message += " the toolbar buttons (check tooltips) and the controls below\n" + message += " - note that the editing happens in-place;\n" + message += " if you want to annotate your own images or edit a custom\n" + message += " set of labels, check (and modify) the code of the method 'loadCity'\n" + message += " - note that this tool modifys the JSON polygon files, but\n" + message += " does not create or update the pngs; for the latter use\n" + message += " the preparation tools that come with this tool box.\n" + message += "\n" + message += "CONTROLS\n" + message += " - highlight objects [move mouse]\n" + message += " - draw new polygon\n" + message += " - start drawing a polygon [left click]\n" + message += " - add point to open polygon [left click]\n" + message += " - delete last added point [Backspace]\n" + message += " - close polygon [left click on first point]\n" + message += " - select closed polygon, existing object [Ctrl + left click]\n" + message += " - move point [left click and hold on point, move mouse]\n" + message += " - add point [click on edge]\n" + message += " - delete point from polygon [Shift + left click on point]\n" + message += " - deselect polygon [Q]\n" + message += " - select multiple polygons [Ctrl + left click]\n" + message += " - intersect/merge two polygons: draw new polygon, then\n" + message += " - intersect [Shift + left click on existing polygon]\n" + message += " - merge [Alt + left click on existing polygon]\n" + message += " - open zoom window [Z or hold down right mouse button]\n" + message += " - zoom in/out [mousewheel]\n" + message += " - enlarge/shrink zoom window [shift+mousewheel]\n" + message += " - start correction mode [C]\n" + message += " - draw a correction box [left click and hold, move, release]\n" + message += " - set box type [1,2,3,4]\n" + message += " - previous/next box [E,R]\n" + message += " - delete box [D]\n" + message += " - modify text, use ascii only [M]\n" + + QtGui.QMessageBox.about(self, "HELP!", message) + self.update() + + # Close the application + def closeEvent(self,event): + if self.checkAndSave(): + event.accept() + else: + event.ignore() + + + ############################# + ## Custom events + ############################# + + def imageChanged(self): + # Clear corrections + self.corrections = [] + self.selected_correction = -1 + # Clear the polygon + self.deselectAllObjects() + self.clearPolygon() + # Load the first image + self.loadImage() + # Load its labels if available + self.loadLabels() + # Load its corrections if available + self.loadCorrections() + # Update the object the mouse points to + self.updateMouseObject() + # Update the GUI + self.update() + # Save screenshot if set + if self.screenshotToggleState: + self.doScreenshot() + + ############################# + ## File I/O + ############################# + + # Load the currently selected city if possible + def loadCity(self): + # Search for all *.pngs to get the image list + self.images = [] + if os.path.isdir(self.config.city): + self.images = glob.glob( os.path.join( self.config.city , '*' + self.imageExt ) ) + self.images.sort() + if self.config.currentFile in self.images: + self.idx = self.images.index(self.config.currentFile) + else: + self.idx = 0 + + # Load the currently selected image + # Does only load if not previously loaded + # Does not refresh the GUI + def loadImage(self): + success = False + message = self.defaultStatusbar + if self.images: + filename = self.images[self.idx] + filename = os.path.normpath( filename ) + if not self.image.isNull() and filename == self.config.currentFile: + success = True + else: + self.image = QtGui.QImage(filename) + if self.image.isNull(): + message = "Failed to read image: {0}".format( filename ) + else: + message = "Read image: {0}".format( filename ) + self.config.currentFile = filename + success = True + + # Update toolbar actions that need an image + for act in self.actImage: + act.setEnabled(success) + for act in self.actImageNotFirst: + act.setEnabled(success and self.idx > 0) + for act in self.actImageNotLast: + act.setEnabled(success and self.idx < len(self.images)-1) + + self.statusBar().showMessage(message) + + # Load the labels from file + # Only loads if they exist + # Otherwise the filename is stored and that's it + def loadLabels(self): + filename = self.getLabelFilename() + if not filename or not os.path.isfile(filename): + self.clearAnnotation() + return + + # If we have everything and the filename did not change, then we are good + if self.annotation and filename == self.currentLabelFile: + return + + # Clear the current labels first + self.clearAnnotation() + + try: + self.annotation = Annotation() + self.annotation.fromJsonFile(filename) + except IOError as e: + # This is the error if the file does not exist + message = "Error parsing labels in {0}. Message: {1}".format( filename, e.strerror ) + self.statusBar().showMessage(message) + + # Remember the filename loaded + self.currentLabelFile = filename + + # Remeber the status bar message to restore it later + restoreMessage = self.statusBar().currentMessage() + + # Restore the message + self.statusBar().showMessage( restoreMessage ) + + # Load the labels from file + # Only loads if they exist + # Otherwise the filename is stored and that's it + def loadCorrections(self): #TODO + filename = self.getCorrectionFilename() + if not filename: + self.clearCorrections() + return + + # If we have everything and the filename did not change, then we are good + if self.correctionXML and self.corrections and filename == self.config.currentCorrectionFile: + return + + # Clear the current labels first + self.clearCorrections() + + # We do not always expect to have corrections, therefore prevent a failure due to missing file + if not os.path.isfile(filename): + return + + try: + # Try to parse the XML file + self.correctionXML = ET.parse( filename ) + except IOError as e: + # This is the error if the file does not exist + message = "Error parsing corrections in {0}. Message: {1}".format( filename, e.strerror ) + self.statusBar().showMessage(message) + self.correctionXML = [] + return + except ET.ParseError as e: + # This is the error if the content is no valid XML + message = "Error parsing corrections in {0}. Message: {1}".format( filename, e ) + self.statusBar().showMessage(message) + self.correctionXML = [] + return + + # Remember the filename loaded + self.config.currentCorrectionFile = filename + + # Remeber the status bar message to restore it later + restoreMessage = self.statusBar().currentMessage() + + # Iterate through all objects in the XML + root = self.correctionXML.getroot() + for i, objNode in enumerate(root.findall('correction')): + # Instantate a new object and read the XML node + obj = CorrectionBox() + obj.readFromXMLNode( objNode ) + if i == 0: + self.selected_correction = 0 + obj.select() + + # Append the object to our list of labels + self.corrections.append(obj) + + # Restore the message + self.statusBar().showMessage( restoreMessage ) + + + def modify_correction_type(self, correction_type): + if self.selected_correction >= 0: + self.corrections[self.selected_correction].type = correction_type + self.addChange( "Modified correction type.") + self.update() + return + + + def delete_selected_annotation(self): + if self.selected_correction >= 0 and self.config.correctionMode: + del self.corrections[self.selected_correction] + if self.selected_correction == len(self.corrections): + self.selected_correction = self.selected_correction - 1 + if self.selected_correction >= 0: + self.corrections[self.selected_correction].select() + self.addChange( "Deleted correction.") + self.update() + return + + def modify_correction_description(self): + if self.selected_correction >= 0 and self.config.correctionMode: + description = QtGui.QInputDialog.getText(self, "Modify Error Description", "Please describe the labeling error briefly.", + text = self.corrections[self.selected_correction].annotation) + if description[1]: + self.corrections[self.selected_correction].annotation = description[0] + self.addChange( "Changed correction description.") + self.update() + return + + def select_next_correction(self): + + if self.selected_correction >= 0: + self.corrections[self.selected_correction].unselect() + if self.selected_correction == (len(self.corrections) - 1) : + self.selected_correction = 0 + else : + self.selected_correction = self.selected_correction + 1 + self.corrections[self.selected_correction].select() + self.update() + + return + + def select_previous_correction(self): + + if self.selected_correction >= 0 : + self.corrections[self.selected_correction].unselect() + if self.selected_correction == 0 : + self.selected_correction = (len(self.corrections) - 1) + else : + self.selected_correction = self.selected_correction - 1 + self.corrections[self.selected_correction].select() + self.update() + + return + + + ############################# + ## Drawing + ############################# + + # This method is called when redrawing everything + # Can be manually triggered by self.update() + # Note that there must not be any other self.update within this method + # or any methods that are called within + def paintEvent(self, event): + # Create a QPainter that can perform draw actions within a widget or image + qp = QtGui.QPainter() + # Begin drawing in the application widget + qp.begin(self) + # Update scale + self.updateScale(qp) + # Determine the object ID to highlight + self.getHighlightedObject(qp) + # Draw the image first + self.drawImage(qp) + # Draw the labels on top + overlay = self.drawLabels(qp) + # Draw the user drawn polygon + self.drawDrawPoly(qp) + self.drawDrawRect(qp) + # Draw the label name next to the mouse + self.drawLabelAtMouse(qp) + # Draw the zoom + # self.drawZoom(qp, overlay) + self.drawZoom(qp,None) + + # Thats all drawing + qp.end() + + # Forward the paint event + QtGui.QMainWindow.paintEvent(self,event) + + # Update the scaling + def updateScale(self, qp): + if not self.image.width() or not self.image.height(): + return + # Horizontal offset + self.xoff = self.bordergap + # Vertical offset + self.yoff = self.toolbar.height()+self.bordergap + # We want to make sure to keep the image aspect ratio and to make it fit within the widget + # Without keeping the aspect ratio, each side of the image is scaled (multiplied) with + sx = float(qp.device().width() - 2*self.xoff) / self.image.width() + sy = float(qp.device().height() - 2*self.yoff) / self.image.height() + # To keep the aspect ratio while making sure it fits, we use the minimum of both scales + # Remember the scale for later + self.scale = min( sx , sy ) + # These are then the actual dimensions used + self.w = self.scale * self.image.width() + self.h = self.scale * self.image.height() + + # Determine the highlighted object for drawing + def getHighlightedObject(self, qp): + # These variables we want to fill + self.highlightObjs = [] + self.highlightObjLabel = None + + # Without labels we cannot do so + if not self.annotation: + return + + # If available set the selected objects + highlightObjIds = self.selObjs + # If not available but the polygon is empty or closed, its the mouse object + if not highlightObjIds and (self.drawPoly.isEmpty() or self.drawPolyClosed) and self.mouseObj>=0 and not self.mouseOutsideImage: + highlightObjIds = [self.mouseObj] + # Get the actual object that is highlighted + if highlightObjIds: + self.highlightObjs = [ self.annotation.objects[i] for i in highlightObjIds ] + # Set the highlight object label if appropriate + if self.config.highlight: + self.highlightObjLabel = self.config.highlightLabelSelection + elif len(highlightObjIds) == 1 and self.config.correctionMode: + self.highlightObjLabel = self.annotation.objects[highlightObjIds[-1]].label + + # Draw the image in the given QPainter qp + def drawImage(self, qp): + # Return if no image available + if self.image.isNull(): + return + + # Save the painters current setting to a stack + qp.save() + # Draw the image + qp.drawImage(QtCore.QRect( self.xoff, self.yoff, self.w, self.h ), self.image) + # Restore the saved setting from the stack + qp.restore() + + def getPolygon(self, obj): + poly = QtGui.QPolygonF() + for pt in obj.polygon: + point = QtCore.QPointF(pt.x,pt.y) + poly.append( point ) + return poly + + # Draw the labels in the given QPainter qp + # optionally provide a list of labels to ignore + def drawLabels(self, qp, ignore = []): + if self.image.isNull() or self.w <= 0 or self.h <= 0: + return + if not self.annotation: + return + if self.transpTempZero: + return + + # The overlay is created in the viewing coordinates + # This way, the drawing is more dense and the polygon edges are nicer + # We create an image that is the overlay + # Within this image we draw using another QPainter + # Finally we use the real QPainter to overlay the overlay-image on what is drawn so far + + # The image that is used to draw the overlays + overlay = QtGui.QImage( self.w, self.h, QtGui.QImage.Format_ARGB32_Premultiplied ) + # Fill the image with the default color + defaultLabel = name2label[self.defaultLabel] + col = QtGui.QColor( *defaultLabel.color ) + overlay.fill( col ) + # Create a new QPainter that draws in the overlay image + qp2 = QtGui.QPainter() + qp2.begin(overlay) + + # The color of the outlines + qp2.setPen(QtGui.QColor('white')) + # Draw all objects + for obj in self.annotation.objects: + # Some are flagged to not be drawn. Skip them + if not obj.draw: + continue + + # The label of the object + name = assureSingleInstanceName( obj.label ) + # If we do not know a color for this label, warn the user + if not name in name2label: + print( "The annotations contain unkown labels. This should not happen. Please inform the datasets authors. Thank you!" ) + print( "Details: label '{}', file '{}'".format(name,self.currentLabelFile) ) + continue + + # If we ignore this label, skip + if name in ignore: + continue + + poly = self.getPolygon(obj) + + # Scale the polygon properly + polyToDraw = poly * QtGui.QTransform.fromScale(self.scale,self.scale) + + # Default drawing + # Color from color table, solid brush + col = QtGui.QColor( *name2label[name].color ) + brush = QtGui.QBrush( col, QtCore.Qt.SolidPattern ) + qp2.setBrush(brush) + # Overwrite drawing if this is the highlighted object + if ( obj in self.highlightObjs or name == self.highlightObjLabel ): + # First clear everything below of the polygon + qp2.setCompositionMode( QtGui.QPainter.CompositionMode_Clear ) + qp2.drawPolygon( polyToDraw ) + qp2.setCompositionMode( QtGui.QPainter.CompositionMode_SourceOver ) + # Set the drawing to a special pattern + brush = QtGui.QBrush(col,QtCore.Qt.DiagCrossPattern) + qp2.setBrush(brush) + + qp2.drawPolygon( polyToDraw ) + + # Draw outline of selected object dotted + for obj in self.highlightObjs: + brush = QtGui.QBrush(QtCore.Qt.NoBrush) + qp2.setBrush(brush) + qp2.setPen(QtCore.Qt.DashLine) + polyToDraw = self.getPolygon(obj) * QtGui.QTransform.fromScale(self.scale,self.scale) + qp2.drawPolygon( polyToDraw ) + + # End the drawing of the overlay + qp2.end() + # Save QPainter settings to stack + qp.save() + # Define transparency + qp.setOpacity(self.config.transp) + # Draw the overlay image + qp.drawImage(self.xoff,self.yoff,overlay) + # Restore settings + qp.restore() + + return overlay + + def drawDrawRect(self, qp): + + qp.save() + qp.setBrush(QtGui.QBrush(QtCore.Qt.NoBrush)) + qp.setFont(QtGui.QFont('QFont::AnyStyle', 14)) + thickPen = QtGui.QPen() + qp.setPen(thickPen) + + for c in self.corrections: + rect = copy.deepcopy(c.bbox) + + width = rect.width() + height = rect.height() + rect.setX(c.bbox.x() * self.scale + self.xoff) + rect.setY(c.bbox.y() * self.scale + self.yoff) + + rect.setWidth(width * self.scale) + rect.setHeight(height * self.scale) + + if c.selected: + thickPen.setColor(QtGui.QColor(0,0,0)) + if c.type == CorrectionBox.types.QUESTION: + descr = "QUESTION" + elif c.type == CorrectionBox.types.RESOLVED: + descr = "FIXED" + else: + descr = "ERROR" + qp.setPen(thickPen) + qp.drawText(QtCore.QPoint( self.xoff, self.yoff + self.h + 20 ), + "(%s: %s)" % (descr, c.annotation)) + pen_width = 6 + else: + pen_width = 3 + + colour = c.get_colour() + thickPen.setColor(colour) + thickPen.setWidth(pen_width) + qp.setPen(thickPen) + qp.drawRect(rect) + + if self.in_progress_bbox is not None: + rect = copy.deepcopy(self.in_progress_bbox) + width = rect.width() + height = rect.height() + rect.setX(self.in_progress_bbox.x() * self.scale + self.xoff) + rect.setY(self.in_progress_bbox.y() * self.scale + self.yoff) + + rect.setWidth(width * self.scale) + rect.setHeight(height * self.scale) + + thickPen.setColor(QtGui.QColor(255,0,0)) + thickPen.setWidth(3) + qp.setPen(thickPen) + qp.drawRect(rect) + + + qp.restore() + + # Draw the polygon that is drawn and edited by the user + # Usually the polygon must be rescaled properly. However when drawing + # The polygon within the zoom, this is not needed. Therefore the option transform. + def drawDrawPoly(self, qp, transform=None): + # Nothing to do? + if self.drawPoly.isEmpty(): + return + if not self.image: + return + + # Save QPainter settings to stack + qp.save() + + # The polygon - make a copy + poly = QtGui.QPolygonF(self.drawPoly) + + # Append the current mouse position + if not self.drawPolyClosed and (self.mousePosScaled is not None): + poly.append( self.mousePosScaled ) + + # Transform + if not transform: + poly = poly * QtGui.QTransform.fromScale(self.scale,self.scale) + poly.translate(self.xoff,self.yoff) + else: + poly = poly * transform + + # Do not fill the polygon + qp.setBrush(QtGui.QBrush(QtCore.Qt.NoBrush)) + + # Draw the polygon edges + polyColor = QtGui.QColor(255,0,0) + qp.setPen(polyColor) + if not self.drawPolyClosed: + qp.drawPolyline( poly ) + else: + qp.drawPolygon( poly ) + + # Get the ID of the closest point to the mouse + if self.mousePosScaled is not None: + closestPt = self.getClosestPoint( self.drawPoly, self.mousePosScaled ) + else: + closestPt = (-1,-1) + + # If a polygon edge is selected, draw in bold + if closestPt[0] != closestPt[1]: + thickPen = QtGui.QPen(polyColor) + thickPen.setWidth(3) + qp.setPen(thickPen) + qp.drawLine( poly[closestPt[0]], poly[closestPt[1]] ) + + # Draw the polygon points + qp.setPen(polyColor) + startDrawingPts = 0 + + # A bit different if not closed + if not self.drawPolyClosed: + # Draw + self.drawPoint( qp, poly.first(), True, closestPt==(0,0) and self.drawPoly.size()>1 ) + # Do not draw again + startDrawingPts = 1 + + # The next in red + for pt in range(startDrawingPts,poly.size()): + self.drawPoint( qp, poly[pt], False, self.drawPolyClosed and closestPt==(pt,pt) ) + + # Restore QPainter settings from stack + qp.restore() + + # Draw the label name next to the mouse + def drawLabelAtMouse(self, qp): + # Nothing to do without a highlighted object + if not self.highlightObjs: + return + # Also we do not want to draw the label, if we have a drawn polygon + if not self.drawPoly.isEmpty(): + return + # Nothing to without a mouse position + if not self.mousePos: + return + + # Save QPainter settings to stack + qp.save() + + # That is the mouse positiong + mouse = self.mousePos + + # Will show zoom + showZoom = self.config.zoom and not self.image.isNull() and self.w and self.h + + # The text that is written next to the mouse + mouseText = self.highlightObjs[-1].label + + # Where to write the text + # Depends on the zoom (additional offset to mouse to make space for zoom?) + # The location in the image (if we are at the top we want to write below of the mouse) + off = 36 + if showZoom: + off += self.config.zoomSize/2 + if mouse.y()-off > self.toolbar.height(): + top = mouse.y()-off + btm = mouse.y() + vAlign = QtCore.Qt.AlignTop + else: + # The height of the cursor + if not showZoom: + off += 20 + top = mouse.y() + btm = mouse.y()+off + vAlign = QtCore.Qt.AlignBottom + + # Here we can draw + rect = QtCore.QRect() + rect.setTopLeft(QtCore.QPoint(mouse.x()-100,top)) + rect.setBottomRight(QtCore.QPoint(mouse.x()+100,btm)) + + # The color + qp.setPen(QtGui.QColor('white')) + # The font to use + font = QtGui.QFont("Helvetica",20,QtGui.QFont.Bold) + qp.setFont(font) + # Non-transparent + qp.setOpacity(1) + # Draw the text, horizontally centered + qp.drawText(rect,QtCore.Qt.AlignHCenter|vAlign,mouseText) + # Restore settings + qp.restore() + + # Draw the zoom + def drawZoom(self,qp,overlay): + # Zoom disabled? + if not self.config.zoom: + return + # No image + if self.image.isNull() or not self.w or not self.h: + return + # No mouse + if not self.mousePos: + return + + # Abbrevation for the zoom window size + zoomSize = self.config.zoomSize + # Abbrevation for the mouse position + mouse = self.mousePos + + # The pixel that is the zoom center + pix = self.mousePosScaled + # The size of the part of the image that is drawn in the zoom window + selSize = zoomSize / ( self.config.zoomFactor * self.config.zoomFactor ) + # The selection window for the image + sel = QtCore.QRectF(pix.x() -selSize/2 ,pix.y() -selSize/2 ,selSize,selSize ) + # The selection window for the widget + view = QtCore.QRectF(mouse.x()-zoomSize/2,mouse.y()-zoomSize/2,zoomSize,zoomSize) + + # Show the zoom image + qp.drawImage(view,self.image,sel) + + # If we are currently drawing the polygon, we need to draw again in the zoom + if not self.drawPoly.isEmpty(): + transform = QtGui.QTransform() + quadFrom = QtGui.QPolygonF() + quadFrom.append( sel.topLeft() ) + quadFrom.append( sel.topRight() ) + quadFrom.append( sel.bottomRight() ) + quadFrom.append( sel.bottomLeft() ) + quadTo = QtGui.QPolygonF() + quadTo.append( view.topLeft() ) + quadTo.append( view.topRight() ) + quadTo.append( view.bottomRight() ) + quadTo.append( view.bottomLeft() ) + if QtGui.QTransform.quadToQuad( quadFrom , quadTo , transform ): + qp.setClipRect(view) + #transform.translate(self.xoff,self.yoff) + self.drawDrawPoly(qp,transform) + else: + print( "not possible" ) + + + ############################# + ## Mouse/keyboard events + ############################# + + # Mouse moved + # Need to save the mouse position + # Need to drag a polygon point + # Need to update the mouse selected object + def mouseMoveEvent(self,event): + if self.image.isNull() or self.w == 0 or self.h == 0: + return + + self.updateMousePos( event.posF() ) + + if not self.config.correctionMode: + # If we are dragging a point, update + if self.draggedPt >= 0: + # Update the dragged point + self.drawPoly.replace( self.draggedPt , self.mousePosScaled ) + # If the polygon is the polygon of the selected object, + # update the object polygon and + # keep track of the changes we do + if self.selObjs: + obj = self.annotation.objects[self.selObjs[-1]] + obj.polygon[self.draggedPt] = Point(self.mousePosScaled.x(),self.mousePosScaled.y()) + # Check if we changed the object's polygon the first time + if not obj.id in self.changedPolygon: + self.changedPolygon.append(obj.id) + self.addChange( "Changed polygon of object {0} with label {1}".format( obj.id, obj.label ) ) + else: + if self.in_progress_bbox is not None: + p0 = (self.mousePosScaled.x(), self.mousePosScaled.y()) + p1 = (self.mousePressEvent.x(), self.mousePressEvent.y()) + xy = min(p0[0], p1[0]), min(p0[1], p1[1]) + w, h = abs(p0[0] - p1[0]), abs(p0[1] - p1[1]) + self.in_progress_bbox = QtCore.QRectF(xy[0], xy[1], w, h) + #p.set_x(xy[0]) + #p.set_y(xy[1]) + #p.set_width(w) + #p.set_height(h) + + # Update the object selected by the mouse + self.updateMouseObject() + + # Redraw + self.update() + + # Mouse left the widget + def leaveEvent(self, event): + self.mousePos = None + self.mousePosScaled = None + self.mouseOutsideImage = True + + # Mouse button pressed + # Start dragging of polygon point + # Enable temporary toggling of zoom + def mousePressEvent(self,event): + + self.mouseButtons = event.buttons() + shiftPressed = QtGui.QApplication.keyboardModifiers() == QtCore.Qt.ShiftModifier + self.updateMousePos( event.posF() ) + self.mousePressEvent = self.mousePosScaled + # Handle left click + if event.button() == QtCore.Qt.LeftButton: + + # If the drawn polygon is closed and the mouse clicks a point, + # Then this one is dragged around + if not self.config.correctionMode: + if self.drawPolyClosed and (self.mousePosScaled is not None): + closestPt = self.getClosestPoint( self.drawPoly, self.mousePosScaled ) + if shiftPressed : + if closestPt[0] == closestPt[1]: + del self.drawPoly[closestPt[0]] + + # If the polygon is the polygon of the selected object, + # update the object + # and keep track of the changes we do + if self.selObjs: + obj = self.annotation.objects[self.selObjs[-1]] + del obj.polygon[closestPt[0]] + # Check if we changed the object's polygon the first time + if not obj.id in self.changedPolygon: + self.changedPolygon.append(obj.id) + self.addChange( "Changed polygon of object {0} with label {1}".format( obj.id, obj.label ) ) + + self.update() + else : + # If we got a point (or nothing), we make it dragged + if closestPt[0] == closestPt[1]: + self.draggedPt = closestPt[0] + # If we got an edge, we insert a point and make it dragged + else: + self.drawPoly.insert( closestPt[1] , self.mousePosScaled ) + self.draggedPt = closestPt[1] + # If the polygon is the polygon of the selected object, + # update the object + # and keep track of the changes we do + if self.selObjs: + obj = self.annotation.objects[self.selObjs[-1]] + obj.polygon.insert( closestPt[1] , Point( self.mousePosScaled.x() , self.mousePosScaled.y() ) ) + # Check if we changed the object's polygon the first time + if not obj.id in self.changedPolygon: + self.changedPolygon.append(obj.id) + self.addChange( "Changed polygon of object {0} with label {1}".format( obj.id, obj.label ) ) + else: + assert self.in_progress_bbox == None + self.in_progress_bbox = QtCore.QRectF(self.mousePosScaled.x(), self.mousePosScaled.y(), 0, 0) + + # Handle right click + elif event.button() == QtCore.Qt.RightButton: + self.toggleZoom( event.posF() ) + + # Redraw + self.update() + + + # Mouse button released + # End dragging of polygon + # Select an object + # Add a point to the polygon + # Disable temporary toggling of zoom + def mouseReleaseEvent(self,event): + self.mouseButtons = event.buttons() + ctrlPressed = event.modifiers() & QtCore.Qt.ControlModifier + shiftPressed = event.modifiers() & QtCore.Qt.ShiftModifier + altPressed = event.modifiers() & QtCore.Qt.AltModifier + + # Handle left click + if event.button() == QtCore.Qt.LeftButton: + if not self.config.correctionMode: + # Check if Ctrl is pressed + if ctrlPressed: + # If also Shift is pressed and we have a closed polygon, then we intersect + # the polygon with the mouse object + if shiftPressed and self.drawPolyClosed: + self.intersectPolygon() + # If also Alt is pressed and we have a closed polygon, then we merge + # the polygon with the mouse object + if altPressed and self.drawPolyClosed: + self.mergePolygon() + # Make the current mouse object the selected + # and process the selection + else: + self.selectObject() + # Add the point to the drawn polygon if not already closed + elif not self.drawPolyClosed: + # If the mouse would close the poly make sure to do so + if self.ptClosesPoly( ): + self.closePolygon() + elif self.mousePosScaled is not None: + if not self.drawPolyClosed and self.drawPoly.isEmpty() : + self.mousePosOnZoom = self.mousePos + self.addPtToPoly( self.mousePosScaled ) + # Otherwise end a possible dragging + elif self.drawPolyClosed: + self.draggedPt = -1 + else: + if self.in_progress_bbox is not None: + if self.in_progress_bbox.width() > 20: + description = QtGui.QInputDialog.getText(self, "Error Description", "Please describe the labeling error briefly.") + if description[1] and description[0]: + self.corrections.append(CorrectionBox(self.in_progress_bbox, annotation=description[0])) + #last_annotation = self.in_progress_annotation #TODO: self? + self.corrections[self.selected_correction].unselect() + self.selected_correction = len(self.corrections)-1 + self.corrections[self.selected_correction].select() + self.addChange( "Added correction.") + self.in_progress_annotation = None + self.in_progress_bbox = None + + # Handle right click + elif event.button() == QtCore.Qt.RightButton: + self.toggleZoom( event.posF() ) + + # Redraw + self.update() + + # Mouse wheel scrolled + def wheelEvent(self, event): + deltaDegree = event.delta() / 8 # Rotation in degree + deltaSteps = deltaDegree / 15 # Usually one step on the mouse is 15 degrees + + if self.config.zoom: + # If shift is pressed, change zoom window size + if event.modifiers() and QtCore.Qt.Key_Shift: + self.config.zoomSize += deltaSteps * 10 + self.config.zoomSize = max( self.config.zoomSize, 10 ) + self.config.zoomSize = min( self.config.zoomSize, 1000 ) + # Change zoom factor + else: + self.config.zoomFactor += deltaSteps * 0.05 + self.config.zoomFactor = max( self.config.zoomFactor, 0.1 ) + self.config.zoomFactor = min( self.config.zoomFactor, 10 ) + self.update() + + # Key pressed + def keyPressEvent(self,e): + # Ctrl key changes mouse cursor + if e.key() == QtCore.Qt.Key_Control: + QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) + # Backspace deletes last point from polygon + elif e.key() == QtCore.Qt.Key_Backspace: + if not self.drawPolyClosed: + del self.drawPoly[-1] + self.update() + # set alpha to temporary zero + elif e.key() == QtCore.Qt.Key_0: + self.transpTempZero = True + self.update() + elif e.key() == QtCore.Qt.Key_E: + self.select_next_correction() + elif e.key() == QtCore.Qt.Key_R: + self.select_previous_correction() + elif e.key() == QtCore.Qt.Key_1: + self.modify_correction_type(CorrectionBox.types.TO_CORRECT) + elif e.key() == QtCore.Qt.Key_2: + self.modify_correction_type(CorrectionBox.types.TO_REVIEW) + elif e.key() == QtCore.Qt.Key_3: + self.modify_correction_type(CorrectionBox.types.RESOLVED) + elif e.key() == QtCore.Qt.Key_4: + self.modify_correction_type(CorrectionBox.types.QUESTION) + elif e.key() == QtCore.Qt.Key_D and self.config.correctionMode: + self.delete_selected_annotation() + elif e.key() == QtCore.Qt.Key_M and self.config.correctionMode: + self.modify_correction_description() + + # Key released + def keyReleaseEvent(self,e): + # Ctrl key changes mouse cursor + if e.key() == QtCore.Qt.Key_Control: + QtGui.QApplication.restoreOverrideCursor() + # check for zero to release temporary zero + # somehow, for the numpad key in some machines, a check on Insert is needed aswell + elif e.key() == QtCore.Qt.Key_0 or e.key() == QtCore.Qt.Key_Insert: + self.transpTempZero = False + self.update() + + ############################# + ## Little helper methods + ############################# + + # Helper method that sets tooltip and statustip + # Provide an QAction and the tip text + # This text is appended with a hotkeys and then assigned + def setTip( self, action, tip ): + tip += " (Hotkeys: '" + "', '".join([str(s.toString()) for s in action.shortcuts()]) + "')" + action.setStatusTip(tip) + action.setToolTip(tip) + + # Set the mouse positions + # There are the original positions refering to the screen + # Scaled refering to the image + # And a zoom version, where the mouse movement is artificially slowed down + def updateMousePos( self, mousePosOrig ): + if self.config.zoomFactor <= 1 or (self.drawPolyClosed or self.drawPoly.isEmpty()): + sens = 1.0 + else : + sens = 1.0/pow(self.config.zoomFactor, 3); + + if self.config.zoom and self.mousePosOnZoom is not None: + mousePos = QtCore.QPointF(round((1-sens)*self.mousePosOnZoom.x() + (sens)*mousePosOrig.x()), round((1-sens)*self.mousePosOnZoom.y() + sens*mousePosOrig.y())) + else : + mousePos = mousePosOrig + mousePosScaled = QtCore.QPointF( float(mousePos.x() - self.xoff) / self.scale , float(mousePos.y() - self.yoff) / self.scale ) + mouseOutsideImage = not self.image.rect().contains( mousePosScaled.toPoint() ) + + mousePosScaled.setX( max( mousePosScaled.x() , 0. ) ) + mousePosScaled.setY( max( mousePosScaled.y() , 0. ) ) + mousePosScaled.setX( min( mousePosScaled.x() , self.image.rect().right() ) ) + mousePosScaled.setY( min( mousePosScaled.y() , self.image.rect().bottom() ) ) + + if not self.image.rect().contains( mousePosScaled.toPoint() ): + self.mousePos = None + self.mousePosScaled = None + self.mousePosOrig = None + self.updateMouseObject() + self.update() + return + + self.mousePos = mousePos + self.mousePosScaled = mousePosScaled + self.mousePosOrig = mousePosOrig + self.mouseOutsideImage = mouseOutsideImage + + # Toggle the zoom and update all mouse positions + def toggleZoom(self, mousePosOrig): + self.config.zoom = not self.config.zoom + + if self.config.zoom: + self.mousePosOnZoom = self.mousePos + # Update the mouse position afterwards + self.updateMousePos( mousePosOrig ) + else: + # Update the mouse position first + self.updateMousePos( mousePosOrig ) + # Update the dragged point to the non-zoom point + if not self.config.correctionMode and self.draggedPt >= 0: + self.drawPoly.replace( self.draggedPt , self.mousePosScaled ) + + # Get the point/edge index within the given polygon that is close to the given point + # Returns (-1,-1) if none is close enough + # Returns (i,i) if the point with index i is closed + # Returns (i,i+1) if the edge from points i to i+1 is closest + def getClosestPoint( self, poly, pt ): + closest = (-1,-1) + distTh = 4.0 + dist = 1e9 # should be enough + for i in range(poly.size()): + curDist = self.ptDist(poly[i],pt) + if curDist < dist: + closest = (i,i) + dist = curDist + # Close enough? + if dist <= distTh: + return closest + + # Otherwise see if the polygon is closed, but a line is close enough + if self.drawPolyClosed and poly.size() >= 2: + for i in range(poly.size()): + pt1 = poly[i] + j = i+1 + if j == poly.size(): + j = 0 + pt2 = poly[j] + edge = QtCore.QLineF(pt1,pt2) + normal = edge.normalVector() + normalThroughMouse = QtCore.QLineF( pt.x(),pt.y(),pt.x()+normal.dx(),pt.y()+normal.dy() ) + intersectionPt = QtCore.QPointF() + intersectionType = edge.intersect( normalThroughMouse , intersectionPt ) + if intersectionType == QtCore.QLineF.BoundedIntersection: + curDist = self.ptDist(intersectionPt,pt) + if curDist < dist: + closest = (i,j) + dist = curDist + + # Close enough? + if dist <= distTh: + return closest + + # If we didnt return yet, we didnt find anything + return (-1,-1) + + # Get distance between two points + def ptDist( self, pt1, pt2 ): + # A line between both + line = QtCore.QLineF( pt1 , pt2 ) + # Length + lineLength = line.length() + return lineLength + + # Determine if the given point closes the drawn polygon (snapping) + def ptClosesPoly(self): + if self.drawPoly.isEmpty(): + return False + if self.mousePosScaled is None: + return False + closestPt = self.getClosestPoint( self.drawPoly, self.mousePosScaled ) + return closestPt==(0,0) + + # Draw a point using the given QPainter qp + # If its the first point in a polygon its drawn in green + # if not in red + # Also the radius might be increased + def drawPoint(self, qp, pt, isFirst, increaseRadius): + # The first in green + if isFirst: + qp.setBrush(QtGui.QBrush(QtGui.QColor(0,255,0),QtCore.Qt.SolidPattern)) + # Other in red + else: + qp.setBrush(QtGui.QBrush(QtGui.QColor(255,0,0),QtCore.Qt.SolidPattern)) + + # Standard radius + r = 3.0 + # Increase maybe + if increaseRadius: + r *= 2.5 + # Draw + qp.drawEllipse( pt, r, r ) + + # Determine if the given candidate for a label path makes sense + def isLabelPathValid(self,labelPath): + return os.path.isdir(labelPath) + + # Ask the user to select a label + # If you like, you can give an object ID for a better dialog texting + # Note that giving an object ID assumes that its current label is the default label + # If you dont, the message "Select new label" is used + # Return is (label, ok). 'ok' is false if the user pressed Cancel + def getLabelFromUser(self, defaultLabel = "", objID = -1): + # Reset the status bar to this message when leaving + restoreMessage = self.statusBar().currentMessage() + + # Update defaultLabel + if not defaultLabel: + defaultLabel = self.defaultLabel + + # List of possible labels + items = QtCore.QStringList(name2label.keys()) + items.sort() + default = items.indexOf(defaultLabel) + if default < 0: + self.statusBar().showMessage( 'The selected label is missing in the internal color map.' ) + return + + # Specify title + dlgTitle = "Select label" + message = dlgTitle + question = dlgTitle + if objID >= 0: + message = "Select new label for object {0} with current label {1}".format( objID, defaultLabel ) + question = "Label for object {0}".format(objID) + self.statusBar().showMessage(message) + + # Create and wait for dialog + (item, ok) = QtGui.QInputDialog.getItem(self, dlgTitle, question, items, default, False) + + # Process the answer a bit + item = str(item) + + # Restore message + self.statusBar().showMessage( restoreMessage ) + + # Return + return (item, ok) + + # Add a point to the drawn polygon + def addPtToPoly(self, pt): + self.drawPoly.append( pt ) + # Enable actions that need a polygon + for act in self.actPolyOrSelObj: + act.setEnabled(True) + + # Clear the drawn polygon + def clearPolygon(self): + # We do not clear, since the drawPoly might be a reference on an object one + self.drawPoly = QtGui.QPolygonF() + self.drawPolyClosed = False + # Disable actions that need a polygon + for act in self.actPolyOrSelObj: + act.setEnabled(bool(self.selObjs)) + for act in self.actClosedPoly: + act.setEnabled(False) + + # We just closed the polygon and need to deal with this situation + def closePolygon(self): + self.drawPolyClosed = True + for act in self.actClosedPoly: + act.setEnabled(True) + message = "What should I do with the polygon? Press n to create a new object, press Ctrl + Left Click to intersect with another object" + self.statusBar().showMessage(message) + + # Intersect the drawn polygon with the mouse object + # and create a new object with same label and so on + def intersectPolygon(self): + # Cannot do anything without labels + if not self.annotation: + return + # Cannot do anything without a single selected object + if self.mouseObj < 0: + return + # The selected object that is modified + obj = self.annotation.objects[self.mouseObj] + + # The intersection of the polygons + intersection = self.drawPoly.intersected( self.getPolygon(obj) ) + + if not intersection.isEmpty(): + # Ask the user for a label + self.drawPoly = intersection + (label, ok) = self.getLabelFromUser( obj.label ) + + if ok and label: + # Append and create the new object + self.appendObject( label , intersection ) + + # Clear the drawn polygon + self.clearPolygon() + + # Default message + self.statusBar().showMessage( self.defaultStatusbar ) + + # Deselect + self.deselectAllObjects() + # Redraw + self.update() + + # Merge the drawn polygon with the mouse object + # and create a new object with same label and so on + def mergePolygon(self): + # Cannot do anything without labels + if not self.annotation: + return + # Cannot do anything without a single selected object + if self.mouseObj < 0: + return + # The selected object that is modified + obj = self.annotation.objects[self.mouseObj] + + # The union of the polygons + union = self.drawPoly.united( self.getPolygon(obj) ) + + if not union.isEmpty(): + # Ask the user for a label + self.drawPoly = union + (label, ok) = self.getLabelFromUser( obj.label ) + + if ok and label: + # Append and create the new object + self.appendObject( label , union ) + + # Clear the drawn polygon + self.clearPolygon() + + # Default message + self.statusBar().showMessage( self.defaultStatusbar ) + + # Deselect + self.deselectAllObjects() + # Redraw + self.update() + + # Edit an object's polygon or clear the polygon if multiple objects are selected + def initPolygonFromObject(self): + # Cannot do anything without labels + if not self.annotation: + return + # Cannot do anything without any selected object + if not self.selObjs: + return + # If there are multiple objects selected, we clear the polygon + if len(self.selObjs) > 1: + self.clearPolygon() + self.update() + return + + # The selected object that is used for init + obj = self.annotation.objects[self.selObjs[-1]] + + # Make a reference to the polygon + self.drawPoly = self.getPolygon(obj) + + # Make sure its closed + self.drawPolyClosed = True + + # Update toolbar icons + # Enable actions that need a polygon + for act in self.actPolyOrSelObj: + act.setEnabled(True) + # Enable actions that need a closed polygon + for act in self.actClosedPoly: + act.setEnabled(True) + + # Redraw + self.update() + + # Create new object + def appendObject(self, label, polygon): + # Search the highest ID + newID = 0 + for obj in self.annotation.objects: + if obj.id >= newID: + newID = obj.id + 1 + + # New object + # Insert the object in the labels list + obj = CsObject() + obj.label = label + + obj.polygon = [ Point(p.x(),p.y()) for p in polygon ] + + obj.id = newID + obj.deleted = 0 + obj.verified = 0 + obj.user = getpass.getuser() + obj.updateDate() + + self.annotation.objects.append(obj) + + # Append to changes + self.addChange( "Created object {0} with label {1}".format( newID, label ) ) + + # Clear the drawn polygon + self.deselectAllObjects() + self.clearPolygon() + + # select the new object + self.mouseObj = 0 + self.selectObject() + + # Helper for leaving an image + # Returns true if the image can be left, false if not + # Checks for possible changes and asks the user if they should be saved + # If the user says yes, then they are saved and true is returned + def checkAndSave(self): + # Without changes it's ok to leave the image + if not self.changes: + return True + + # Backup of status message + restoreMessage = self.statusBar().currentMessage() + # Create the dialog + dlgTitle = "Save changes?" + self.statusBar().showMessage(dlgTitle) + text = "Do you want to save the following changes?\n" + for c in self.changes: + text += "- " + c + '\n' + buttons = QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard | QtGui.QMessageBox.Cancel + ret = QtGui.QMessageBox.question(self, dlgTitle, text, buttons, QtGui.QMessageBox.Save ) + proceed = False + # If the user selected yes -> save + if ret == QtGui.QMessageBox.Save: + proceed = self.save() + # If the user selected to discard the changes, clear them + elif ret == QtGui.QMessageBox.Discard: + self.clearChanges( ) + proceed = True + # Otherwise prevent leaving the image + else: + proceed = False + self.statusBar().showMessage( restoreMessage ) + return proceed + + # Actually save a screenshot + def doScreenshot(self): + # For creating the screenshot we re-use the label drawing function + # However, we draw in an image using a QPainter + + # Create such an image + img = QtGui.QImage( self.image ) + # Create a QPainter that can perform draw actions within a widget or image + qp = QtGui.QPainter() + # Begin drawing in the image + qp.begin(img) + + # Remember some settings + xoff = self.xoff + yoff = self.yoff + scale = self.scale + w = self.w + h = self.h + # Update scale + self.xoff = 0 + self.yoff = 0 + self.scale = 1 + self.w = self.image.width() + self.h = self.image.height() + # Detactivate the highlighted object + self.highlightObjs = [] + + # Blur the license plates + # make this variabel a member and use as option if desired + blurLicensePlates = True + if blurLicensePlates: + self.blurLicensePlates(qp) + + # Draw the labels on top + ignore = [] + if blurLicensePlates: + ignore.append( 'numberplate' ) + self.drawLabels(qp,ignore) + + # Finish drawing + qp.end() + # Reset scale and stuff + self.xoff = xoff + self.yoff = yoff + self.scale = scale + self.w = w + self.h = h + + # Generate the real filename for saving + file = self.config.screenshotFilename + # Replace occurance of %c with the city name (as directory) + # Generate the directory if necessary + cityIdx = file.find('%c') + if cityIdx >= 0: + if self.config.cityName: + dir = os.path.join( file[:cityIdx] , self.config.cityName ) + if not os.path.exists(dir): + os.makedirs(dir) + file = file.replace( '%c',self.config.cityName + '/', 1 ) + + if file.find('%c') > 0: + message = "Found multiple '%c' in screenshot filename. Not allowed" + file = None + else: + message = "Do not have a city name. Cannot replace '%c' in screenshot filename." + file = None + # Replace occurances of %i with the image filename (without extension) + if file: + file = file.replace( '%i',os.path.splitext(os.path.basename(self.config.currentFile))[0] ) + # Add extension .png if no extension given + if file: + if not os.path.splitext(file)[1]: + file += '.png' + # Save + if file: + success = img.save(file) + if success: + message = "Saved screenshot to " + file + else: + message = "Failed to save screenshot" + + self.statusBar().showMessage(message) + # Update to reset everything to the correct state + self.update() + + # Blur the license plates + # Argument is a qPainter + # Thus, only use this method for screenshots. + def blurLicensePlates(self,qp): + # license plate name + searchedNames = [ 'license plate' ] + + # the image + img = self.image + + # Draw all objects + for obj in self.annotation.objects: + # Some are flagged to not be drawn. Skip them + if not obj.draw: + continue + + # The label of the object + name = obj.label + # If we do not know a color for this label, skip + if not name2label.has_key( name ): + continue + # If we do not blur this label, skip + if not name in searchedNames: + continue + + # Scale the polygon properly + polyToDraw = self.getPolygon(obj) * QtGui.QTransform.fromScale(self.scale,self.scale) + bb = polyToDraw.boundingRect() + + # Get the mean color within the polygon + meanR = 0 + meanG = 0 + meanB = 0 + num = 0 + for y in range( max(int(bb.top()),0) , min(int(bb.bottom()+1.5),img.height()) ): + for x in range( max(int(bb.left()),0) , min(int(bb.right()+1.5),img.width()) ): + col = img.pixel(x,y) + meanR += QtGui.QColor(col).red() + meanG += QtGui.QColor(col).green() + meanB += QtGui.QColor(col).blue() + num += 1 + meanR /= float(num) + meanG /= float(num) + meanB /= float(num) + col = QtGui.QColor( meanR , meanG , meanB ) + qp.setPen(col) + brush = QtGui.QBrush( col, QtCore.Qt.SolidPattern ) + qp.setBrush(brush) + + # Default drawing + qp.drawPolygon( polyToDraw ) + + + # Update the object that is selected by the current mouse curser + def updateMouseObject(self): + self.mouseObj = -1 + if self.mousePosScaled is None: + return + if not self.annotation or not self.annotation.objects: + return + for idx in reversed(range(len(self.annotation.objects))): + obj = self.annotation.objects[idx] + if obj.draw and self.getPolygon(obj).containsPoint(self.mousePosScaled, QtCore.Qt.OddEvenFill): + self.mouseObj = idx + break + + # Print info about the currently selected object at the status bar + def infoOnSelectedObject(self): + if not self.selObjs: + return + objID = self.selObjs[-1] + if self.annotation and objID >= 0: + obj = self.annotation.objects[objID] + self.statusBar().showMessage("Label of object {0}: {1}".format(obj.id,obj.label)) + #else: + # self.statusBar().showMessage(self.defaultStatusbar) + + # Make the object selected by the mouse the real selected object + def selectObject(self): + # If there is no mouse selection, we are good + if self.mouseObj < 0: + self.deselectObject() + return + + # Append the object to selection if it's not in there + if not self.mouseObj in self.selObjs: + self.selObjs.append( self.mouseObj ) + # Otherwise remove the object + else: + self.deselectObject() + + # update polygon + self.initPolygonFromObject() + + # If we have selected objects make the toolbar actions active + if self.selObjs: + for act in self.actSelObj + self.actPolyOrSelObj: + act.setEnabled(True) + # If we have a single selected object make their toolbar actions active + for act in self.singleActSelObj: + act.setEnabled(len(self.selObjs) == 1) + + self.infoOnSelectedObject() + + # Deselect object + def deselectObject(self): + # If there is no object to deselect, we are good + if not self.selObjs: + return + # If the mouse does not select and object, remove the last one + if self.mouseObj < 0: + del self.selObjs[-1] + # Otherwise try to find the mouse obj in the list + if self.mouseObj in self.selObjs: + self.selObjs.remove(self.mouseObj) + + # No object left? + if not self.selObjs: + for act in self.actSelObj: + act.setEnabled(False) + for act in self.actPolyOrSelObj: + act.setEnabled(bool(self.drawPoly)) + # If we have a single selected object make their toolbar actions active + for act in self.singleActSelObj: + act.setEnabled(len(self.selObjs) == 1) + self.infoOnSelectedObject() + + # Deselect all objects + def deselectAllObjects(self): + # If there is no object to deselect, we are good + self.selObjs = [] + self.mouseObj = -1 + for act in self.actSelObj: + act.setEnabled(False) + # If we have a single selected object make their toolbar actions active + for act in self.singleActSelObj: + act.setEnabled(len(self.selObjs) == 1) + self.infoOnSelectedObject() + + # Modify the layer of the selected object + # Move the layer up (negative offset) or down (postive offset) + def modifyLayer(self, offset): + # Cannot do anything without labels + if not self.annotation: + return + # Cannot do anything without a single selected object + if len(self.selObjs) != 1: + return + + # The selected object that is modified + obj = self.annotation.objects[self.selObjs[-1]] + # The index in the label list we are right now + oldidx = self.selObjs[-1] + # The index we want to move to + newidx = oldidx + offset + + # Make sure not not exceed zero and the list + newidx = max(newidx,0) + newidx = min(newidx,len(self.annotation.objects)-1) + + # If new and old idx are equal, there is nothing to do + if oldidx == newidx: + return + + # Move the entry in the labels list + self.annotation.objects.insert(newidx, self.annotation.objects.pop(oldidx)) + + # Update the selected object to the new index + self.selObjs[-1] = newidx + self.statusBar().showMessage("Moved object {0} with label {1} to layer {2}".format(obj.id,obj.label,newidx)) + + # Check if we moved the object the first time + if not obj.id in self.changedLayer: + self.changedLayer.append(obj.id) + self.addChange( "Changed layer for object {0} with label {1}".format( obj.id, obj.label ) ) + + # Add a new change + def addChange(self, text): + if not text: + return + + self.changes.append( text ) + for act in self.actChanges: + act.setEnabled(True) + + # Clear list of changes + def clearChanges(self): + self.changes = [] + self.changedLayer = [] + self.changedPolygon = [] + for act in self.actChanges: + act.setEnabled(False) + + # Clear the current labels + def clearAnnotation(self): + self.annotation = None + self.clearChanges() + self.deselectAllObjects() + self.clearPolygon() + self.config.currentLabelFile = "" + + def clearCorrections(self): + self.correctionXML = None + self.corrections = [] + #self.clearChanges() #TODO perhaps? + #self.clearPolygon() + self.config.currentCorrectionFile = "" + + # Get the filename where to load/save labels + # Returns empty string if not possible + # Set the createDirs to true, if you want to create needed directories + def getLabelFilename( self , createDirs = False ): + # We need the name of the current city + if not self.config.cityName: + return "" + # And we need to have a directory where labels should be searched + if not self.config.labelPath: + return "" + # Without the name of the current images, there is also nothing we can do + if not self.config.currentFile: + return "" + # Check if the label directory is valid. This folder is selected by the user + # and thus expected to exist + if not self.isLabelPathValid(self.config.labelPath): + return "" + # Dirs are not automatically created in this version of the tool + if not os.path.isdir( self.config.labelPath ): + return "" + + labelDir = self.config.labelPath + + # extension of ground truth files + if self.config.gtType: + ext = self.gtExt.format('_'+self.config.gtType) + else: + ext = self.gtExt.format('') + # Generate the filename of the label file + filename = os.path.basename( self.config.currentFile ) + filename = filename.replace( self.imageExt , ext ) + filename = os.path.join( labelDir , filename ) + filename = os.path.normpath(filename) + return filename + + # Get the filename where to load/save labels + # Returns empty string if not possible + # Set the createDirs to true, if you want to create needed directories + def getCorrectionFilename( self , createDirs = False ): + # And we need to have a directory where corrections are stored + if not self.config.correctionPath: + return "" + # Without the name of the current images, there is also nothing we can do + if not self.config.currentFile: + return "" + + # Folder where to store the labels + correctionDir = self.config.correctionPath + + # If the folder does not exist, create it if allowed + if not os.path.isdir( correctionDir ): + if createDirs: + os.makedirs( correctionDir ) + if not os.path.isdir( correctionDir ): + return "" + else: + return "" + + # Generate the filename of the label file + filename = os.path.basename( self.config.currentFile ) + filename = filename.replace( self.imageExt ,'.xml') + filename = os.path.join( correctionDir , filename ) + filename = os.path.normpath(filename) + return filename + + # Disable the popup menu on right click + def createPopupMenu(self): + pass + + +def main(): + + app = QtGui.QApplication(sys.argv) + + tool = CityscapesLabelTool() + + sys.exit(app.exec_()) + + +if __name__ == '__main__': + main() diff --git a/scripts/annotation/icons/back.png b/scripts/annotation/icons/back.png new file mode 100644 index 0000000000000000000000000000000000000000..77a7c54723f162fbde5cbb554ec5a97d6494e3eb GIT binary patch literal 6124 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 literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/checked6.png b/scripts/annotation/icons/checked6.png new file mode 100644 index 0000000000000000000000000000000000000000..4f10a73e516c4e9653d14512704d96983d05d392 GIT binary patch literal 12493 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�v^7-UJnlglksPrew~&imoA=+c3o7VP$u=;VVmbQvo+hUh;lw7+wGpW z&MY{*;xlA{B6E8}c$w+STMPU=WaPQsBLclKuyG~(T~eGL{_Am~J!e5g#U3W|6iQhK zYa4K6wr3hgbLk6VaNpjO>{(F7Z2@01mAXC6=INd~s|Gp_p~Nj2T2V!GeClj448Mm``p`8u1P?#KN>X+6 z?aEMQvkjjS(Y2ckQh1)<2DfB2Kx-MZ5__a+BPhOA)cCKMscWW2lyp<#C=^0ZOrZLV za77U5{y|mQ=xbT$P>*$U$ym)OV=lo52&v9OR?O#5WpHi7!~bgn|8+kUEB)jes&XRx zfH;u+wp1Qd;hc*gz|A0Ifd=tB%+I~YA;T`7C)Ssa2Meq=EasjeU)N$ALABhX`}>xE z%Uagj@ab)aO!SXEY^?t{332|@oQU!EVp-LunM0H=5B>Z6M!l_$4x%2ial|lwO_C+? z4A@cr{A&>vH-mHgUSRgZUnDkVQ6Z2u>;1FHjHbW~?+$}G##8Bb>H}pcexe)hcKGzI zh`h#_AFVAzn9p4e)b6O)=}s=OtaZF~$Lf4MFStaJLLbtz=1ekb_e#dmHkSqA^1ZVm zcZ@V8i!vlY0X<}W4iVH;WH)=uMl+fNgQAVt7P;NoR0qPee`t|~hlQLK%Du!7#2A)$ zoOjZE!*uJ{A?<21bG^gSb>3zKe8`?)jgl z9%8!TlF0#garh~Pat;Cbe#=|Jxj9*oD{EI?#DSr*zb+K80FX_5%C<2&oN*|taMUWkw?7`Z<5(#dPhMi1c@I~^4 z!R2snbx`?%KQV=L1HP-Y7jpu*eq>C#!vTXs+4nIVKau9BAd~{zY%$VA2#Bo#w2^TZ z+aKV~>q#!D8EKx*iO@0@fr&bFV#Oo$eceD1&-6))nKX)KD$E2I-C)%{ zSe@)}Wfl-47i<(tLz~Oh8=tXp^C|&EqnI>aFPU1-& z#7jgiOB~WbDmN9AIp#?H%BW?tepSBH6t64@#4aPa*)Fif+zY*LOwN!jVCvN=`R+1r ztcrE8*>xj}`aeNDL@wM)EmJ(=_z5{sdD49_XnO~#f#7DTL4Uwy9#zJYlHH$5b1MXB zZ=8htGp}97lQSqTRMVlp3x^)`l$9t~S|UDP;SOHAb@-HPf0RL;ny(kv0&tEZIk&E8 z?Oh2{rmhX*AMQSU>3(bD&f+#S24T_6=h!;VI^{a|bohO=%>}Zja_oY%i-SM)V?)HO zH;D0a>kaq- literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/checked6_red.png b/scripts/annotation/icons/checked6_red.png new file mode 100644 index 0000000000000000000000000000000000000000..a96c569f244f70ca735f29cc7d2a29e205daf73d GIT binary patch literal 1050910 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 Ke&Qd$>Hh;!N{FQZ literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/clearpolygon.png b/scripts/annotation/icons/clearpolygon.png new file mode 100644 index 0000000000000000000000000000000000000000..7b816c5e54bf97ee725be2a0a85bd896400710b4 GIT binary patch literal 1050910 zcmeI52fQ6sxxNob4Uj@FAvvKF2uPQ1Vkn0$M#XC{Sgv~U{y{}i5>eEPHCOMoT@+C- z7ePem+Gmv!>yGH^>RP2|->HXobuF#8OLwiXoL-(e`sSDPvfPLE-)Cyq0{)$J-YGxO zCo6tt-*+9^)iv@`wA6oXF>*b9xcpH)2ky0e?{X`Q+;QR+?_EdVb$9hlojmR6rMgDX zm^WQp*i66#Ouz(8zywUd1WdpLOuz(8zywUd1WdpLOuz)9Bd}C-9@(MN5#Z8-%>+!q z1Wcej1l;+Tr>^4j^xr2eby6}Hpusx_0}U|z)&xwz1WH7}K|zTs%dVP$37CKhm_Swp z2ml-eWJS~In1BhGfC-p@37CKhn1BhGfC-p@379}N2>fZAGtM4lE`Ouz(6MS$bj7-@pExiqQ& zbwjkJ<@H`P5rO4^g2&kAjN8wF=qc_y zLSVGYv7dCZL?@YrNQ*Q{J2vx)TWmFAe@wsxOuz&RBe0@!I#9Yo%A&&`Dh=`=FY=7V z90bHt6ZXRdOuz(8pb!FUDVO7MHe2 zDbLQmm9+5%pVC-k$L}-uG{n43egxM0!Y5xHZZ5$5>7!=k=Ydl;0TVER_6RJipB*8! z(pwj~ExzI7Q09nWC_4Vm1WdpLOuz&N5ZGFOKPwg4p|_J4KH}?O=FWdGD*ns_Ouz(8 zzyt;%K&N?>)J|s{@;CTAaLhjm00t?hKQaLmFaZ-V0TW0FjMAG6rH~zYCwb#LWx!hP z{09aPeX00=6UczTecw6im&45k$RHahVFD�v!_=uM|4zh-3OKWogA62(&`W+nRt0 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 B&Sd}q literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/deleteobject.png b/scripts/annotation/icons/deleteobject.png new file mode 100644 index 0000000000000000000000000000000000000000..e9fb87c0b915fbe8b26b1af174d5df885cb54376 GIT binary patch literal 1050910 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 NDa%*OPsC^L{|}!8qX+;1 literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/filepath.png b/scripts/annotation/icons/filepath.png new file mode 100644 index 0000000000000000000000000000000000000000..2c6cde3031fdd533b5f87ea46c89f75fe38950e7 GIT binary patch literal 14178 zcmXwg2Uru&^YK7XwA@r7r3JOw!0#X$sT|lLVb|{J< zy$DhxN^hYE0RsFFfA5>;flKagcV=g2XQzDjshNo((@CzA001zdQF;~t0EfQ9ffMx5 zWh-cK54zC$>7cDnK%cM^w_~8+3_hqEegMG8cKine(lgHifB=BjyJ8iTxiS&l;AkDb zw%+51KdmD`dt%c$twZEv=W8Fj7FeNeZ!XqWlKI{FYPXffs+Fpc^2Q(U*-yt>TJscR zX`a0ZriZ=yE|4s63#Fr@GrQlWdP!XTUeJ?+<*Cuo$jS2IotHp+yR5r(c2)OiX!(SW z#i|%A1IU1L(+n846G2t*MGOD+!?2SVVQI>g-@Skocgou+Eg7E9hb^Vl-7x3w^RE;{ zj81wppdY*HBLx&}8Pi}M8d76G#z(jQsf)!Rp9YJ%Mp^;34Y4_rn4^U#jgc^OyNm=Z zB8>%%=haTNZ%1i)8Sbq%v~$2&m}Xm!yLBOCoj`|^;Mx*jY5QB7xGRRgp@tXtw^&>K7U->ICbSFGrD#^^ylB17QP=s#FC-ewz_o8q?168hRDh8LOkiX2Jxw1r z*GoQK&WH4NUJl=BhvVVzWa z&E*4oEiuLuBup0TXA09yFSsm4BZG)IL5;x-zPD150jv}<;NncPr+Gdb3TIXvyE+B^S z9B{4H&rhs`kbuPZ6fhJghkXup<+~;2qv(2xeA`DFKlt$gouDr*s3GSW$Eg;JPDME4 zM65e$`xTG;TO-rBENAR>RTug#Wkm0IdXgMKn$}1kF3W;(mIk(|+ePqT7VNVM&4v6X z7ShLk3oQ-0Fb-uzkYFu`btWV5_dj8h6iF768NcVIkL-!5|XNh?{!|HGt+@?FZuUBt^i4YSBFl z%Mp~ORd=&>@rAv9e@!sF=E&UnGwG&C)!GeGGC}vTx`Ua;m{=0uT=QSbH=xP1%wr!*m>$<9#sxCC-V&$-dij@)i2*@+7(x8r>~#Wna3q^U z%rui8^0kj0+=<5POS@BXy)dMqo7gUB5Epw=y~^6bXxtjj{x7e@!L!oN{QVg!sqh-$ zyN;yA39YS+g}(&0)_@opJ&W3XoE*+c51H#5%<%d~03bsj@i4iWa9g~;3#SFIW-8Mc z-8iEyca8p#gCbL51Wn6ErQE^?@FdBgLCP%D5nkB*8TS!g5{7nb(;$2S75W|*MmErz zImux+ao-FMUlq2v7=oP{e49; z5?r3w8RSF)Lw={oYZM_C^e%;$9MC^TZ_PSMYs>3Sa|92A*~&sxx!kyX7D)-$r!PEw zNn+MkSiYwEHLz!1N5qw#Q+0*gc7_zK&fy5zlC6(h)%p$6=x z(`V}5L>pPKhcgDrUX&%Ce%DT?oxM#Pfh}KtX%)Uh;|*Vpm(eTPJfj^k$vlpQgdZ}( zP|FZxhY`G)WeWS_a&m#^C=w8ZG!LzxPMfJ661ICC>>u%^b%cNW5fk z(~DQ)SQp$_9;53?Z@5$s1309-Yt)abhL^$OV`T^z8W69KZi0q5KXlKht9XNIjs?o* zE`g?R&`<{0b3a37@9&Dh6V|J+!->pHL|R)uJCpEW7VV=_L>RxaD)BVBxG)FqP45^d zLx{Hrw%YCza7$T-_`!?}oD%Rcm$8T&349rQTIs1ESIdkpj*Z5;U=ewYMQl0n^FLr< zmGZ88SPv{!ADM*vj`9?IekYU^;@mv1v)Iauo#tVno=f9$i21O2dg15n%evVSG#2h4Zf0Pp3-niV+;WzAEJNERfMkWiDKblN-gSPfM9 zU<8xTxr=o%xmKL_;7&0zxyAMXX3YiE(nr3r7^k7e$uBt3NJ)|1>w)v#XZwXn3g8mf z;UsmmV>lWY884&L)eG0`F6OSirs1ct5Ov3JPjYXKGb>`0fpTI&Gj6`QV8Q!P+#;t6 zYkFF1#CZJ%oC*(OnQ5xHu(!sW^}&OoA+<90BY`E7g)Jwt)xq;Gnvo*E9yNY8qXZX7 z!_6wZx5l4!LJq~)=ss53XC?Z0Uu z?Z>W3UfZ#JgZVX`^qQt2TDm6u%zZ0ovg|9d;po5@J%UXR*SvQT1bA2`rNx8TQw0_g z)LQ+{PH6VE_o;$oXr+e+H3|?wEvX-5481i9|O& z)`7`pDgXJlpVBQ9K~C@X<@cc+$Z?avw=i|dcJW}C?FD~fsrHc#I(Tn%PW{_l^B z)c`LlWEit0ppbXevme}{@wWU_-wIcj>d$AG%_2rzm>kQ9cO|ox+zPF_A(bTWepisJ zvZ%CPes-d%uP9F%U2i4JI@NTyOPyx8Y@-vXaO10r4hT zo>y+3kP>Uk>RJpwJ#u@i%#y7XF@BZmEMGEb_vgViZ_eB?RaN5(UNZ0W*l1~XM&S?P z&l0^Nq%+fqH#c57CB-j#;^!3;Op+VmwV4z}rIHOc=V{xl{5@CLkqMO~ccF&HFnO5s z;LcO8{dsv~#vooF~ke@f-0cz^nPyp4Q3uS6Q`o-Z8{D}Iny)U zagA+Dh4fEX6XwtVWT{P}9Nzbxr3rmLY+juI4lDkY|F&`00O)G9*>D)~Y&CWM{!19N z)24pS-G5sYoVlkJGOoNt`W=y^!e6s*$Tp$W*Oz`bk?-;I)r|aE1Lu_oq3D;rpN?MT zZk!;eKL{=SnY({pm1|-NJ(XmzW6tKMsmW=^c#l;pEj?w1z}EZ2GcPh-hFG4P_ug1o zBcEf!)VR~Bx=*WP#GF#x{lSml=e}B&us~CDZr(PJiE5J~u{r(4+o+YYlcUTz@1@n8 zX!9!vRQ96gHDlvPmDmGmI=bb+@1qMmGm!bm)XldHyrA+0dD>~@{mR{!QC%E=Kp|+q zs-sIAx9K_0ILE4WKON7Adp@?r@mzp-l$*EeK~IgN9J*gUeAnn@UODiTU&{DfELcxA z`RS;?~lDVEqI(^y%7n;@p>( zYMUoN5PSj=iGvzbVBme^1)^47-hZWxVbPSs($H0!AMPJbt?(SohY@q4q@D-goA37> zaPhJi&@~`!uZ1=LP;v6E(Y1;XJgs$pF%z*)r+IK@qNdM$eOox|6X!&YfA`qv%BjD@ zG6Z+IKAPOJy3=Ws0p5j{eFxmUf7_l=UTAAUYvBFLq?uFc^Pc@3xg4-&=dT@x-_Y}6SW#5h5(1aeixP@2kI4xJDOui?DLVROTm zOz~xc#XNlnyu2@eJCj_e_v_<>{f{4e=%p9tsx^7lagKb5iZENt-B(wY=urecTX%vd zHk2pDtA*Y zL&KSj6PZR~Q^V5Y$B)NtK#yrPqRH-gzE!ph#G|~tbJC=>n6)F-85QSP6V)p#?l3L! zrsO5OC|Jb%7rQ4I!lP&Sev&~-G=gVP6!}ZZDttX)TCGOrm1)Q`o%P%{9n9G^CJ;W| zrsFUzJV-YNuQ`nE*rcR6ndG+VVqQc?Ve48GqE-K>I1hBEYZi5IcWfw*EKnivEnLs>go+ zOvJ}er~3C(m7d8EruoFPZ2oFPu8Qt}c+0p}RQmmUq{|I?jn_Y-JXO?)iG6<}7)Ut} zHr9qdgObPYVD>&Lhcm$dY4IQf$ax0sVa(zYj0KCqX_$bA8|)eexp`rpH0nCkb44M{ zixm?_$xGW~w@J*-1@k%*%Mbb`4wFc#^40mK59=c6FZ|@IJt>RWnwEh)+@F#++W(#b z4ShD&zE~364-;sI1&c=cgu+ugAx1wrGH0?ow4!|N!`Faurc!nXl)eUI!^v84;_0d{ zynuBJA2>rW93QNE49eUNaMF)g19HB!H`{&02}5jKl};s^u!IW|6Q8BS!^DU&T7GJ^`)^f{;^Ow%@T3=_RoLqM)e5O(myIuCS z5jWEsh#K0^b=E-S2j}`?()b$Pjk}vnW;`)9Uxv3B{zLrIy2{k7A zf!Z%WoE~Y;_-a#~+h&Ea;*SPmpYmH;cQ_EfpBEG|g{$-S?5_=~VKZ`L6A7&Lj16kU zm}ftkltqa#ABFcb3Wk;XZ+8g04Rif}KQ z>UbG~P&TX@G5c~i+92%uu3#p0tm*`XEt4v0{oM~l6LwzQ596lchkU6iMX|;znUMOo z61$tL={MNVXnf7h3)wfCZnL%CfQv@@*>5w0(byuV?=u<+#Q|PA%4TknD(kj*1f4<1%93D3ckp9XhKqnVUBoq_zJ0-N{#s z9=&(C0|}+P*pDdLxZV*Np+-kb{Nk(;D4Q2sh;@B|k;6|=K#G?^`E#Vc$~TS!k{Sz3yR|K2>{1q2<-jPo_Ov-4 zAKEnHNmH_s+vbQFyaw$u+rB+);LQm|ALdE@FyUEfEz25O$mu6E&lkS>AWPrkPCFkxNCLz()>5?I*3=F&ex=pt^t=1)IIu@_ZX#nDY+SdBga7#0O@{Kgw z*pD+iKs7rH`+M*2m;GSGsy}!ooVsVdbFPAWVd8{aS$-sP*%Ihd%))FeaP&RCy(~ep zKA?O$7=?}Siyy61RZI@?>7LBw?0KQfJ6D}^BEo(}NCQ_@T3>%^dV=^5b%sFGD-$Cl z|TTj$PdbaZMm`EMnw9@Zx-fWpK?!TmL;dPB{{J0Tn(X`!UKVESnpLfY{vY+ z-&L+4`jK?_RI%+AGx$__H{q@dSrgJcSCQ|ioFuNFUkPnXjFww)uwKP5P|?Q@!-{|L zo*TQF7yHfjjh{!-n0F|=21)t5_~%AHj@fa4*vAo`Xj8-BqqPtRyjz$dd}Ir;`NNEz zI!IXc_SqQzc9SVVeq4$a357iG<#HL%d2ub6Wz72}`*p4mGVDaqE3Z%?QWy6&)!I7g z@&l$SOU_o&kPFUQnK6Yw!uZ9C6loZtbFyv@$dd^3LQjY|inV!s-Psxy(IReXlH0Ua zn_s83My30k0MVvPzR!C;UbWa^7CH1&A6_2Ot%rZHhbuQ?%gqgsU{qD&33PDiHTe_}zf1Qas^`8ov8e!l8YSv}x~errE|-fQQCo^!IRKo@}yX zj0k$Miv|qt)4zS+h*bCu-egFXfZEb3F1q=;sA;NsW z&xN>Jq5EUH#SS+$YC6T|S*ZiW^VO?2PIycjLgJW z86&I zxa+e()5TvqKZfd{m>0?|J*)>l8`GLdZL(|yeI5Gv0+U)SQq&v(q_7>;!|Dq-UW)in8@5KS&b_z;e$7(+Pic(e-HIGPwexBoE>d)b+UYO>_=Isr_TFhN z5Af|^*Qm-DDYBF%8BA*(`E~S!y7eh`3OKCAAI8qUa0zuYM_VYF2pw)}6-d!5&J$p2 zjkG@M8ckuZ@2(;uxEvmdDD+0+yXnm?KV@zfT*1J6?4z5TRyB=?f);qIvbRB7dp^8f zeOcq3N{=zU;EVWokD8zY z212U(jR;DP9el}>0w#NdrK%+~b}hY0{cC(Nm;jhFw*vs#L<QfZJV7N=(NY~og5yw2-|kT7nABKDL-C*&HUVE z2Q(CeI>pPr{TZi4(ZQiywUA$NElwpmp$f3&A1N8RDY0bOM~A|X&fW|7AiKbX6XtS< z`JDG`GJ6e^iIdUB4_5OVA`_o7#692xgBXDpCNQ~AA9{cLgik0mz;pgG{7?gJ{*y&Q zHF%Mt5bClCGtY`vT=f?%SQ_KC6(g0Q4MULTxQ*%uHF5@II?3<~n6NtMrBP=O zJSw?a#JbM`)P)wKGgrj`>gZM_9d_)fy(gD3QN;fa9eERKb!qwzwvPkIbCkQE=41d3 ze=$Ah7ut{!d$4bdvX=VvSwy6$qf8*{&nU)I7RU$cw`x+Z)}FLI2kB>#`zCe?vZ-Jh z_~+M=FM$qRB@_VZ-S33a#Z5+ejNd>#(#+?h85AS7ao@>ERQbM0(H`}#%ncW>K-k3( z1vs^19r?R#;~W6Z9JKr9OOpNZcq_zrtR$qLU@aq-0pyz*#8?ZJ#B-|{;o z(}COI=-ZdcvWQrbq3E223g(M`^Udd)fRU<7i;cfR+5FOI{|)#4pEAZZqdZz+unN1U zkN+$hs4MH>7jLur7(wLD`N2rcSUY{Zm0?6R%f8qYFIGVXB~lbY_2Az&j&T3hBc50m zS^mJ@`SUfztN~IGEiw2NES(p6C=L8@Az#{gqXvwT{v4f#HWw?y9>7!&$?C!D{Qc$8 zMGUM$cem>H+%{wu(BXb|7#QbB#EhvuPzoi}MTSyy)^%q?kU)u_56U8Zms6_)?!3<$ zace+XS){0`ftJJ!#$?k(Ade;N%?ERYw!RTAMl45#!!_xjwY;{h{~p+oOxCtf@xdxK zcz~P)s~0~g&3eVs%?oCam~cNO1A*%JQa!xL%e(Hj{tO^Q7TpC^Y48O4QF^G*f*+JG zSphuQY$1a!(c`8DWFR<%(D;szoTWDbk2C+fonPSwt8jG|g!E56Lr3+|oii26)f@_G z2v||O`Uw=P4UkOlv+sl_h`GY#{`W2aCkDI42cYqTJlrh6Kwe3r2>NaM>M`Nj2QUG& z1&!xFE@mGfj(PF@->r*4DYwI8h?Ai~m~+;=gb3QA=m#f|uXkM#jlWt2`SW-Yg`Ts> z<4Zy+AcA%i`1if{1?XyPV2^Pja$6fzFYQ~sj3Y*vN!z6P{%<`%r z&4=&qmYkQQ&y|E&o8bmh^r4xBh;;rF(eHmEy1Dp|;Twv8)blbONQfOq$E17vVa~Vy zM~>0qScdA1^jNz8QLO_KMT&3@w8ulNqdERBeGZs4{5OEV)4)Y>;z=~#s`#hOG56U} z*$2At1^ye#|Nj4PK$$RSoBvVhsXgv7INJ-BjQ!I0vhe*)$e!SApvr;4P3BSsKnj-4 zB4YsY_WOqOPmrXg&U@o2B*88z;9pPQ2cXF#Tm5hHOk0ZSz~8vXka#xKng7vFZ*v}k zliq_mkgS8pVaLqdjKO@4r6pIYI9G$EBUl!tr#t!oOvDowYw?s_vCEt1)N%eZ%uoU0 zOJ+x;oSp%R7VQk@fImEH;k{EC4qq|MwqZf~~ z4Tn~SmSR?v9)7W{XZw~P6|x!=q8#`V-DC5|-rckPfCE?sKp5D1yd6D$b*e##7;~z0 z+qg*$a8EzE%z3=bF7D$wV8%+b%;0D6(}r7n%CW)VkH{|&2l#mRWS__aDX_p48N}3IO{WzPgFuR>3R_ByzhFVpGZO0r->Em^1 znZ$n6wqu0qBKW*x-u^BtK%>ZgM+asRLSgCMSA@|+b4q>{FIclTxLsl7Gd|u^-`l5d zfiI33cgUdUIqRTDze>-+bd;JmF(2R(>0b1xouH2uDN1K&lX|FUI$>R>Y zh^%cS`xdviKwbU17vL+opa2SUtvwIC&S7VChZoj)EIRqJF03vjy4Ey5N)RKqKy>gtY=(A*awjd-2nLqv~5~^ z8`q!P49F3?8jr<+}z(G020(_3i;rDG1>z7<<8|-EVb-pU23vni~(8ga$ zua$AV?u@NGM&R3ZNZMT z5nlBN+zWF2wF;=E0|v`?_xGY5sM)G&r$%IrNkquk}aFY zEMu?YRUZhh=j^N8xv+31{6d+;FIlU%QgnB>`(NV;)l}99HdXcJ#eBi~#;AjbGLcRW z#=zlmXyb-W=>N&7XiRSOimP z-8r>`=M$?y=OC<1nM!kA|ILM|-#DDGdaU9sS zeH;gt2}5yU=SCVvG^5b{G1F&*l=W>;#k2kARVIePo zvYQy@fTHKyx};;T*n*Dglu0%86QwggJRsXlmnZy5pP|^k{&7}ACQq1Y#wF5aPI^LV zCH>iCgdKMfPntP-_+4xUDzHihDn(=W$=k&U$-=Zl zSi67HMRuwFL)x!)AaDpXkz8*n5KM-#|`D*6>Svs6KduQRW$XeK_xnOEkE;anx3Aju>Pjw zTyvaJV>`~M-5rU=nA&bZFKA9eDYeqhmD%UmDfrS$$~~K*a4=%qi6_$-J85SjGxG8Q3wX5$<|MV=Q}Q7TS5At~Be=Q4=6?T~D(f-t|HFSvxB>Y( zxuK^1uFYe;g!l7>lThg~&RW#(KFEaU7jJq~g4ZV)!HUc0FLCe=4Znd5-EpSz{c3t$ zD63uP5{xC8FLZ#yN4E{jh7>ToZwuY~-TrSSgAey{`JH`Te&KR^?483mcP42n`qfFv zut+cK##0oIg_*1P7xic`5K4r%ik}bONT^g?$oxGoohtDKDLG`hRr@S{aW1wsp+sV) zW^1?eh^H}`@}&Hx$x`v#mmlXZvGWdn=WIFLkwaz82HU@6a|ZpmJ{8I}M~oV~40mNiMLxAWx4IY%r~VL!Mtp9bTL!JY z4pq7MW(vGMpl`Bj%X(Uk@Jt1fllT8K-mzODQ}dUszEJIuD-L!U$=!&U)fW=8YsCBB zGr}QMD5L%tJ>6!?E*Fh4!#|;1T<5hMqTYb=;p%z`S@VVIlZH?--mQB%x6$2OniMgu zR`Be`$%dv)vFr4?Z6+8i4RKPq-NdX(L!i5rA=}gy>n=Fyb$5n+OKzJn#!9-J)=?;8 z+)5!jaD19+(`8z%sQ4A*@>p=Pq}f*5)A-`wK*RNtRQulG5kGRI^1d=YRIy{6V(WF!7U1nEYS2$eoOgc_LH}Jh+->Rj8?FDa8=`cWjNG{TFIltttK$9Z&xitwN>$RUdu& z6&B|Y%j{B;`QBJzdroTsi)mlL1*i`qa$>m8{3r`1CD>HHly)=#HF8eI**)c__3yfe zW$@g2LS&t2gI>7?Z_*3nA68I0Rs9~ma-vf_;^Lq}D!^Se!M$jOIWjOjc+aq4-PCtr zH{3~A?OCrhc)j3^mcU|W8*1)RNl;%nH!u6zX;NV8j%U_pN_D92TZ-6vRBrc;Yaw!Z z(e&(+M5nyG=}IgM%;@Rbujch+(9hjH=G-fK1~RK<-m zUGszr!XHwT9WiVgsKxAk?8MkI+jD86Y+l~v3Y|JC%;|^5CN2xQNw@wEH}gl7bO36H zPUM>F{i{vG`csaCruW}7tV>6-KTuqcdV8UccBG-vtM5eazO3qEw@pxLcngIUrUn#Mz}?pi#>`Wm$0b74%FX+8niMd-pV$5> zT0HZ|t@|a7GGvJSxdWJtUwPpww>ing2YXi))&-{#nP|JL$Sb3J9>w#T zF(#JAa82!y@-Pg48m6?4E0-=)m-<@n!VbJ`ptIg9Z%k9wctB`k;%KV1rV+h+ri;4l zTKN<-jo}ZwYh9Kfyo1oI3C5&DT&PZujhA*LtbhIUHT_uvVm57!MlHV2+yBhOk3QFj zS=b|yrgvS7b$qt>;vy_*JRYv~cV9BXM&=#P`54ytVHTI~5R9Jl8D={ja;IGi87@Kx z0NH{OX6Xta&rvQ{bQLyU_v~BY&QeWh$TZ@r?^|*I(K!GHeU2-K*}+7KIS&Mes-@;&jHUA2->{x$zfo#?$%jrzY|FNloqzQIu^6Pn!2x&1Uhd z))}odV{Zr{ptyf}W0XC{D|P9H?cDb2bPC`QWJ^{COa$kSpKJXbdbk(ORm4_m)$>bm&xH`1_zm? zmBrUGECqHQKiQ|5yrFm0m}i;diB3MWCN#w#hGtCvu5P~i>pAXkPdS?ZeEq=G+WFk0 z?7oFmjtT_%0crcxVRnA=`jcjvTI>Es7Mdd^;)$2jf}}Z67AJ{Xi#vZ+OT0zm{D$0p zE+1tw7paQ!DK%f2k>Y`2wf+Ntt+a;Ftf!ddqZ^xyPz(fYn@KF92 zKOK*rf@zdhpbZdtCB(CqNP@o(EWkU`UKS*tew=1Z3?z-VP`PXeTh;<$y-n?46Twi0 zMKJ42^A)XU7TYQKc#oq1jG*-_{Pnpu8f2p8>p_oLtetI@KrLU;-8iQ;xHE>E29Yeb zABCP;**{8igdfsUT%i_o@Yl+Q01~!jfXrQ1zoME%-fkKHy4aJY1R)He^aa!1wHE%G zlch$%Au#2XE&1pWXf(F_FfE$95EOU0OO#h(Y-=akNk4tLK>zrL(8T!e5`+MC<0OFuWq@7>UT$%;O(BN+lqYG=xm@rOB=aoH zY9s%{r{BG>;2FWsPp!K;s{yRX15GR*XQ6odBHV6671DaX42bpI>e058Doe1I4ji1?;xU2x0u@bly|Q~sp_Es zp#}15CWz*sau0kB9svn~_?ua~Dm+vfoUzvY@~BlPfzAD#4rnT4Ce+miW^VVcJv z>1`=82Z=T;+bUP~29kK^m{)1K5gZsF9P|$qI9vB?RN#uZM=pluQHnQQ9Mx)!; zp9e8(YfR9Dv8ORN2toY}RX(&@>@{N-u4ImBokHo;xW#AC6tRo zyKr|(zoqKDr3^3_{};=WSjJn1gmC$NU38jEVc8f;syw9Ai>*&U1WxXOpuo&+8L~=$ ztCkvczTgof;P0Z_9}m7F7@iRQk_PQDktROU#pj>~U+4+?(0wJAs}gMmsHHFaRb z3mpp)Dm4u88$sZtqui4gml^u^)w^kC5fJ7(vVy}$)rWtx_btE5Og<|aB>tuQLRX$uvoejC+dU4D1>lzG4;(MIjhHp>qW< z@@_!7{1FGOJt6etj8oJLKJ4pLuAIrbWx!fX(H5l0hXc zMFl#Z^56LM^;vtM&`l9;!qfRHNc-7;(!vv8jxX)TgLOdF!wr*GxzoQR#b_K^kj{`I`qAMQ z($Eo+fot^4&{B?vZ+|&rNq3|3VRZd;B}XD?#P!@07#Urs`$2QnC>4q=u<|0?hrE zODKlgv%3Ik=uzI0mzCPKyM9ReiD1^+d#F`D>bg0#+i~#~BT&>#kMdR+=Nq|YTir$z zJ4?gD+^(w|LFF~svY3LZM$?rjQ$Y`nG|wm0TF#0E=euT&N7t_dJ-|n70j>a5{w3UF zB*Aa}M(72-Ax$fSSi1I2T92zCM=e_|9v7GAEYYdlKLmLLZfQkt1&v?s ze~!_OY)Zr^cR#$P70H@r9P-F(CP7lp{bJ9wq|e*ZgUC{__<6+rWitT!p!H4k%5KJbIZ3VB_>Bwij^y&T*>k2 z+qdIO$Z{pezLmR}a^?KL{r(;gk8Q8LkJt5neO|BE`?+iO$82$%RK#(#-v9fTC$oV-C zo^#*n-oniB9in?HA=IJs4&&BV;|}A>%E}KO?7Hr=w{Y_L<@Ti?&D(mqLYOCca z5>vILIC;a$xS$xmM?;kq{iBj}HaRIOy>n~-rhat4xUqaTS<_G+qC2RuYT%c!5j-u_ zjkDt(GimwTmyhAyc-8;Wih8XVDjd&HX($4XT@L7_{`#fKkYae8U%kS7ncqp) zhy3$`STU>y%JgjJt(*DEx)fdb<)N;wZe*DiPwttCI`ggY%t%@{-hGq%p}JN3VrlU08wSmov5Wq3XqV0n|IrIn zHO6L!3BACwh!+Ss`lwM(EG57RDb*j+f9YT86mf^#*@wKN#5Wnu6eW9N z+OV+}eR(dMeBcME{lqsO2%Xy^REF_$u>1_|`dgoCvF;LGQ|22b3sw}b zm9F5r$>9|&`l4dkKCVYPLy^<90gpC)6=(gb-Xsv^htwM7c3ywSK0yf(_Qbd4$vsEe zd+MVaMWV$E{yaKXf2b~sAB9L&IH=RleL*#;1l^J|dF1aJT4>09b9vwGbjQQr*y|c= zZ+Oop+%r)x)hHSaXuP*`Y`aa1KXpLlN0Pd*fn@E?#qEb${4cJ`%A+X4h9cP57R^%w z;y)79hxsO4skS_?F|8K4`e5|DIY*~ljX|8*ADH1&<#`hNqDCP^>=~bZHnv@-8eTX8RxH4YQQc`SH(pu>zp%M+r=VV1c{(&pi|;yYzevGK1*xkMaJtAhKZd zkb1%*W!jb^_dbYwP&C{I>#$ZYWFNPO( zx~laBA$(*^nIktUfrujC$CM{-0CK3zcw`P3EP{m>&h>g0^sd|rCP#c_lgngkb%TyX;-bTuDUUDW z%x~;Zd%W84<~TL2)V$7#fnfwNGTv68c6F2a1qj7pS(TFFDYmeaa6VQ;+f4shNG;}p zK|W>YqTzrB1%4?9;)9L3;d9ikw+4JFA1F_~=({3>SG~8dP{9y)ugQe`&YQG&g!fT@ zXDPOqNFon>hQ3dd`I@vUU^PdTfRtlfqvMz#P04MkDI=B$`+f- zy_zNR1A8K@JKq9ixsQ&#Y*ti$ydxWD9#E~`@LLH;GVyT_a+Ibo zu$g}MxgoCR==r^0mM?5AKVxpQTP%$|!}Y#WwN)RooIE8Mt!!#Ow@n~Kmu3#V+ez7f z`2>4=RKPrvYg*_-e(n)48|$7{$@l*@*jHGSF{#;b`_?Gigq@HdfBOy&;RRh4TXR%A z4u#Kk4>Zi}x)7DWkP>TKJ$~{FM-JZIr_0^JuNYJI@qx8#Z?fbC&Sr12Ec<@`cpN)- z=v-d+O%1}}vpwbV&Pv&mzn&3tB`<-3p&qL z1)j9^!9HdEWVsO)sv1dyME=|hY0>rQeM1eaPJex2|7IVdx8*(BOG$X4Ao@cx$GTNJ zl^M>$ip+V#<%JGNS445{uh8ubMLIuD&)`Vq1+EQ$S72RwnLI0IX4h#PO_qO{#`YPu z|HL|RA>~wd5L*fL>Du}w*SRMxtW@%LpAi?xyT} zSZ}k^{<+w8mEd2gM!8#PWwyE0zvn3b3)kcK?J^>JnzQYq^?E;`8T0Ks$x$iQ4mV@B zxOJ7fa>G{w^7BgJl@#Vvi`m~uad4|pn8i(<r{`0!vqhCYr}B;eY+7rvr=99R_Q+4m;Vw8j zr*b%8_V=4&PY+RX+p4*cueoQP=O&mmqN8*GExTT`6M2XXO)xN4!WF>2HG|lN=Hhjajs$BHxVvSoF1z{Hk z<6l*woF|D_mJFR#xwiZ7)jR^l^cJ0Zp z9tHligOoUYY{yUZ_SO35&0b9w=}euO1gPDlB#BNp8siP&Cgr@u*v*gt0UCl`BUk!K(qQ?vVRW2RJkvFCZMY2mC5)FZWi zwxZc%$lUFm%y{(T*ytmtsk*C`U(N<~27P&b9;I{x|B#n$*{3-l)nVaC>Veu*^(BhC zlInGy9~ieAsp_z(H`!zHgBPfCmjhGFAyXE%*MmBhwXP1x`PJC1C9u{#7AA>aEfH@)i_rY!Ek*W$rfKQKoh#3sphHT;X*M~3p^ z3whN-Phk)^@_2VF<>G^r@Vp|;gU}v0{2LqR#?#|X#fD=??M;4|yZvc6%#=)T%jeEP zW!BhntMndd1;WPd9hc@E4#vj$43{A&$60I77kyh7r^h7iLS$xo;-38K(&AM%-A-s= zeFkikW#b7swsC1A`T}xJ5dl8&o<_W#EKj7qU9KNsIgDH~UW`-`XPO$$u zU|q+o^8?#9Uq=l1^&k$J^)Ga*qI=$AdGn5=%*;BtKk1E1caM-$^|uz4js56JAzE3c%;Z3bJgank4Y8A8Nfyz?D7yDR&w zogbkVMaK0NirNGD4Bk~U>R+Sfs4fm(I5`>bu-%&yb@F3>W!q$FE*(dBcs%u7$A;iTmLc+~wy)Qy07&Q-*g36fA}Dotp<96uN}NMx12+?Ph;h znritau-{vEUY2tm+}s=?Pm>TxDXdg|H0JF~!LMn)JjjwFCn4&r&D;Z}%=5J^2Jd69 z&x)zf{ZV8@GDV84kEaErqHH(Th(u0sKR@K{I%WHeB#$enr|ySYJcel+WCQ1jc^7XL&Ng- z-wyG(e8wHGAVWAb@i!5P%CiKzKz)H1tg!4~deCduUBSHUUcCgpxpf*d<+>bPUsW?` zlO3sGnVmi5^_nv6?3a2>Cn}Z6`7DKe?vEy?gzid^HA<8hN`@Q`m9Ji|JN{HBcOSk9HE%d1r-yyl5 z>R(?T06RJ9WzDh6P;qK&qn#()q4iCHS>M*DipG6XYiKzQ&1wxk-gh_t-6o z>n|!#NeMCr-xz+O@AWi$@Nn>OpPJzkmX=;{U!zoXbD&KfPG`xF7vy16CuTwSofQ5W zx5N38zy5f*iPd+Lh4rg7Z_halX$&NHpKU=6K~oy{G(1DGDR_%Nc+b8&l=z_;y15$r zM4si=Alt7-`%B!3_n2OhX+L4(Lo4m7Ws%~&d!A1_6K`TXHP-x2rx%RCU$!XwWB7M1 zyiN|!>GIRZBrR+>gDUI$%jt{^;~;T&Yf?Y`GhfT$F{%l~N~$boC5oAtSD(3<+@g81 z_3?{@$AM7)(UtZGV|8hjJ(f~IHzsqRXq0SD@;$GyCLfeu()RccUOgys>+0&Q;>^N# zq=aKD8H>|RPEYGnvyBoL&p&f&?28}yquway{&Cr4@o45yi)P>5#c2>H`V!=p#b$00K}vMZB?o`VW_$d_0* zffL{M_P1z`sumQx863ptV)U@Wuwb>um(QA=&O-qo6{eyMnfJP9!fPVma*`X8*Y1Pm z`bvcjSc~V2of_*>MiwzML(|2b;iMJClMaNisLE$$Zmnp&8U39BV@lkxpi+vw}qKTvLP7)g|R)^+R zpxzxMD_lKpF_xK_1fF=ZHdo$#v||+L2Jq{yM;cvUoW3wHA*hZ;cZI++L*6CP z;NhB*^W6{@SkoesZM^d;1l zz_q-?OK8LT>hCjWLU)xr;BS>g?wYMEK@+Yfcu4=}!R^T+6%Qy1nm_D7Ub&i`Q^c8{ zs1`W-O)RM{#O1?!?{{~GJbv`FNxs=;#5r%($%b2QiRj=0R3Z$+L<_$$ToL#x}T_jI5xYD?4-Nq-&w`N`GP zB?E^XMk-`Y?@x@jjX{RJ=}Zr|H+^>^2RGZl8`|tMs)iIkQPgU|@Lh81c)S5=f--h0 zeDi1;Scb3RxVN<#Nq81nuGIte+qr=Tm2b#I6&AV3&38YUjOW>xp}g5A^Wx8*GveKc zc(fg8qq8&SuC36I%kfPaQ=$C-#w2Bpwqn=G`S1VhE~G7_wb`d)o|}}P*d}q?2^P%U zP_&(!gXWB8e$qEm8QB2nVX8)0q z2<&f#nO~qoqy_g-4Fm0tjXuIwpzQZtP1VOtxYXdxedV_l&hN0szW*53 z`CB`?SngOIv3TDOTdchglZXlbty(SSam=jnzz7F#Sd>&_gZ;Rr`Wimv;r61@JF?A# zr^dd@{0f$XhE_|Q_JdV=zvRK^L{Dw3=T5U>ia5PJa4+^u0S*zVU+^luD+e^v2HkGo zu_4eICgk+CgK3Zv-Ut1FZ;T5pl~W) z!z26rk)1fi6DcM{-_I^Nw%<3jZm2%k8AO1GBw}mx&;)Y-XDoFm&b((?qU6HF?3s}l z+lQSBWLc!uwn7=(%4N}?`p|2(W#6i*zp)?W_?J%}e75jdldk65WqQcb^9$LpB4{`D z&1^}x_vx4Hx%!2)1#NB5 z$kZv%M10Btc_`HXq+9=!GVn!{{#vQJ^v^p$bEkAkEX@F+aimeDid0xLOXF<){x6`r z2`}8W57!BT<|kAW)rWtk0@||BS>GVra6og+RdIzF^@I z+l2QYGdfU?V&6cw1n*yn;S*}*oTx86wgc}0u4TXXiO7%g$~bLDxZE$yReksN9xLE) zSCKKG(wmQx|I>#!#XmH78mzjAC??c(_#JRRT4vyLGWGF3;Sp=F{L4JJ&^gR+_qP?E z9IGbnsS26udQS-~|I!9)U-|?cXw>VquN1|YYvStM6?c~xkoiBpsodmfsR(0|)!S}pkU%(8Rc)dj zIJ0hG4{PIP(xVh8{_PD&oE4acmHFDKUvy*->h8WZC9FS`5gD1HE}Vsnu3hjRP>>>+ z-z@*k=1BbuuQLvi zwzP}Mx)w)|Tf&Cfh8-3cwb2oqWaJ4}H??J5O4j3CqA@gr!iq-v>sI7+XNUl6AOva= zzt+LXPhW9J#v7khu7$_(KDmW1@Ng#`AhG29QV+z=U}#C`crwp?pE7Q(%nJK&2R`C^ z-SwLHGSlKL?lTuCI-cpZ@`SH-Y1s@gLr%Ieqn0tB$#Hye9A%b-cVO9(?UEh!_M^y} z_tNNZ`4R%B{y)bLY@DS=u(F>M#S?V$K#Feo#6SUBV{%0iv^P8S(O zZjUJo8*S?~1XaUiYenOaTNM3T6r=as-p<>_oJrN;G$&w))@pAW+27H79m zs^&ErP^

KN!z4nH^5suwDcrAboei1HC;j8n`MXc{tAA{>%KFf>?sx7lyD1S;+Z zehUbjAsPL_9-8siauCo@b6)|)c3HophZU4(Nsbq6VR8GTZ;mKTJ+CE@PpuvHsd_Jt z^dicfiQy*Jd7A{0X9^6=_!gFhjFErCXx@~M|wEfeQ z*D>3|C7&*xBt8+Qt36QUm6Bdtej^t@6GdY60^-)!y5T9IjV4|d4PPE8QH}u}K~m2@ zuVa?vMRP#&y4YJ?yABKDN$AsS3CmhjM#w%;4C5e|gvgRxWC~#`TWzO2%*b z=arXT#UY7cpWVCvsFm+*HR<;gQ&{OzXjw>U6VB)i+>XZb`n_Xnlm|wq`DKq~I$-fz z$5eKAx+1CEn6?vX>Aah7=BRj8PrgN6jFEZD=#-*y&}&P;!KPZdE1)o>IbH2yqGm_ z&`j1K)+G2g8j$T6ssb7_5z1921XqH4g`$5vr%|38;)iU9n-cMx`2k2fBPoQwOV<|C z%|AhI?o2{<=35Fa>I*=zMz!t*n=)0k4M|q)tEhE2nnX%;RMCg1t?sBC0wK@b1ZijA zvc{%rj)clXMW&uu)9o8nt_eOl39st(@q;2L`nGa(W|R=`4wX$hH)h+0UU^M?*kgj+ z0Q9=~t@O?ACvvWTTB9C(Jom9b?G=|~cx|Mg7qzK%V8Fh)c~+4Y37pR31;OAT$;!eM z8*M`R%Mk`F;Bv&Z5r^XihUkje7`vRM__1+<>ZKE{d0W^dOyM|Zk z`p7-a4e)u{(kNtA0!N1 zOgSn=({~@k6VzbhaN~BuA^*gJjoFSHvtL|Y8hjSDRWJ_>YN@3I1J_I+`U7eL9R&jo z5L1Wc@4Zv`eG21m6Kx*>X9M?U{(pNP^w;~8OW4hG5Eb;5RB`Ej{bcL^+=~q zg=CJON58d6NRji^T%Fo6;re6$WW+s(;%EPMhJ;Olih~O8)p`2`A`gcJFj)#WAUrT2 z@gr59wG6aNKUZT5mYqWUH&o_!_C`3yT(ia~5B?5r{2;33B~kO@6p#Xar>$>%1S?4} zC8oC0Zk~BYcDtU*>dLn~8yLj@v%!>|>grkpeMS~y872LzN*4)rPy0Q!G0V<<#Z0^t zTB%|wbFR+UY*cA`Nvux$y+r89iW)^l@diF6-Xjkt<9uLcr}y3<4Xj3&hXN;fn2|N0 zREUZYi6DY>;i@14lr2G)B-or<;pxjdxD_TsVhoiBj+o;>ir)DS6!&U2S?b;<@nB$|QWq)>q6%dMGE(ZgWH zF*AHOWDFbM_1Z?U%-Sf-@{5L^UZqMKzfwNG3ljh#uF!7YkqstYH)dc6Et%brxPgyy zk>vgjHbBL~y(-7l@^XV2mU!R;kArc@(gv|Ew!F#34Hlg2mn2{R1 zFNe$$>%V>W3*m7 zu=*k)Elha!?0yQT`P(I$N1p-t$w1MIOI)xD$5FAVp!I~6(F^@>3v8|$h4bt8%P_Nt zX=)@}bQ;+<`Y?yT1>nW&GA8(W#r`Au3erf_bTh8X?f z9@~d9uaoB+(pvFmUL5t%X+v5J$)LRKlPv3!ftWIdS{X7fs2mIq8za3;YEM_E3`|C7 zP0emG&$VUQy^I#8a5@{CPb*`nTyZ9~&b>0`6Oz9pB-PJ+=*y9C>4u^AHC@5GU4ey4)sNe*|%lBul3TFTIY#yxO5 ze=i#-+8a}@IDYKq(cuF?79H6fN1%h(t2qjoxcBEV5KWDLnr4;kWy#^zWy66O~W4 zgK^65UMc;`MM1rUaO`dMBEmE}xE1vOOkjusGftqqY&l#~ZE_AaZr5WJw3vChFsfF=lRd}@i{Fp8?x$2~3&U$KEg>gipf$f9Z!%?d8xsjb4FJj`))ewnf_ zZTsWGFVON!e67y^Xf~Pl0=~onT?qODhYQ8VfKxy-Eho??R}NW!fS{v7vGTK3;G8Cf zh{&v{%o7$3cotYSv@V&m)dw%o=T{`|SKLsRwjd2D1IpqmZ3d=YAubYGwk)U1AwVhI zOjaw4?tr>JD01$CF8dNP2rl#~n!JC7hPEgH#guCapz;dH$3hF+&#pA2 z7W?lLfTvANb0^d;zQKN*w!S?C6gCQ3WJu~}pT6s<$DdRYvT2Fx)~_fV*1--?jp^*2rxAd<^0`hZc? zZ>uu3swAtO#eI-@pF98{NOHJuBV`ts$0Y9+UxWpk3~@zyEsEw~AU_`YFs8gggcxFi zb&v`HWYAfD@|fg6VIN50uU;c*rFXO>XfPwX~tn@qE;6$CRV|&P94P3 zZTEK!gqfO=$QcvekU8nv_^y5>b53W2A(D!8jw!pAcyF9Y0mvsg+~(y?^!7V_MFD`f zApXk#NF=F63ua<{=L_I7GN5q+HXiP`5Wck-WIG_wx`RA)6lB>@s9FCa%WT&Ui(ifl zfFDsF8oyomFz2cc*5GpGucq$okKplndapo7dFv2zjpE`zZR3zky z2SOZSZhZXHL;#R!ZdC%9AIsZUaLAz$)@!yrfR=G|4zer9+Cxr9eulIrLV2qXr2a<@ zF&YmuJHI;h4nw2pvQ}9Mpx6Rc3{-B0>mT#mr4PY(#ed+8WdT&Ev*H~)hB4ZM`V5Ir z?dF>xx&SFe3HnWp7SV@}EXa(D&PIbsL2bFO(GX^~IVZmpz*q|tTPb_UJ>qQ-MIe1J7&36$`atobE)lImUuwS4;E#7MAXO0_CpdX?rSoxmByv|T#0-`K z(4o_S9sk02luX}&=a1m00G#BFC>ji_Q#LC?Veeiwc>@^JrR%dovp*n;X4_A0&!8Vb z72Uy^FYHKr{2+KkmpE-UvvvIqUm@KO;G<-bMr3#cAN6*Pgo`(@{NO88od(dWKZrH*3<-Yas$R5jP1+!JR<7hmFZBJJ9B(FV`M=T(PG`|2 z#E&&?g)LIU7DP8F8DL%Z0m+;`9Odug^8ggU2Tp17AZH4{1sEyr^(-L;@&0WDZd)L9 zz2X2vc3c5P;qj+Xg9-90-`l=GNizoJx(ufctXst%md6Fb{=br-q~93EzHusIbQ!co zKj&;xz=9aZ14yVh*~ja)3RKG_+7L2Nf&Uw6g2XOA*Sj77eZ8?WNTJe(fu~&8ku^Zq zP$f>ok^z=H0{ROmjJcNwPzsxjr3l=joXg2`>hxDFFE%t{?#Br`5-O1RF2{-pVTq9w zPStO}s{@)-*hL-2mhqLX!oL7=?*}Fa`(y)mrZca{P-h%rN@_HI(aMx(|6~UMf23Z0 ziVj0wH8}zlrD++;4^|`VqT6`n;^IHZZe%B=EJ$-RHuK^atO4w@2dJuQ{1Uht>d@M| zA9eeS6H<+IZLosNO!IuHuyO?8|ArUj7~96reVAF)O>^{o&W?i`Str&WjcTy`KZ_b* zd-cE~dq+<5=KJ9-_UHVt8WrS>#m*i_^wu1&Sbb4S|zj2Rlc-Y2;KYw5-IMPfN> zd?`mg^jjdG#-ATkZqCSrCW7Mlajcu*>0Nx^mfg-j#;qC_H*YXG)Tav?eaGs*tI^Me zu+F1wVF_VBhvXd8x#S>LE;J1Qbw!oIXj8ko+lAS`38zE)aX-)i@btizvs7-Fh`&OEW7IU}ppPjg3Vm%CeFn4Y5pn_bwO|*G-5^gD1fPD@&?c?Z{DWfj?ZMJv2Xo{><@%0 zKN|CWc}uKeHbL-5rR$Xf?@{AxwkWdlQIB)@ye?mXm-GhR@=WvOZ$YPt?0UMivGwFO5n)Y)|G+-nCdMIV}Wpgik1JH ze6G||tZ=t8DH!`uEfx0YRa>9j6 z=C}Tb@6Km=lUtFnSFT*u0aOlV1(PM4V-3pb2hV!1Rni3Ka-{7|>~`W7n}mWT+Ef7$ zo|&_4Ky zr}B_>zvzN8xpI`fM?-q2h=LWVh+!3|;Pk{vlGP@J8Ak5FE5f6M8UmkLte6QmQqD0jzcxj!8GT|p_@qy+=HNW zx0FBPFSO(zMSJwo%B{bJ8$MezTeAI-6h*@iR<1fPQ@*=sbMM22Z}UiY>O;A+Tj=Gv z-zlufp3p`$UXPL3a_dBQ$4 zcVQ%Ktvsl4XL*{r_(O|#C`%n@8b?Aa%IR^MNt^JGk?3bn=doGF^`;6cyfBr)nc`Ec zo(X1abiC>OsI};yLRnf$Nr?!4zcBXa@94mExZ6Omv6OFPzt8#1^3Cb(((XUZ(aqo} zqk|BP`#=B1tBLVPpPJ1~er3@_4#IEeMH715#yqwE>P~XHCzc9X!Mz{bQ0%A_0m_>Gsx9^K zmgOT{@#cNhO{}C$)39-UN^{Uoe~ zhjE%M@5r4k+B3sju4l3G5I%1m9gqH=Na*sMtTQn`4U-;+3kGT~bL+~S3Nem^aedtn z$g3^d$br-hjz?Vwty?e7UCL{=?O=7vt1N zVccE)+}_X6a;{y}5F8Bn{9F~nKV*$vO&~n6`TS2$?IEzm&l37Qw{O`PKfUyvgAhLZ zEla*^(Mt;;Fd_7N2sHf;baGbX^_42rQUUo#Z&cJ&Szbk93 z7I2)WC-sJVHFfU427k;~4D&#gG)&qaIuII1Zw~0BuKv&+g&>&inpEUq#e-~CKmGVW zicpV1GUoKbrqt{)Z_XJ7G@yH4?^*i$jr;3A1>Qu>hq!A-{cKDqa^h&~dBX9iDYAPjEAug2bRi!s(Z}xu^NGF)(S?X%Ag? z=8V*OTy1LjvV-T2)F1S5xMZx6r11A#auZ+1Vk23WeE6G)45T!GCR>j;KhV0K9ZO+Y z;Jf#879;3VcM=GCFP-bfome2eY@>K+F5SzcB-@I}e`U&)2-}xO zSyXHt7K@TDDea5>K`wZvb`tJw{6_xLvJ?EHU7h3~*WJb)Uy}8M zM;#Fwd@-@zk5w%t*JKY&pKw2cgKFNW(+(|nUO|QK9}F}a*pBDCP`Gt2`bf$jV2VYC zvDaF(Q_)m0_u><-n-RoU%7LBo3%pg^21~%$j+aZO=wR%GKset+d5Nz6X0XdVcf zWdx+-6i4x-sFCM6ZKxv>gYP@Sg=M0Mv=bldtXYNgDakOd^+&=iqm{vOtvU8t18-;% zCV1WF=Hn#^V6pULG^OR_%cwd@CnM8juCxag$>kLys~=AcOF{TVbF=~<<)E{!#QsM$ zm+3f~39HY-iwo*S`m&IcSw{3y0c)fpp}wM8AkaTf?`v*QH#Hy$r&wESmq+hry|?UvyyKCA1wivP>X#vbvUHyEjnL1TIF$W@$DvYV8RXyo6ObXF2^cm z)BwM+yiI562MQ;IPtAO$_kLm>OL=xj)+7GvvA%6$FKLZ;%*X=f#J`~YaYNty>Jl(; zQ~sj&nvJ)W(CLj?hBMz=892{Va@#F ze0^D%HQJUjs41Nmud@M@E@fHh8LEYUBTQPa5Ej#{qyklzJ)Aa&wR>Y9;kY}^$+&S5 z2D)dd$*sdB;F^(5@B{O5k8+9ahgLA#oE>Si?77IF*n#p1!LW|QBkzfY2~tCPQ(rIL zuLUN*O`J$@`{fcQ5PGWr-bCqM#%;QKxyyt7ZBAD3)Keeck`d0*teWxABvcG8x^!+| z3O193DTDN`$c0}gOoot6&MTKcI7{wMkXn6rWqpjh8dvZ|B$9)(JOhwZL-J#3nJ zi0l0Dnw-2#mE50NeYLUcCHYkgW%F4OKJ_*ZvUx4p_fsxFi`H5y!wV`%0gV-SjGRx*aUDy!v#= zAf7kHvS)4$O;L!B4d}+X=jEFDT9{)V2^g!r`*PxL$~|1)U?_EzSrX z5}uNLYY}ZOVvK|BZ3Sa@WTUSKbZgQz{WHqA8%!7mqCUf_&ai8>e4jq&hC$?~W*#Fm z#syJJ)z2DxVSD2oY+9mQ*3c@2pF(C|1Mw;LcuFSPYUQ}^%>b@*YnDbr*qDf4Vdc(aUD@|S%>Yhvaw*xheH~y^uVrX z4)-P!3ao?b3d9Hq~vBY~e=B#N(tX&?? zHy&d%ws|YD9OQ?hp8!csammdm;ofy_sQVq~-~7AI-(1yuQKuWXUW6?k{jpH^aMa|? zs>F$5gPc8nxy>h`l1zU4)!p(a0ivyeg2IS;Xt7AWM};hneBzWJS0TZEeTnh4JKdKO>#UOnQ~)# zM5JBO3LcNTP4}W?Q_x($RGe!nbteOif?ahzA$+M3H70?uk*6!TKd&mF@8jk4h<&ub zWEo_$*f#XEAZ1=Z2y<=v#EeOMPRMs!NDO4?&QBE^&x!J8Y5-9)J{}5LTsU|7JiO0a zm#PJxM|e$ON@IT9x*=t;9u)&6*Ru5uQN8sl?b;qYs42r*QA)ndkq5jvmOgd0c8mY& zWi?Z^UHe-xgMZpeL&Q*7%ZRs494 zV8c547*M*-DTeS!+93=~P-3GI)D~GC+t0u8nf6H6x832mukzw3#2JWN?rhS~MhgZB zm;L;~k!2DVM3Z(;Jj$6ydcBTTK;&Fi81}TOs5PMNpX~f_E|wdC+fs{7=Me&35@Z`{ zb(jmIZMSGJ+?d{uE55>od9=HX%iX^1orAG#tkt0qN#;3_SmVEBvVe^CN66I4;Q=?o znrwSs{5fj;8HoFhOrSQx$SFh*!G|WhKC(kn59Nx__G9GvDf2_$c_Y;U7G<_)7U!bv zi0ivNyivcV-S|6>l7F6@FY4>%!Hk;(itqb!5?`0cA*!svh(!&{;H zGZ{{h&wbOP(I#dJb`IfBldTTEF+HI{R`T4Z0C{flAe{4JUQHr2j7|=q?d`c82lsNw z9*X&%{^1u-58-`JZtn4|pc_lOJlvP@e=a@(ObDC*@@2h#?#lG9J&0+^?Pq7iA+WxR zy}Oc8_IM}>P+pL#S#iZ1!kBUy1iD%huY6B#yLtju0Mt23RZQPF$ucRAJ0 zE{u@v+w;=8$4!f1vCFzWAA`RE=8W04kM@^^yX35dY~?(#Wmx$nI1t%)4O|Pr+L%E+ zr5NM7c;3VxP9JfJ{e)1qQgY2+ZDe8=pEAP2tVLTPe1JH7Q!OcAV_}A!=QA)Qg7oEl zhk8`Z1GpEJgH{uu(1tX)1`Ux7tH?s>#@ahPDrZch;Pk%!^qt-{#!-os)xL&gmaalZ z{nnvH1I1#r(P^Kz-@vW4BbEV|Voq0_?Cv~AT<$`t-AIwGecNcd1KfrQDI^mFelS&~Xw;Yz})`4q4>Y z!xPZc(0~oi2BZmcj%AT8{Cd9`$cx?qs-F9|`@ye7M=kZPRm^YcvJMvA*~Td*RgukF zwEuKnKwE!ys(pOP^D@t7Hn-oSW&^0*!yr%*u@w>Q1W<>U6I)$MmTvf&J?ju&mP>c$>ql!zPH- zF=?)*=~JF6fuia`YitH1wt&Pn3?U?S0EfrPym@Vu!O8Hcfn+UO{`rIK%wA6f?OCE^UcH8cl(^-A{F4U+S(4T!>?L(e#iMxv5=sf>MY|^Er zvv0%-put%yN!y3G-Ri)zeN+kS;S1~2iXgY=ryW3^Y7ixWUoroYQ&%7EgNQjcY8D=- z_-?G$TddN*>sjBS0-S%XxcWIYxx5rLBuiU%QxOV$la#bV)#Z+g0lX|-c(9^16E&vdj^ie=wkFF>`m3LTq*m z;%4_Y=mMP5Cu7+Yb1K|Ak;8nodtT}xM!Shs23J1$^}axn>#OVO3^_}D)rQQX#7zC9 zs(U@Mr7&xNd_a@yt)*?NlI$pph#ACn53^Z+1t5B20wut*xPkH$u+IdlWPm|n$pqI* z45(2T5DMs*9PpiysfashhMU?m*gW>p#K))Rs>xzMUZs;T5|)U53j#arxm~4bR)F$~ z{J#2}BE+f(KHDhS9kHz7PPJ|AxxN~#b**_XRFYf)e5wAbzWW6Ly$(g;W>>UyOd@Qb zOAtUzkN=3gN2gCdfnVP{r2~<4nq$}OSnqcMwx;;U$4NRO z1Gay-w9AsLA5-jcS?o+p=MNEL@M}Z}-F!p{sVikpHg9x~WYp>EOAN|{q{8;;zc-&x zr+d71ER_#urwLpSdMic0vY{kbe9(9|wtOxXdX?CZl^4_}G-owhLQ0=wcF$PfeU8eP zxjFjoTMFr?PAqc3$7-;T^PbQ%04E^%fqGcnjv|-N)>W373y2!-!ofOL1kwo53Mn~Ju59eVT z6hfZD_ID-{knG7!@2QR0y|ZN2maY*|vQ|A;21(|CY2?QxKjwP`pI-J{XnuHs{buLI zBAn3JAtcy)jZ4mm4U`08<3 zX+gO~Ei11x<~{QEO$Ed2Qo1n}Y;B(9cJR9mP*b4ib?!U|;@K@64|h0rgUQT$(^m;9 zKq4Rk)QST=WHZ?!4)AGjobv%Zd2Kh!Pr<3Ce?eYf{qQ_9h2xFLY8i8JY*I&>=vwS_I4B zx#uKS<##i+YWa(_!Z9b7y2QaPeR10t>Gs$mzMX)7BD`QN-_$rCG*zvoixN%MKy(uj zMO@SO{O3D?z?7VSKDM9hf;r=W(IKGF-m=a_%KjJCTT59rmo@t=sFCB-w1FTIC1@mE zgmx5wt6WXfw&U*RpdJI1>)CVZq;h|bhU1J|KSmiLoxm#R<6FANcD?}J1z)>JJrA_! z=#}=sDh#kHaJ(4lF6`@?|gupGHB+x7s?%f0fQGc+tG`|ZMnRzG; zm6Wo^HY2&hYBI7LU{(GmlPTz=ir|yHOm;y0?tu(sktG>-d3s5f+`fy$eKZr82BCWs zxv@DM!&dW*C;=zg-DPL(Cyu0VFb)B`d~HU|Nz7~R#?1Xf82rZ0xJ3s!qTTffd+zQ~ zYB$i62r>Bvg88;O!n!wXlx|_FDOPu9aO)2zEr0l~CBC-l6mnEpo%Xx9LSCIDKvAMK z{f}}2p|p~ksiZL-#2h3B^}vf%f9I=+9w0!Zz+>gdzcNyG6Jw2Wit=#=Ex;7)u;}Vta@-$5`R40RU&xNBd zAK7q~%!YtrbC7wZ`TKI95+tN8Tn8hR4zfPNp|~w0(uke65VpTA8_Sgl__Jmm%|T#t zqT<1JtmGmDb8Yj7O)u{U04lptIzrvw^W|Y`5WTkIVm$C7ds?*rIs)ED_S`CSlu`;7S+B zZ0zstI*?U+L37Z8Y7J~}o%ELtSKLz)xYsA5DffTRMSun6#J28Q(9d+b$C;st4~N9c zji`GsPgi`xTb10cMXT{q)?9Rr2=zXdM$~DrKtDEd*EKYXhVBCJ1z~F)T?pLP5^HAX zg+g4gzivtJYsyUMk$Z84oSi#p_q$(%E%5`wvdsOx8w}1(^8uRu(=Fq@rMb1%(CjFN z9E`}VD!tGv&+Q=ec*le6vwKgH*`jSDzY{=*;sQ{by~9-^zoA$&#n$*l7Tr8>>;)?x{z~#)$+*S#z#dw@bO0&#^#s)oO@XW$d#IA* zB3)=IFNxcQ^wjAU3l5D5H4uDI=VMm*vt?;X8GH$CfI zpSt#^?ASglbS(g>c~_%7n+a|@>_mMirWG=++6&zM>gKCmfFzD1EEsU86x2IvcHbb6 zv~*Jlh@o+=6G#itbCGTZV&Bn$lBqDkKq;{5Gr~h^f1%jYwlRBY8nURJL`Z%%y>u2a zT$96G)-ut{k)ne*fKz@SF+Q=N`O_|Q$0X}w>8(LxG$uej3>3QLqM4Efh~|4Zs29dX zy3dn0vV9#^OIZz0GZ=q&3tLwyxaj4zE62D$>5=UKXM($SK9txS`CQ~bHDHa&)kd_v z%R!qYgspF*Y}V4z=)X4?P5N{Q?DB%fAu;z0@s=go0HZm)ar?z0vFSWAS4;Ouf&1zs zdkxvxjzqWP-7T#4rqzm|Z5Omzs1qXB_uusvwI|J3b6^n3uUSC@EojqwkO7{50&nk_ z{0uoRR$4|Z2HWhgZXX>`g6_IVgr*L%u4%b{8@^j|_N|;hpU?=y_S2MFaa5Uw2SI7q*Co258cJ(HkmjHzk6Wi&Aw^^{B$85`7`!0N~(#S^h z0m&$7t^Yo*udBVKNyCsk)NN4)d~dOO34-?%k@u5X%H;ykdEE0LOV<3twD<6xt*+X# zDygdAf1eO-6qD%lP>mnCI6;-jQ|^SQ@a@kGxsnq+3Qfzr4w@^~tmtr%7%Cly0b6??4ahvdVqj$?g3^~pA?H0eh z@ROpg#T#vyW@#V-O62nDquzt(@Jy3!<(`ihdK&JtgB)X`cFW2qH{}e|BwV~{v2ZKr z_}BRFx|1?~OwfbH1u9IclGHE+)#o~WKmTo!Jn0GcxEgVmd3n1SuVj~Z*!<@{rT?AS zv!8mY{i1b+>hmLgKVhU<8x3%2(<82k^hSXaR&Wh+osua)lBzaL3ZD5aJP@##>4;jC zYue@6xy5Yi9JE)M+{Q+-F)h%jo6w-Kt z&k|h3K}g@a3OEamvY!s=r#u{8cO?8ofo5fx4l&}7)ht?Hpn34^w50n8$inVvp+Uod z$&H%!086kXuj?((9`oY|g9I=#3lQ-VQ-BmzK@(eUe0l^$^L4i$y&pxq@ zzxso@Cw}s}c2>$BxlIq#MCINFG~O+#agoudQ`f1_b=gc`{FKNtV?>Ify5#eSijd(Y z#h%+Yza=dN2FX{R9DDxkXyk+0$kl&@fyxc1=33O6My3?0f@Zw;U+X2%!@jqx0mGeD zpRnlE2uG_biC{W}^i0~v0>`Hq3n>d+v4Xz|!{owECc2>};luYQ$@2ci;!#U3x~#w+Bts;Z zldhk9NyXms6y*Y?e?!6~4%k}w@GRMHT;$j1Toa!&?H-sw-Q~^t48he*WoZ4(i})&; zAVbdRj41!fh_H?f(zecH z(39}Ve$dUj@6t6;mR|B!{`BkcId~T2Z>*q?Q8INX(!#F}7@#y$@-4**>hT31f0xR` zyD)8gLx>T*CFI*Jl=qGgc8}_CqV5?Nnb!Md*;6a`xVeV-DWTcBEYgrr54t7=pvzKj z7l4uH@g+rkVk4DhK3{TB-bt;!0F@M^lK-}-{TJLZLVrvhZbP z!J2`&IAFk0dUQ>i@MaUOCKy9-*405ab*trTwiwV&Blg7^%yzC_qB@K(LCT=t2IL;l zYEkR4`HbuNzS!t@%AIX_^D^o;`v%AdaD79Xpf_dn#gu%{RP686pdc_R!>gJ*jn$6I zkme=`mvb*CU3(scH2y;2zb8xnLH9^IM(pCUBrq;AFFz&ho+>>YulI*@d19np#r+Y& z=-)D1#;uWG7i?Bj1erX`6T|J+JsKP^X$w@w&EC)G#(U*U9KnDp!?M4pUS(AOJ-K4( z{)2xVLDO#29=#l!#9LgAe&W6i`r;oR$%Bj^8-0 ztidAut^<6`!pg49-#OxNOkp&EO@)n-Ot12t45Lb%SI#7{={=ycHVmw$ZH>N|1+~az z&>EgR-^2eACP_Qx`sDrB-?6n8x#%ENYVou0NO-Ap7^joAZ!6q;h9VQqudQfDto{1u z=3QrO=pFiXpGox+Ls!`TJXcz@ezNQ5&gL6jeUXyxhCOaW-zL7de+=z?jpH5~Yf<|( zmAv(#A;6g!f=Nr1dgQoR7-D-4eCFDqKnq-5n_z8Bi>;@;!-J3LfT*>sH()3S{*YJ74pYoDY*9gX-gTB~EUO%DmffEN2x4g&y2GQQdydK~-bPTE@TLC9|Ya zIGlARObEh1+K`Sut8Lnm7}Su~Du!kpDQc>p6zJ)8fJv&!7|?CI1c-j_6S~9Q&+cQo zijLBL|L{qE?#0+;%&%-n;zdvKBSEJi!a)vSRK*{H`1r zwGhTR=*|Pu8>Rnl0@};m29}1j7%;0-f*I(`k0{aM$W)w}r_iB-xl#=57h$U0mc1vL>>2q-ahX#qP0sZcCE&E!$#3 z6CX6|DA9~|5(s74FBK&{t5}O2LZz6wCE$dfJ|LjyQ##!y-@$9`#ehSP-UV^ub@E4Y z%Wtl;-8x)@N&oPr;xx@in$Uw1InC`s`zpmjfR5zIXP4Y+4guancUX)t!$JU?beD_K7$LnBFS&e> z;n460a@(SS;U0M3QyydVym%DaC)W)l4ss+?yK@0Oh+-48A~3Vx4Vn#e*xBP=@tf<6 z#|4|mw!E#baX1Il3@OY3n{Ybe3y`*~5fhocM%p<}tFgd)+HZ*y{VTU#={KW!SmY6~ z9Bjbb!$1l4F1+ZWM&X=hT;~ag7|ecN1FSVbxv$-xx}U1kqtAp%^+mI`C>M{_0qQ!| z8|B6-$<-tbmE0|fMh&Wh4a6U%O0K+@1L!~_qG$s%hW^CMpIhRUaxkeaRD8L!)n2<6 ztA7xhwG@iM3>ttH&?bt)(k1tIN)4Jd5i&;k2}Gew(j#JJE&gl{(Lo*Afq|-YU1Kd0 zSY&H5^1-={^^ zRoQ!T*-G!?iUmsOq;*zc#Q!#M=5my>&F>i&3fF{5mN^L(n0~`{BtPgWaK@Z@nfYytaRy*8eclO0jc z^7irENE*(;wNDG<^Fw7Dv&M!c-z9$|uYVYjfqaUL`FGBhL)kpJoDH7&A=bd#EgX;h zu0cCWGj!hyqo_jgyIP$Yhu6QS20FsT=wg+Fk&78P=g_Duk`91@V1044YkZG%8 z3pe?uJsXz;*p1ABr8qKhnuF}i`^c|XMciF_wAEl-MnJIp(Pi$cb2s)hc_~7iZx4Y+ zuuauWHft_xsdn9v41_lV9pps91Dmc_ z;)>uZ%Z&fMyX-N_I7sP}Fqn1A@l3lRRjDTVNg2$PWyE?X5VCB(P-63FI<64@?qL+@ zo_+T-QN_MJfDA^0fZVq3iBEa!aZr^oTJm61cE950!~EY;+V_{ih?+o`bkoy*xpP>l){kL0NV8U9 z*`{VT8=V`=y8%WyFUx^UTHMcJ^;jUTaz2pV2_`9R%P!lzy|<-5lfxe}pN7-y@=heY zaR3+Ln0uOPn?2CK3ul&fL;RTa~g;JxS{z!$9>w?f-aHY)ZT}-2JDFPHRBTb8c*mjhdaq5PmXQiPpUCKRdwKVLPz* zf_6%b_jPxyyQcf4o_vNab`!IMdg<9@4&e2T8gGu4vh+g5d&; XH+8QoRR0CWw^5MU>67Iq?zjFQu!rUl literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/layerdown.png b/scripts/annotation/icons/layerdown.png new file mode 100644 index 0000000000000000000000000000000000000000..f48263acb434ce2b790bf61cbec90d40ad470f7b GIT binary patch literal 1050910 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

I z8K_0obig{pY}X!5Jbdf;+ri1nMcvCyEKYV+gah_QH-w|$G4P@ZeLb)j=H$53U~AB~ zdSrHCH@Fs@q%+cK&k;K58FV!J$HM)JHn;lSY5L!hTi)zEAa#H zSc*!^>(!g#TyQv~_c7%6mp$>`GwpANr0jD>IK*g}4jjh&z2BN~z2C@wat#gh1hw2*!KwKv)B!0UX$V%+l>DIv1dOiOjs3bu0S%v|jn&-FKXyh|ru{|Mdzj`P(c0|JK_PJ(BlS)SN1PY3tyF%%)anF3eC3(%~xRc${80^W1` z!fPRFO$Qv>IS7glioeS~R%uNOQ>vmJa6EW-xCRmg4BTirhJFjY7wWy)?1?*3?#u8L z6y1QClK%=!grc$ldSZii6O>`jL(!hrx_$34=Y=>I!+9c6Ydhe)0J8v2@T~QkS=Q$q zvV1#4aiC@g92edmz746o2fk4q+q(-K=W9d?cQo7i9L$Af-Q@NBZ64eH57-!rl3siS zehzgj;jn>X}CFcg0jjG$`Oi+u1AFt;}rHh_Ac6Epv4)N&FyVCdw7B4kSAqi_gJ0#i%% z9y^<8ITTUQ|V;lR!t*``Y_0G>aPaMH{Vpi$Rt2iw{SqBu~90~@i`&%YZ_CC9x-%E;Oni zu3vuUde{rxRuQs{_V$klQ;@?w#&&wY!O?%h#t_AUw`0LVsP`T);65Ezf+!9Y=D_-F z`IGP)_#4!F;kN4Mo!WmkIN)1v5a6)F&Tu&lCkU`oxB_;86`=@Owl~8WV9&Ny&u6{m z@?LoW{v90BiH7IEbNiisi8-dJQzq{>yiZo=-3I6vK)u&m2iw>VqBu~v18cE|gW(>i z_rh)E&p(Gh-vOt8*BcPLnr*xVE(XUD2lH()@1gb_wJrGBB4nBV1>BGG3kEx;cK-Xl z_;Uz2ZzPHX-5uDTUuHo)_s7?}Z!kZ{fubE)l^whX9A~cQ!fo}>Ix+AX*aI5T5O2kH zP6M|)kasWeH+$!<{!^5k#I!qH4K7JG(6Qw8mluk+3+w!jC=T>?!0W=y;czm2-S4Xh z`KfGOs8z;)35g3Ql7{qR|^Tj0IWh_w7BZ0D=+H1ziR8D2XUHie>O8TN&n zz+j{IG357GJh>5nc8849VnQ^a13UAV*-*<6>lX*yYW@%h3UF7$`~}`$2Fgya-+U&i_5V_$%IA3J#HYk3_XQ z@YPvA<5Fwwxd7eWF~B|xhI>!>$giD)C=QI61Iw{zCy1Q~X&?r^i5k7GL=*>x;=s1NX#ouNKJXs= z3?$gZglOa)a7^lCSOi18h}-RbW=wty{|6e;Sg*@=_U^==i;~CsSuogevSGWOx1pBT zNuZ}dk#jNFeAJ>2Os8B!z1GagO>9vgQml$P;05_Lm=8m}klXEjrivefX)q4zl@kr6 zD2-*q{{@eN$KGz|YpCV5_jVj?3Q-)W#eqqD$hu*$Ywmg8WA8s1CQRt9A}hn*`^xV< z9k2)V2$-Il06sn#^>n}?6MeCvcr7@NzYuCwS7lM_=a==lE%@W%a3G9_R5+N>k2-j5 z2AmI%L(~`t#*e#myLOrj(A~9X`Nb7IcLD2+fpjl_u+wGcHHrhJbHMcRkzne(tFg-e zeZ6=Re{4h?J1(0%rZd4_?%yEiuYV67#G6mSXo%uKy$)=~2JV4@?l(JH&dZ77K&c&A zo1;4z?t_6Y=5~MGhSjKlCODJ4EZTts`8JrPNaH{7^?N`5912Cw#bEPM8#%B7Wp%#L zi_l;Fcr&lB4^bQ_y#uRqgzo_-ucRUA|Ay9=Kfn)R3M?!2$Da$8>Hb~eDsX70zX~X? zz3j`~__H6Z22mVnqyx?i_yzQ?GhIaJ{f*pFwiO48c3?$zusi$&GNEkXM%9S_2G|Si z1vFdk^PO-V4AlEb|?oC`2*>CwfMcbQu?GXEU>8M@zu zej$jxtSAmt$^l!Oo#0ByGiE(+>h3qV1Ae!``=FUOy8GH6Z0UMeI^B=2-GBDly&5LN zNJMSyHfj?GCQ#1*fv$Vb6x}{;QuY+H1syP|-4-qapK-WK_m2ME7Jww zGlZU_&0uASdODyt>%l}YXnGuMe2UP9Z1f;7*mympSBnY#==Z#KF`Np&0xRVx4ixQx z3v+A-HvC_OUqdvA16H6>IUO(vSO^9I&Uo1zd{92>>3|LYI$#iBkYo_x%)v%#EE}`u ze+U?irSZpve)J5lod;*bgWz==73RP@PdxogC7cUTSb2xMVZV6944uP-7l0FYqCp%; zFffQgBm8Fr0>`!<2FIQ!LDF29&`SmcYk&cP)6hG>=Ls7jgRqamhhQ8ey^RU|=m}ms z1I~q6kU#(vqNY0V7<;=9ycVM&IFJBf2qu-_Eq~+~3Q!v~H$@}7e!IAJDSRdSW)YAcb`M-k`VJ0{n z5XFHwP!R_b0952ebsna}00sfBnQJ4r0VD{(gkD;O-}UEpumDU64mBlhihl?AH0%Xy zLDbiQCA{=YI36wovr|#i9C-ijtJB{dKWgff$*#W?#eq1`mJT=xZg02+oB(5QH}v(u zNkKn`sqh*YOulD#_!0aG;%WaLc+LG3-VI)hQ5=W^6?7okfC`>84%wdAEa-rBVLW7_ z8Yc9Tv-rn=!za$E=m5tI`;$*zybF$kogfVxCiEj4{~O_i&j0;AiUV<=f(|4AsNhNK zJmkOf|6Fh~mSf;f6tuyMdOBcW=%V8Enb4gnkv2g7Dyps*Z7JsnuYuQT8b@M(adPPF8$Q5=W^Wpy9{ zKv~bs@Q=$%+D6UsS+fGGLG+3PHtb&SYl1@q<6tuQ_}>IbUU5J_?D419|B5Hwe=^1Y0GtAsz*7*F!hr+6 zurtdsm2+KyX-khTg-1DvnjJ_)P_uQV{@{xool(I;*ce7bq5@2a26bR5@3;p}hD+gD zh~hvTXh8=O0JPvq?JSbd!8wRKA6^IJA&LWoIdCg)I01eLjxj}XAP%&s0|@|H^u%@+ zYcc;D1ayF715SO9;=n)-T+1JhgPXtw0irk%2U^&H1OP33ayyIWvx0NL)p1q@9~tl& zxhM{FIp8&7y5BDVxDB%U41u*wV7b;Va$A<}4odB_|388( z{L_|~KnfiPdODB*pr;@0`rBd(-T{si8w8Ap1Ob@P0`lpPpTIG2BV^$pOsI?&-f`>^ znF~;v(^cgIO)ya9v)9;T?^;yINrQf^p5L>Z>!YzAH+yS70dfs|4Q>U0kK#Zahy#Cj zAQgNrgzgS>EhOX|ft6t*tl0ex`MEL<_*IhM2cP}F8w~KGI1mToz&{*F0Pqhh@OYte z#eq05xC03Q2KOlMc-aA06S9}-+OjSwxFO{F!Gsai683!$91mB5S(>Qg4t($Mz4j>e zT!4!Eo5PO-aiB2{ti)#agqy$s!L)N|z6USi`)x1uc5C`JGupLMMFl@{6fldbu0-gj{6EX$81voqq73YB8_VZ0} z^`Bosdj6QuN?LWFe`B)k_)$}*Ox~}R%9XN|-+=@JIA&;wJLJcy-|7)=Ep9#-E)WQxtzvPpLWiCJqpWu=gEx|y^ zPf!I9&mjQ=0voT5U^HZ9K};Bi3CtU;PTI1lnH12Lr@g6# zHUd}xK0|0r=QD&^UJw(y$(fZG!HIAmI4%&yfjAHc3Uwd>K%w?#_-P|>>dFh9oP)kfOggs6#h(@0gtz{ z5h;5dhy%@cAOS%0J#Y6t`bGCXH)z^>0<`ODLIy%-fUEz^g{b`;So^Hkv%+S+BcT1x zdv2jW0)2Mhw<1m}X^MO^iv0n2b6yczP%Nth7DfjCee2ht-c&$-Bv zyxibFg%J;TnlX|8tNP733psWl{d3`;-+;kP6bIr!94L(g2>?oSDsmv*9C((W4FXJ` zZw{+Ll{BA&odM^7>j0$j$Ast~4qX1Jc~dhN;2(D6hcY;jV4w_VA;-|41FjulK=1+> z5cnuz71Y5&ngRGG%z*>~m=MK*I1mToKpYs31IzK|_26URTKZ+5AMhZ@_zCcsJ@zOL z#DO>v2jV~+sKWujSHMMeehFoKe9&X^oBj@ls$?oS)F=+bfjAHc;z0Qw@EZpAf!n}& z0%getcr16ozEIW4iyV5?BnPgzb4?b+ti*Q&Oj~+%lT68O;y@gT1H*Q})pm9RR~GVX z2uC_9@EER#Jzyn>;y@gT192b@#DRhwSf1_f2$zCiLpV}Fz)S4g6^%TW6(EWOaUc%F zfjAHc3U6KY!$_v2S&(&(d_qgFc*r-3e02M{{b6A6bIr!9EbyPAP$to0axZZ z0v?7&2LW#LNN^uf9EbyPAP&TVI8ZVN*5Y^$fkv$+)V2E0N7$y@j^aQK4xG98gDi1T ziFE;LC|y1h2jV~+D5C>@+tB`SD=dLpGXs9s)rk&()gg)laUc%FfjAHcO74Km3+@Rn zB=i>;ZV=#Su7|zAZAEb)4#a^t5C`HwMI3ky$GJ0H4#Noo?D<~-yMQYaMsXkx#DO>v z2jW1*9Pp7>7ZSP{T+wf^Ou%B^a|vt%TWD+rjw&tHHs5XFHw5C_`EfsA>!&8bd7alkJZa%o@F{bOMfoDLVk ze2C&e10A?yx8EK!YSgQ~KXuCF{TjI0f;P3>s8=m@L5!%49hkVzjxQZ``SojS!PIx` MJ>{~ufA}l^ADRd-(*OVf literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/layerup.png b/scripts/annotation/icons/layerup.png new file mode 100644 index 0000000000000000000000000000000000000000..bfa2a5fc349343781776ab8efd63b83ad2ccf1d0 GIT binary patch literal 1050910 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 literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/minus.png b/scripts/annotation/icons/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..f178afba7060c597d05f2941c61b8c1db81f8f7f GIT binary patch literal 2355 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 literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/newobject.png b/scripts/annotation/icons/newobject.png new file mode 100644 index 0000000000000000000000000000000000000000..4143986a18092f2279156a439fe04c016e30e918 GIT binary patch literal 1050910 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 Z`%n9CG3NJQwc}H_-*w7almF?6{}1TpTy6jW literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/next.png b/scripts/annotation/icons/next.png new file mode 100644 index 0000000000000000000000000000000000000000..46307b43298dc0ce554ead4a48369bc2367a5fe6 GIT binary patch literal 1050910 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 aw)OUJ`pkPTF6Z8T!FTR@*K=O+)Bhjs0u-bG literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/open.png b/scripts/annotation/icons/open.png new file mode 100644 index 0000000000000000000000000000000000000000..d7475f3c00ed54e301f046858639651e035e1c63 GIT binary patch literal 4992 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 literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/play.png b/scripts/annotation/icons/play.png new file mode 100644 index 0000000000000000000000000000000000000000..240861090321a717a0eba3616c6cad65f4a13038 GIT binary patch literal 10655 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 literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/plus.png b/scripts/annotation/icons/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..72b3ad87cb35521c7676ab7ca2a24cfe2d45fd4b GIT binary patch literal 4004 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 literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/screenshot.png b/scripts/annotation/icons/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..52fa010a83dc3589c83c7f9c823dd2c6ba0ba2ef GIT binary patch literal 9938 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 H#$Wk=xN+vG literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/screenshotToggle.png b/scripts/annotation/icons/screenshotToggle.png new file mode 100644 index 0000000000000000000000000000000000000000..fcdeb9c112dfeb36f2898e4db12ce01ba758a70a GIT binary patch literal 1050910 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 H|IhyhW7VfN literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/undo.png b/scripts/annotation/icons/undo.png new file mode 100644 index 0000000000000000000000000000000000000000..8e925e64679728cef2ef21d10a2bb245fa3078e4 GIT binary patch literal 5765 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 NbI{=cb3f(M{{RzLF)siB literal 0 HcmV?d00001 diff --git a/scripts/annotation/icons/zoom.png b/scripts/annotation/icons/zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..8a46934269b43aa9321ab439f60f9e9ec41d7db9 GIT binary patch literal 12237 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 i-~V^go7)>3Jh6z6b7zZd7~p+;0D0W**s~+vSN