Diff of /darkflow/defaults.py [000000] .. [d34869]

Switch to side-by-side view

--- a
+++ b/darkflow/defaults.py
@@ -0,0 +1,99 @@
+class argHandler(dict):
+    # A super duper fancy custom made CLI argument handler!!
+    __getattr__ = dict.get
+    __setattr__ = dict.__setitem__
+    __delattr__ = dict.__delitem__
+    _descriptions = {'help, --h, -h': 'show this super helpful message and exit'}
+
+    def setDefaults(self):
+        self.define('imgdir', './sample_img/', 'path to testing directory with images')
+        self.define('binary', './bin/', 'path to .weights directory')
+        self.define('config', './cfg/', 'path to .cfg directory')
+        self.define('dataset', '../pascal/VOCdevkit/IMG/', 'path to dataset directory')
+        self.define('labels', 'labels.txt', 'path to labels file')
+        self.define('backup', './weights/', 'path to backup folder')
+        self.define('summary', '', 'path to TensorBoard summaries directory')
+        self.define('annotation', '../pascal/VOCdevkit/ANN/', 'path to annotation directory')
+        self.define('threshold', -0.1, 'detection threshold')
+        self.define('model', '', 'configuration of choice')
+        self.define('trainer', 'rmsprop', 'training algorithm')
+        self.define('momentum', 0.0, 'applicable for rmsprop and momentum optimizers')
+        self.define('verbalise', True, 'say out loud while building graph')
+        self.define('train', False, 'train the whole net')
+        self.define('load', '', 'how to initialize the net? Either from .weights or a checkpoint, or even from scratch')
+        self.define('savepb', False, 'save net and weight to a .pb file')
+        self.define('gpu', 0.0, 'how much gpu (from 0.0 to 1.0)')
+        self.define('gpuName', '/gpu:0', 'GPU device name')
+        self.define('lr', 1e-5, 'learning rate')
+        self.define('keep', 20, 'Number of most recent training results to save')
+        self.define('batch', 16, 'batch size')
+        self.define('epoch', 1000, 'number of epoch')
+        self.define('save', 2000, 'save checkpoint every ? training examples')
+        self.define('demo', '', 'demo on webcam')
+        self.define('queue', 1, 'process demo in batch')
+        self.define('json', False, 'Outputs bounding box information in json format.')
+        self.define('saveVideo', False, 'Records video from input video or camera')
+        self.define('pbLoad', '', 'path to .pb protobuf file (metaLoad must also be specified)')
+        self.define('metaLoad', '', 'path to .meta file generated during --savepb that corresponds to .pb file')
+
+    def define(self, argName, default, description):
+        self[argName] = default
+        self._descriptions[argName] = description
+
+    def help(self):
+        print('Example usage: flow --imgdir sample_img/ --model cfg/yolo.cfg --load bin/yolo.weights')
+        print('')
+        print('Arguments:')
+        spacing = max([len(i) for i in self._descriptions.keys()]) + 2
+        for item in self._descriptions:
+            currentSpacing = spacing - len(item)
+            print('  --' + item + (' ' * currentSpacing) + self._descriptions[item])
+        print('')
+        exit()
+
+    def parseArgs(self, args):
+        print('')
+        i = 1
+        while i < len(args):
+            if args[i] == '-h' or args[i] == '--h' or args[i] == '--help':
+                self.help()  # Time for some self help! :)
+            if len(args[i]) < 2:
+                print('ERROR - Invalid argument: ' + args[i])
+                print('Try running flow --help')
+                exit()
+            argumentName = args[i][2:]
+            if isinstance(self.get(argumentName), bool):
+                if not (i + 1) >= len(args) and (
+                        args[i + 1].lower() != 'false' and args[i + 1].lower() != 'true') and not args[
+                    i + 1].startswith('--'):
+                    print('ERROR - Expected boolean value (or no value) following argument: ' + args[i])
+                    print('Try running flow --help')
+                    exit()
+                elif not (i + 1) >= len(args) and (args[i + 1].lower() == 'false' or args[i + 1].lower() == 'true'):
+                    self[argumentName] = (args[i + 1].lower() == 'true')
+                    i += 1
+                else:
+                    self[argumentName] = True
+            elif args[i].startswith('--') and not (i + 1) >= len(args) and not args[i + 1].startswith(
+                    '--') and argumentName in self:
+                if isinstance(self[argumentName], float):
+                    try:
+                        args[i + 1] = float(args[i + 1])
+                    except:
+                        print('ERROR - Expected float for argument: ' + args[i])
+                        print('Try running flow --help')
+                        exit()
+                elif isinstance(self[argumentName], int):
+                    try:
+                        args[i + 1] = int(args[i + 1])
+                    except:
+                        print('ERROR - Expected int for argument: ' + args[i])
+                        print('Try running flow --help')
+                        exit()
+                self[argumentName] = args[i + 1]
+                i += 1
+            else:
+                print('ERROR - Invalid argument: ' + args[i])
+                print('Try running flow --help')
+                exit()
+            i += 1