From 66645103e588128b756a69802d569874c681d75a Mon Sep 17 00:00:00 2001 From: tzutalin Date: Fri, 20 Nov 2015 23:43:03 +0800 Subject: [PATCH] Merge features: 1.autoSaving while nexting 2.Add predefined classes 3. avoid using 0-valued coordinates, from https://github.com/tzutalin/labelImg/pull/1 --- icons/prev.png | Bin 0 -> 30665 bytes labelImg.py | 12 +++++++++++- libs/labelDialog.py | 1 + libs/labelFile.py | 18 ++++++++++++++---- 4 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 icons/prev.png diff --git a/icons/prev.png b/icons/prev.png new file mode 100644 index 0000000000000000000000000000000000000000..31b454519354679289cd809d42e052c024908e6c GIT binary patch literal 30665 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�s=Zt7E+SktXc5kzNN_I3TQ$Y#I46#|pE&`5N&-K#b0}=6IJ0MK5%^JWhVG>K| zY8S2U1SbBPnP1#_B|Ub0AuJtR`Vd4134S<}LXYDd&Yb({Alg%iG_gEm{5x9F^E~xJ z@1@}*y|NIT^(!!opxYX^xgHf<9O@vw%|egZZU5^(`(4U~bQ#Qt$bX=v6IA~ADpKd? z^Q<$h(m?b2!u-m->|gwJqMJ0TpFI^yvSCO+=qGAfM|(4<1GTlA zo0AA9=O-7S;05)t_~dAB@95yl;pk$;35>FEaJ6vdbo$?n&;Ogisn`E90{kfbe?R)! z%*{gNe^V{sc(}Ov*}1vcxp~3d{32YuBD_4TT*4w;T-P^->;KmTd&kdEOYi^pgpi6I zb6^7be{axov~=?{bFqN)^z`I_I@r2?GIO%{@84ydh`j*@(fogd++99d!2SQ9Vgt3e zH~Yk4@9qlyWNl_=$MMMrYPoF;495O%Fc|7)X8|Yg2rPi7!{sxPH}C*XQBF;^TE;Z! F{{UTirXm0U literal 0 HcmV?d00001 diff --git a/labelImg.py b/labelImg.py index f633ecde..8a0b4b31 100755 --- a/labelImg.py +++ b/labelImg.py @@ -65,13 +65,17 @@ class MainWindow(QMainWindow, WindowMixin): # Whether we need to save or not. self.dirty = False + # Enble auto saving if pressing next + self.autoSaving = True self._noSelectionSlot = False self._beginner = True self.screencastViewer = "firefox" self.screencast = "https://youtu.be/p0nR2YsCY_U" # Main widgets and related state. - self.labelDialog = LabelDialog(parent=self) + predefined_classes = ['person', 'dog'] + self.labelHist = predefined_classes + self.labelDialog = LabelDialog(parent=self, listItem=self.labelHist) self.labelList = QListWidget() self.itemsToShapes = {} @@ -822,8 +826,14 @@ class MainWindow(QMainWindow, WindowMixin): def openNextImg(self, _value=False): + # Proceding next image without dialog if having any label + if self.autoSaving is True and self.defaultSaveDir is not None: + if self.dirty is True and self.hasLabels(): + self.saveFile() + if not self.mayContinue(): return + if len(self.mImgList) <= 0: return filename = self.mImgList.pop(0) diff --git a/libs/labelDialog.py b/libs/labelDialog.py index b9da6308..7f2b8992 100644 --- a/libs/labelDialog.py +++ b/libs/labelDialog.py @@ -49,3 +49,4 @@ class LabelDialog(QDialog): def listItemClick(self, tQListWidgetItem): text = tQListWidgetItem.text().trimmed() self.edit.setText(text) + self.validate() diff --git a/libs/labelFile.py b/libs/labelFile.py index aa86fe08..80108980 100644 --- a/libs/labelFile.py +++ b/libs/labelFile.py @@ -87,8 +87,18 @@ class LabelFile(object): for p in points: x = p[0] y = p[1] - xmin = min(x,xmin) - ymin = min(y,ymin) - xmax = max(x,xmax) - ymax = max(y,ymax) + xmin = min(x,xmin) + ymin = min(y,ymin) + xmax = max(x,xmax) + ymax = max(y,ymax) + + # Martin Kersner, 2015/11/12 + # 0-valued coordinates of BB caused an error while + # training faster-rcnn object detector. + if (xmin < 1): + xmin = 1 + + if (ymin < 1): + ymin = 1 + return (int(xmin), int(ymin), int(xmax), int(ymax))