changeset 1054:d13f9bfbf3ff

Retry
author Wendlasida
date Fri, 06 Jul 2018 18:42:58 -0400
parents 60cc87e824c4 (diff) c9c03c97ed9f (current diff)
children 9e4e80fc5943 67144f26609e
files trafficintelligence/storage.py trafficintelligence/tests/tutorials.py
diffstat 2 files changed, 94 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
Binary file ..hgignore.swp has changed
--- a/trafficintelligence/storage.py	Fri Jul 06 15:58:45 2018 -0400
+++ b/trafficintelligence/storage.py	Fri Jul 06 18:42:58 2018 -0400
@@ -408,7 +408,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)
@@ -1357,6 +1357,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({ 'acceleration-bound' : '3', 
+                                'min-velocity-cosine' : '0.8', 
+                                'ndisplacements' : '3', 
+                                'max-nfeatures' : '1000',
+                                'feature-quality' : '0.0812219538558',
+                                'min-feature-distanceklt' : '3.54964337411',
+                                'block-size' : '7',
+                                'use-harris-detector' : '0',
+                                'k' : '0.04',
+                                'window-size' : '6',
+                                'pyramid-level' : '5',
+                                'min-tracking-error' : '0.183328975142',
+                                'max-number-iterations' : '20',
+                                'feature-flag' : '0',
+                                'min-feature-eig-threshold' : '1e-4',
+                                'min-feature-time' : '15',
+                                'min-feature-displacement' : '0.05',
+                                'tracker-reload-time' : '10'}, strict=False)
+        if filename is not None:
+            config.read_file(addSectionHeader(utils.openCheck(filename)))
+            self.sectionHeader = config.sections()[0]
+        else:
+            self.sectionHeader = 'DEFAULT'
+            
+        
+        #Tracker parameters
+        self.accelerationBound = config.getint(self.sectionHeader, 'acceleration-bound')
+        self.minVelocityCosine = config.getfloat(self.sectionHeader, 'min-velocity-cosine')
+        self.ndisplacements = config.getint(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
@@ -1386,7 +1475,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'))
         
@@ -1407,12 +1496,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