changeset 1052:1748c02f9ac3

Modifying storage.py [configloaders]
author Wendlasida
date Thu, 05 Jul 2018 13:48:12 -0400
parents b1ba6d44fcb9
children 60cc87e824c4
files ..hgignore.swp trafficintelligence/storage.py
diffstat 2 files changed, 94 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
Binary file ..hgignore.swp has changed
--- a/trafficintelligence/storage.py	Wed Jul 04 16:21:09 2018 -0400
+++ b/trafficintelligence/storage.py	Thu Jul 05 13:48:12 2018 -0400
@@ -414,7 +414,7 @@
                     for feature in obj.getFeatures():
                         featureNum = feature.getNum()
                         cursor.execute(objectFeatureQuery, (obj.getNum(), featureNum))
-                cursor.execute(objectQuery, (obj.getNum(), obj.getUserType(), 1))   
+                cursor.execute(objectQuery, (obj.getNum(), obj.getUserType(), obj.nObjects if hasattr(obj, 'nObjects') and obj.nObjects is not None else 1))   
     # Parse curvilinear position structure
     elif(trajectoryType == 'curvilinear'):
         createCurvilinearTrajectoryTable(cursor)
@@ -1363,6 +1363,95 @@
     method parameters, etc. for tracking and safety
 
     Note: framerate is already taken into account'''
+    
+    def loadTrackerConfig(self, filename = None):
+        from configparser import ConfigParser
+
+        config = ConfigParser(strict=False)
+        config['DEFAULT']['acceleration-bound'] = '3'
+        config['DEFAULT']['min-velocity-cosine'] = '0.8'
+        config['DEFAULT']['ndisplacements'] = '3'
+        config['DEFAULT']['max-nfeatures'] = '1000'
+        config['DEFAULT']['feature-quality'] = '0.0812219538558'
+        config['DEFAULT']['min-feature-distanceklt'] = '3.54964337411'
+        config['DEFAULT']['block-size'] = '7'
+        config['DEFAULT']['use-harris-detector'] = 'false'
+        config['DEFAULT']['k'] = '0.04'
+        config['DEFAULT']['window-size'] = '6'
+        config['DEFAULT']['pyramid-level'] = '5'
+        config['DEFAULT']['min-tracking-error'] = '0.183328975142'
+        config['DEFAULT']['max-number-iterations'] = '20'
+        config['DEFAULT']['feature-flag'] = '0'
+        config['DEFAULT']['min-feature-eig-threshold'] = '1e-4'
+        config['DEFAULT']['min-feature-time'] = '15'
+        config['DEFAULT']['min-feature-displacement'] = '0.05'
+        config['DEFAULT']['tracker-reload-time'] = '10'
+        
+        self.sectionHeader = config.sections()[0]
+        
+        if filename is not None:
+            config.read_file(addSectionHeader(utils.openCheck(filename)))
+        
+        #Tracker parameters
+        self.accelerationBound = config.getint(self.sectionHeader, 'acceleration-bound')
+        self.minVelocityCosine = config.getfloat(self.sectionHeader, 'min-velocity-cosine')
+        self.ndisplacements = config.getfloat(self.sectionHeader, 'ndisplacements')
+        self.maxNFeatures = config.getint(self.sectionHeader, 'max-nfeatures')
+        self.minFeatureDistanceKLT = config.getfloat(self.sectionHeader, 'min-feature-distanceklt')
+        self.featureQuality = config.getfloat(self.sectionHeader, 'feature-quality')
+        self.blockSize = config.getint(self.sectionHeader, 'block-size')
+        self.useHarrisDetector = config.getboolean(self.sectionHeader, 'use-harris-detector')
+        self.k = config.getfloat(self.sectionHeader, 'k')
+        self.winSize = config.getint(self.sectionHeader, 'window-size')
+        self.pyramidLevel = config.getint(self.sectionHeader, 'pyramid-level')
+        self.maxNumberTrackingIterations = config.getint(self.sectionHeader, 'max-number-iterations')
+        self.minTrackingError = config.getfloat(self.sectionHeader, 'min-tracking-error')
+        self.featureFlags = config.getboolean(self.sectionHeader, 'feature-flag')
+        self.minFeatureEigThreshold = config.getfloat(self.sectionHeader, 'min-feature-eig-threshold')
+        self.minFeatureTime = config.getint(self.sectionHeader, 'min-feature-time')
+        self.minFeatureDisplacement = config.getfloat(self.sectionHeader, 'min-feature-displacement')
+        self.updateTimer = config.getint(self.sectionHeader, 'tracker-reload-time')
+        
+    def loadHomographyConfig(self, filename = None):
+        
+        if filename is None:
+            self.homographyFilename = None
+            self.homography = None
+        else :
+            from configparser import ConfigParser
+            config = ConfigParser(strict=False)
+            config.read_file(addSectionHeader(utils.openCheck(filename)))
+            parentPath = Path(filename).parent
+            self.sectionHeader = config.sections()[0]
+            self.homographyFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'homography-filename'))
+            if Path(self.homographyFilename).exists():
+                self.homography = loadtxt(self.homographyFilename)
+            else:
+                self.homography = None
+            
+    def loadDistortionConfig(self, filename = None):
+        if filename is None:
+            self.intrinsicCameraFilename = None
+            self.intrinsicCameraMatrix = None
+            self.distortionCoefficients = None
+            self.undistort = False
+            self.undistortedImageMultiplication = 1.
+        else:
+            from configparser import ConfigParser
+            config = ConfigParser(strict=False)
+            config.read_file(addSectionHeader(utils.openCheck(filename)))
+            parentPath = Path(filename).parent
+            self.sectionHeader = config.sections()[0]
+            self.intrinsicCameraFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'intrinsic-camera-filename'))
+            if Path(self.intrinsicCameraFilename).exists():
+                self.intrinsicCameraMatrix = loadtxt(self.intrinsicCameraFilename)
+            else:
+                self.intrinsicCameraMatrix = None
+            distortionCoefficients = getValuesFromINIFile(filename, 'distortion-coefficients', '=')        
+            self.distortionCoefficients = [float(x) for x in distortionCoefficients]
+            self.undistortedImageMultiplication  = config.getfloat(self.sectionHeader, 'undistorted-size-multiplication')
+            self.undistort = config.getboolean(self.sectionHeader, 'undistort')
+            
 
     def loadConfigFile(self, filename):
         from configparser import ConfigParser
@@ -1392,7 +1481,7 @@
         self.firstFrameNum = config.getint(self.sectionHeader, 'frame1')
         self.videoFrameRate = config.getfloat(self.sectionHeader, 'video-fps')
 
-        self.minFeatureTime = config.getfloat(self.sectionHeader, 'min-feature-time')
+        self.minFeatureTime = config.getint(self.sectionHeader, 'min-feature-time')
         
         self.classifierFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'classifier-filename'))
         
@@ -1413,12 +1502,15 @@
         self.maxLcssDistance = config.getfloat(self.sectionHeader, 'max-lcss-distance')
         self.lcssMetric = config.get(self.sectionHeader, 'lcss-metric')
         self.minLcssSimilarity = config.getfloat(self.sectionHeader, 'min-lcss-similarity')
+        
+        self.configFilename = filename
 
     def __init__(self, filename = None):
         if filename is not None and Path(filename).exists():
             self.loadConfigFile(filename)
         else:
             print('Configuration filename {} could not be loaded.'.format(filename))
+            self.configFilename = filename
 
 def processVideoArguments(args):
     '''Loads information from configuration file