浏览代码

Use regex for keys of label_flags

Kentaro Wada 6 年之前
父节点
当前提交
448bd4a786
共有 3 个文件被更改,包括 18 次插入26 次删除
  1. 4 3
      labelme/app.py
  2. 2 16
      labelme/main.py
  3. 12 7
      labelme/widgets/label_dialog.py

+ 4 - 3
labelme/app.py

@@ -953,9 +953,10 @@ class MainWindow(QtWidgets.QMainWindow):
 
             default_flags = {}
             if self._config['label_flags']:
-                for l in ['__all__', label]:
-                    for k in self._config['label_flags'].get(l, []):
-                        default_flags[k] = False
+                for pattern, keys in self._config['label_flags'].items():
+                    if re.match(pattern, label):
+                        for key in keys:
+                            default_flags[key] = False
             shape.flags = default_flags
             shape.flags.update(flags)
 

+ 2 - 16
labelme/main.py

@@ -16,13 +16,6 @@ from labelme.utils import newIcon
 
 
 def main():
-    try:
-        _main()
-    except Exception as e:
-        logger.error(e)
-
-
-def _main():
     parser = argparse.ArgumentParser()
     parser.add_argument(
         '--version', '-V', action='store_true', help='show version'
@@ -82,8 +75,8 @@ def _main():
         '--labelflags',
         dest='label_flags',
         help='yaml string of label specific flags OR file containing json '
-             'string of label specific flags (ex. {person: [male, tall], '
-             'dog: [big, black, brown, white], __all__: [occluded]})',
+             'string of label specific flags (ex. {person-\d+: [male, tall], '
+             'dog-\d+: [black, brown, white], .*: [occluded]})',
         default=argparse.SUPPRESS,
     )
     parser.add_argument(
@@ -139,13 +132,6 @@ def _main():
         else:
             args.label_flags = yaml.load(args.label_flags)
 
-        # add not overlapping labels from label flags
-        if not hasattr(args, 'labels'):
-            args.labels = []
-        for label in args.label_flags.keys():
-            if label != '__all__' and label not in args.labels:
-                args.labels.append(label)
-
     config_from_args = args.__dict__
     config_from_args.pop('version')
     reset_config = config_from_args.pop('reset_config')

+ 12 - 7
labelme/widgets/label_dialog.py

@@ -1,3 +1,5 @@
+import re
+
 from qtpy import QT_VERSION
 from qtpy import QtCore
 from qtpy import QtGui
@@ -137,9 +139,10 @@ class LabelDialog(QtWidgets.QDialog):
         flags_old = self.getFlags()
 
         flags_new = {}
-        for label in ['__all__', label_new]:
-            for key in self._flags.get(label, []):
-                flags_new[key] = flags_old.get(key, False)
+        for pattern, keys in self._flags.items():
+            if re.match(pattern, label_new):
+                for key in keys:
+                    flags_new[key] = flags_old.get(key, False)
         self.setFlags(flags_new)
 
     def deleteFlags(self):
@@ -148,10 +151,12 @@ class LabelDialog(QtWidgets.QDialog):
             self.flagsLayout.removeWidget(item)
             item.setParent(None)
 
-    def resetFlags(self, label=None):
-        flags = {k: False for k in self._flags.get('__all__', [])}
-        if label:
-            flags.update({k: False for k in self._flags.get(label, [])})
+    def resetFlags(self, label=''):
+        flags = {}
+        for pattern, keys in self._flags.items():
+            if re.match(pattern, label):
+                for key in keys:
+                    flags[key] = False
         self.setFlags(flags)
 
     def setFlags(self, flags):