changeset 1075:67144f26609e

Updates crop
author Wendlasida
date Wed, 11 Jul 2018 15:01:37 -0400
parents d13f9bfbf3ff
children 108c5dc4e34a
files trafficintelligence/moving.py trafficintelligence/storage.py
diffstat 2 files changed, 47 insertions(+), 79 deletions(-) [+]
line wrap: on
line diff
--- a/trafficintelligence/moving.py	Fri Jul 06 18:42:58 2018 -0400
+++ b/trafficintelligence/moving.py	Wed Jul 11 15:01:37 2018 -0400
@@ -1150,6 +1150,29 @@
         self.setNObjects(nObjects) # a feature has None for nObjects
         self.features = None
         # compute bounding polygon from trajectory
+        
+    @staticmethod
+    def cropedTimeInterval(obj, value, after = True):
+        newTimeInterval = TimeInterval(obj.getFirstInstant(), min(value, obj.getLastInstant())) if after else TimeInterval(max(obj.getFirstInstant(), value), obj.getLastInstant())
+        if obj.positions is not None :
+            newPositions = obj.positions[slice(newTimeInterval.first, newTimeInterval.last+1)]
+        else:
+            newPositions = None
+        if obj.velocities is not None :
+            newVelocities = obj.velocities[slice(newTimeInterval.first, newTimeInterval.last+1)]
+        else:
+            newVelocities = None
+        if obj.features is not None :
+            newFeatures = [f.cropedTimeInterval(value, after) for f in obj.features]
+        else:
+            newFeatures = None
+        res = MovingObject(obj.getNum(), newTimeInterval, newPositions, newVelocities, obj.geometry, obj.userType, obj.nObjects)
+        res.features = newFeatures
+        res.featureNumbers = obj.featureNumbers
+        if hasattr(obj, 'projectedPositions'):
+            res.projectedPositions = obj.projectedPositions[slice(newTimeInterval.first, newTimeInterval.last+1)]
+        return res
+
 
     @staticmethod
     def aggregateTrajectories(features, interval = None, aggFunc = mean):
@@ -1339,6 +1362,7 @@
             self.nObjects = nObjects
         else:
             print('Number of objects represented by object {} must be greater or equal to 1 ({})'.format(self.getNum(), nObjects))
+            self.nObjects = None
         
     def setFeatures(self, features, featuresOrdered = False):
         '''Sets the features in the features field based on featureNumbers
--- a/trafficintelligence/storage.py	Fri Jul 06 18:42:58 2018 -0400
+++ b/trafficintelligence/storage.py	Wed Jul 11 15:01:37 2018 -0400
@@ -1357,10 +1357,10 @@
     method parameters, etc. for tracking and safety
 
     Note: framerate is already taken into account'''
-    
-    def loadTrackerConfig(self, filename = None):
+
+    def loadConfigFile(self, filename):
         from configparser import ConfigParser
-        
+
         config = ConfigParser({ 'acceleration-bound' : '3', 
                                 'min-velocity-cosine' : '0.8', 
                                 'ndisplacements' : '3', 
@@ -1379,80 +1379,7 @@
                                 '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
-
-        config = ConfigParser(strict=False)
         config.read_file(addSectionHeader(utils.openCheck(filename)))
-
         parentPath = Path(filename).parent
         self.sectionHeader = config.sections()[0]
         # Tracking/display parameters
@@ -1474,8 +1401,6 @@
         self.undistort = config.getboolean(self.sectionHeader, 'undistort')
         self.firstFrameNum = config.getint(self.sectionHeader, 'frame1')
         self.videoFrameRate = config.getfloat(self.sectionHeader, 'video-fps')
-
-        self.minFeatureTime = config.getint(self.sectionHeader, 'min-feature-time')
         
         self.classifierFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'classifier-filename'))
         
@@ -1497,7 +1422,26 @@
         self.lcssMetric = config.get(self.sectionHeader, 'lcss-metric')
         self.minLcssSimilarity = config.getfloat(self.sectionHeader, 'min-lcss-similarity')
         
-        self.configFilename = filename
+        # Tracking 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 __init__(self, filename = None):
         if filename is not None and Path(filename).exists():