diff python/storage.py @ 812:21f10332c72b

moved the classification parameters from tracking.cfg to a new classifier.cfg and made all classification parameters apparent
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 10 Jun 2016 17:07:36 -0400
parents 180b6b0231c0
children ef8795dba5ed
line wrap: on
line diff
--- a/python/storage.py	Fri Jun 10 15:44:08 2016 -0400
+++ b/python/storage.py	Fri Jun 10 17:07:36 2016 -0400
@@ -1130,9 +1130,69 @@
 # Utils to read .ini type text files for configuration, meta data...
 #########################
 
+class ClassifierParameters(VideoFilenameAddable):
+    'Class for the parameters of object classifiers'
+    def loadConfigFile(self, filename):
+        from ConfigParser import ConfigParser
+        from os import path
+
+        config = ConfigParser()
+        config.readfp(FakeSecHead(openCheck(filename)))
+        self.sectionHeader = config.sections()[0]
+
+        self.pedBikeCarSVMFilename = config.get(self.sectionHeader, 'pbv-svm-filename')
+        self.bikeCarSVMFilename = config.get(self.sectionHeader, 'bv-svm-filename')
+        self.percentIncreaseCrop = config.getfloat(self.sectionHeader, 'percent-increase-crop')
+        self.minNPixels = config.getint(self.sectionHeader, 'min-npixels-crop')
+        x  = config.getint(self.sectionHeader, 'hog-rescale-size')
+        self.hogRescaleSize = (x, x)
+        self.hogNOrientations = config.getint(self.sectionHeader, 'hog-norientations')
+        x = config.getint(self.sectionHeader, 'hog-npixels-cell')
+        self.hogNPixelsPerCell = (x, x)
+        x = config.getint(self.sectionHeader, 'hog-ncells-block')
+        self.hogNCellsPerBlock = (x, x)
+        
+        self.speedAggregationMethod = config.get(self.sectionHeader, 'speed-aggregation-method')
+        self.nFramesIgnoreAtEnds = config.getint(self.sectionHeader, 'nframes-ignore-at-ends')
+        self.speedAggregationQuantile = config.getint(self.sectionHeader, 'speed-aggregation-quantile')
+        self.minSpeedEquiprobable = config.getfloat(self.sectionHeader, 'min-speed-equiprobable')
+        self.maxPedestrianSpeed = config.getfloat(self.sectionHeader, 'max-ped-speed')
+        self.maxCyclistSpeed = config.getfloat(self.sectionHeader, 'max-cyc-speed')
+        self.meanPedestrianSpeed = config.getfloat(self.sectionHeader, 'mean-ped-speed')
+        self.stdPedestrianSpeed = config.getfloat(self.sectionHeader, 'std-ped-speed')
+        self.locationCyclistSpeed = config.getfloat(self.sectionHeader, 'cyc-speed-loc')
+        self.scaleCyclistSpeed = config.getfloat(self.sectionHeader, 'cyc-speed-scale')
+        self.meanVehicleSpeed = config.getfloat(self.sectionHeader, 'mean-veh-speed')
+        self.stdVehicleSpeed = config.getfloat(self.sectionHeader, 'std-veh-speed')
+
+    def __init__(self, filename = None):
+        if filename is not None:
+            self.loadConfigFile(filename)
+
+    def convertToFrames(self, frameRate, speedRatio = 3.6):
+        '''Converts parameters with a relationship to time in 'native' frame time
+        speedRatio is the conversion from the speed unit in the config file
+        to the distance per second
+
+        ie param(config file) = speedRatio x fps x param(used in program)
+        eg km/h = 3.6 (m/s to km/h) x frame/s x m/frame'''
+        denominator = frameRate*speedRatio
+        #denominator2 = denominator**2
+        self.minSpeedEquiprobable = self.minSpeedEquiprobable/denominator
+        self.maxPedestrianSpeed = self.maxPedestrianSpeed/denominator
+        self.maxCyclistSpeed = self.maxCyclistSpeed/denominator
+        self.meanPedestrianSpeed = self.meanPedestrianSpeed/denominator
+        self.stdPedestrianSpeed = self.stdPedestrianSpeed/denominator
+        self.meanVehicleSpeed = self.meanVehicleSpeed/denominator
+        self.stdVehicleSpeed = self.stdVehicleSpeed/denominator
+        # special case for the lognormal distribution
+        self.locationCyclistSpeed = self.locationCyclistSpeed-log(denominator)
+        #self.scaleCyclistSpeed = self.scaleCyclistSpeed
+
+        
 class ProcessParameters(VideoFilenameAddable):
     '''Class for all parameters controlling data processing: input,
-    method parameters, etc. for tracking, classification and safety
+    method parameters, etc. for tracking and safety
 
     Note: framerate is already taken into account'''
 
@@ -1163,23 +1223,8 @@
         self.firstFrameNum = config.getint(self.sectionHeader, 'frame1')
         self.videoFrameRate = config.getfloat(self.sectionHeader, 'video-fps')
 
-        # Classification parameters
-        self.speedAggregationMethod = config.get(self.sectionHeader, 'speed-aggregation-method')
-        self.nFramesIgnoreAtEnds = config.getint(self.sectionHeader, 'nframes-ignore-at-ends')
-        self.speedAggregationQuantile = config.getint(self.sectionHeader, 'speed-aggregation-quantile')
-        self.minSpeedEquiprobable = config.getfloat(self.sectionHeader, 'min-speed-equiprobable')
-        self.minNPixels = config.getint(self.sectionHeader, 'min-npixels-crop')
-        self.pedBikeCarSVMFilename = config.get(self.sectionHeader, 'pbv-svm-filename')
-        self.bikeCarSVMFilename = config.get(self.sectionHeader, 'bv-svm-filename')
-        self.maxPedestrianSpeed = config.getfloat(self.sectionHeader, 'max-ped-speed')
-        self.maxCyclistSpeed = config.getfloat(self.sectionHeader, 'max-cyc-speed')
-        self.meanPedestrianSpeed = config.getfloat(self.sectionHeader, 'mean-ped-speed')
-        self.stdPedestrianSpeed = config.getfloat(self.sectionHeader, 'std-ped-speed')
-        self.locationCyclistSpeed = config.getfloat(self.sectionHeader, 'cyc-speed-loc')
-        self.scaleCyclistSpeed = config.getfloat(self.sectionHeader, 'cyc-speed-scale')
-        self.meanVehicleSpeed = config.getfloat(self.sectionHeader, 'mean-veh-speed')
-        self.stdVehicleSpeed = config.getfloat(self.sectionHeader, 'std-veh-speed')
-
+        self.classifierFilename = config.get(self.sectionHeader, 'classifier-filename')
+        
         # Safety parameters
         self.maxPredictedSpeed = config.getfloat(self.sectionHeader, 'max-predicted-speed')/3.6/self.videoFrameRate
         self.predictionTimeHorizon = config.getfloat(self.sectionHeader, 'prediction-time-horizon')*self.videoFrameRate
@@ -1198,26 +1243,6 @@
         if filename is not None:
             self.loadConfigFile(filename)
 
-    def convertToFrames(self, speedRatio = 3.6):
-        '''Converts parameters with a relationship to time in 'native' frame time
-        speedRatio is the conversion from the speed unit in the config file
-        to the distance per second
-
-        ie param(config file) = speedRatio x fps x param(used in program)
-        eg km/h = 3.6 (m/s to km/h) x frame/s x m/frame'''
-        denominator = self.videoFrameRate*speedRatio
-        denominator2 = denominator**2
-        self.minSpeedEquiprobable = self.minSpeedEquiprobable/denominator
-        self.maxPedestrianSpeed = self.maxPedestrianSpeed/denominator
-        self.maxCyclistSpeed = self.maxCyclistSpeed/denominator
-        self.meanPedestrianSpeed = self.meanPedestrianSpeed/denominator
-        self.stdPedestrianSpeed = self.stdPedestrianSpeed/denominator
-        self.meanVehicleSpeed = self.meanVehicleSpeed/denominator
-        self.stdVehicleSpeed = self.stdVehicleSpeed/denominator
-        # special case for the lognormal distribution
-        self.locationCyclistSpeed = self.locationCyclistSpeed-log(denominator)
-        #self.scaleCyclistSpeed = self.scaleCyclistSpeed
-
 class SceneParameters(object):
     def __init__(self, config, sectionName):
         from ConfigParser import NoOptionError