Mercurial Hosting > traffic-intelligence
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) -