diff scripts/nomad/site-parameters-optimization.py @ 1219:8a626226793e

update where optimization uses either nomad-parameter file depending on optimizing 1 or 2 steps
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 19 Jun 2023 17:09:56 -0400
parents 606817bc31e8
children 5a207c838323
line wrap: on
line diff
--- a/scripts/nomad/site-parameters-optimization.py	Sat Jun 17 08:48:22 2023 -0400
+++ b/scripts/nomad/site-parameters-optimization.py	Mon Jun 19 17:09:56 2023 -0400
@@ -7,7 +7,7 @@
 import numpy as np
 
 
-def loadParametersStartProcess(filename):
+def loadParametersStartProcess(filename, intersections):
     # load initial parameters from x.txt
     f = open(filename, 'r+')
     l = f.readline()
@@ -18,13 +18,12 @@
     para = paraValueList(x)
     
     # run process including trackingfeature, groupfeature, load groundtruth, compute mota
-    print(process(para, intersections, optimizeGroupingOnly))
+    print(process(para, intersections))
 
 def paraValueList(x):
     #create para-value list
     #list of the 8 parameters and their values
-    pn = 8
-    p = pn*[None]
+    p = 8*[None]
     p[0] = '--feature-quality'             #]0.-0.4]
     p[1] = '--min-feature-distanceklt'     #]0.-6]
     p[2] = '--window-size'                 #[1-10]integer
@@ -35,12 +34,16 @@
     p[7] = '--min-nfeatures-group'         #[2-4]
     
     para = []
-    for n in range(pn):
-        para = para + [p[n],x[n]]
+    if len(x) == 4:
+        for n in range(4):
+            para = para + [p[4+n],x[n]]
+    else:
+        for n in range(len(x)):
+            para = para + [p[n],x[n]]
     
     return para
 
-def process(para, intersections, optimizeGroupingOnly):
+def process(para, intersections):
     Mota = []
     gtDatabaseaAbsPaths = []
     configFileAbsPaths = []
@@ -58,13 +61,15 @@
         os.chdir(cwd)
     for gtDatabaseAbsPath, configFileAbsPath in zip(gtDatabaseaAbsPaths, configFileAbsPaths):
         gtDatabaseBasename = gtDatabaseAbsPath[:-10]
-        videoFilename = gtDatabaseBasename + ".MP4"
+        videoFilename = gtDatabaseBasename + ".avi" # careful, it may be necessary to check video type / extension
+        if not os.path.exists(videoFilename):
+            print('Video file {} does not exist'.format(videoFilename))
         databaseFilename = gtDatabaseBasename + ".sqlite"
         gtDatabaseDirname = os.path.dirname(gtDatabaseAbsPath)
         homographyFilename = gtDatabaseDirname + "/homography.txt"
         maskFilename = gtDatabaseDirname + "/mask.png"
         # Skip feature tracking if the user specified to optimize only grouping parameters
-        if not optimizeGroupingOnly:
+        if len(para) > 8:
             # Track features
             trackingFeature(para, configFileAbsPath, videoFilename, databaseFilename, homographyFilename, maskFilename)
         # Group features
@@ -91,7 +96,7 @@
     # trackingfeature command parameters
     tf = ['feature-based-tracking', config, '--tf', '--video-filename', video, '--database-filename', db, '--homography-filename', homo, '--mask-filename', mask]
     # run in command line and print directly
-    subprocess.check_output(tf + para[0:10])
+    subprocess.check_output(tf + para)
 
 def groupFeature(para, config, video, db, homo, mask):
     #remove previous grouping
@@ -99,24 +104,19 @@
     #groupfeature command parameters
     gf = ['feature-based-tracking', config, '--gf', '--video-filename', video, '--database-filename', db, '--homography-filename', homo, '--mask-filename', mask]
     #run in command line and print directly
-    subprocess.check_output(gf + para[8:16])  # ['--min-feature-time', 'x', '--mm-connection-distance', 'x', '--mm-segmentation-distance', 'x', '--min-nfeatures-group', 'x']
-
-def computeMota(annotations, objects, Mota):
-    matchingDistance = 5
-    firstInstant = 0
-    lastInstant = 50000
-    return moving.computeClearMOT(annotations, objects, matchingDistance, firstInstant, lastInstant)[1]
+    subprocess.check_output(gf + para)  # ['--min-feature-time', 'x', '--mm-connection-distance', 'x', '--mm-segmentation-distance', 'x', '--min-nfeatures-group', 'x']
 
 
 if __name__ == "__main__":
     # Load args that were given with select-arguments.py
-    with open('arguments.txt', 'r') as f:
-        args = f.read().split('\n')
-        intersections = args[0]
-        optimizeGroupingOnly = args[1]
-        # Convert string representation of list into list
-        intersections = eval(intersections)
+    # with open('arguments.txt', 'r') as f:
+    #     args = f.read().split('\n')
+    #     intersections = args[0]
+    #     optimizeGroupingOnly = eval(args[1])
+    #     intersections = eval(intersections)
+    
+    # Just write the intersections to optimize here
+    intersections = ['../12-laurier']
 
-    loadParametersStartProcess(sys.argv[1])
+    loadParametersStartProcess(sys.argv[1], intersections)
     sys.exit(0)
-