comparison 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
comparison
equal deleted inserted replaced
810:082a5c2685f4 812:21f10332c72b
1128 1128
1129 ######################### 1129 #########################
1130 # Utils to read .ini type text files for configuration, meta data... 1130 # Utils to read .ini type text files for configuration, meta data...
1131 ######################### 1131 #########################
1132 1132
1133 class ClassifierParameters(VideoFilenameAddable):
1134 'Class for the parameters of object classifiers'
1135 def loadConfigFile(self, filename):
1136 from ConfigParser import ConfigParser
1137 from os import path
1138
1139 config = ConfigParser()
1140 config.readfp(FakeSecHead(openCheck(filename)))
1141 self.sectionHeader = config.sections()[0]
1142
1143 self.pedBikeCarSVMFilename = config.get(self.sectionHeader, 'pbv-svm-filename')
1144 self.bikeCarSVMFilename = config.get(self.sectionHeader, 'bv-svm-filename')
1145 self.percentIncreaseCrop = config.getfloat(self.sectionHeader, 'percent-increase-crop')
1146 self.minNPixels = config.getint(self.sectionHeader, 'min-npixels-crop')
1147 x = config.getint(self.sectionHeader, 'hog-rescale-size')
1148 self.hogRescaleSize = (x, x)
1149 self.hogNOrientations = config.getint(self.sectionHeader, 'hog-norientations')
1150 x = config.getint(self.sectionHeader, 'hog-npixels-cell')
1151 self.hogNPixelsPerCell = (x, x)
1152 x = config.getint(self.sectionHeader, 'hog-ncells-block')
1153 self.hogNCellsPerBlock = (x, x)
1154
1155 self.speedAggregationMethod = config.get(self.sectionHeader, 'speed-aggregation-method')
1156 self.nFramesIgnoreAtEnds = config.getint(self.sectionHeader, 'nframes-ignore-at-ends')
1157 self.speedAggregationQuantile = config.getint(self.sectionHeader, 'speed-aggregation-quantile')
1158 self.minSpeedEquiprobable = config.getfloat(self.sectionHeader, 'min-speed-equiprobable')
1159 self.maxPedestrianSpeed = config.getfloat(self.sectionHeader, 'max-ped-speed')
1160 self.maxCyclistSpeed = config.getfloat(self.sectionHeader, 'max-cyc-speed')
1161 self.meanPedestrianSpeed = config.getfloat(self.sectionHeader, 'mean-ped-speed')
1162 self.stdPedestrianSpeed = config.getfloat(self.sectionHeader, 'std-ped-speed')
1163 self.locationCyclistSpeed = config.getfloat(self.sectionHeader, 'cyc-speed-loc')
1164 self.scaleCyclistSpeed = config.getfloat(self.sectionHeader, 'cyc-speed-scale')
1165 self.meanVehicleSpeed = config.getfloat(self.sectionHeader, 'mean-veh-speed')
1166 self.stdVehicleSpeed = config.getfloat(self.sectionHeader, 'std-veh-speed')
1167
1168 def __init__(self, filename = None):
1169 if filename is not None:
1170 self.loadConfigFile(filename)
1171
1172 def convertToFrames(self, frameRate, speedRatio = 3.6):
1173 '''Converts parameters with a relationship to time in 'native' frame time
1174 speedRatio is the conversion from the speed unit in the config file
1175 to the distance per second
1176
1177 ie param(config file) = speedRatio x fps x param(used in program)
1178 eg km/h = 3.6 (m/s to km/h) x frame/s x m/frame'''
1179 denominator = frameRate*speedRatio
1180 #denominator2 = denominator**2
1181 self.minSpeedEquiprobable = self.minSpeedEquiprobable/denominator
1182 self.maxPedestrianSpeed = self.maxPedestrianSpeed/denominator
1183 self.maxCyclistSpeed = self.maxCyclistSpeed/denominator
1184 self.meanPedestrianSpeed = self.meanPedestrianSpeed/denominator
1185 self.stdPedestrianSpeed = self.stdPedestrianSpeed/denominator
1186 self.meanVehicleSpeed = self.meanVehicleSpeed/denominator
1187 self.stdVehicleSpeed = self.stdVehicleSpeed/denominator
1188 # special case for the lognormal distribution
1189 self.locationCyclistSpeed = self.locationCyclistSpeed-log(denominator)
1190 #self.scaleCyclistSpeed = self.scaleCyclistSpeed
1191
1192
1133 class ProcessParameters(VideoFilenameAddable): 1193 class ProcessParameters(VideoFilenameAddable):
1134 '''Class for all parameters controlling data processing: input, 1194 '''Class for all parameters controlling data processing: input,
1135 method parameters, etc. for tracking, classification and safety 1195 method parameters, etc. for tracking and safety
1136 1196
1137 Note: framerate is already taken into account''' 1197 Note: framerate is already taken into account'''
1138 1198
1139 def loadConfigFile(self, filename): 1199 def loadConfigFile(self, filename):
1140 from ConfigParser import ConfigParser 1200 from ConfigParser import ConfigParser
1161 self.undistortedImageMultiplication = config.getfloat(self.sectionHeader, 'undistorted-size-multiplication') 1221 self.undistortedImageMultiplication = config.getfloat(self.sectionHeader, 'undistorted-size-multiplication')
1162 self.undistort = config.getboolean(self.sectionHeader, 'undistort') 1222 self.undistort = config.getboolean(self.sectionHeader, 'undistort')
1163 self.firstFrameNum = config.getint(self.sectionHeader, 'frame1') 1223 self.firstFrameNum = config.getint(self.sectionHeader, 'frame1')
1164 self.videoFrameRate = config.getfloat(self.sectionHeader, 'video-fps') 1224 self.videoFrameRate = config.getfloat(self.sectionHeader, 'video-fps')
1165 1225
1166 # Classification parameters 1226 self.classifierFilename = config.get(self.sectionHeader, 'classifier-filename')
1167 self.speedAggregationMethod = config.get(self.sectionHeader, 'speed-aggregation-method') 1227
1168 self.nFramesIgnoreAtEnds = config.getint(self.sectionHeader, 'nframes-ignore-at-ends')
1169 self.speedAggregationQuantile = config.getint(self.sectionHeader, 'speed-aggregation-quantile')
1170 self.minSpeedEquiprobable = config.getfloat(self.sectionHeader, 'min-speed-equiprobable')
1171 self.minNPixels = config.getint(self.sectionHeader, 'min-npixels-crop')
1172 self.pedBikeCarSVMFilename = config.get(self.sectionHeader, 'pbv-svm-filename')
1173 self.bikeCarSVMFilename = config.get(self.sectionHeader, 'bv-svm-filename')
1174 self.maxPedestrianSpeed = config.getfloat(self.sectionHeader, 'max-ped-speed')
1175 self.maxCyclistSpeed = config.getfloat(self.sectionHeader, 'max-cyc-speed')
1176 self.meanPedestrianSpeed = config.getfloat(self.sectionHeader, 'mean-ped-speed')
1177 self.stdPedestrianSpeed = config.getfloat(self.sectionHeader, 'std-ped-speed')
1178 self.locationCyclistSpeed = config.getfloat(self.sectionHeader, 'cyc-speed-loc')
1179 self.scaleCyclistSpeed = config.getfloat(self.sectionHeader, 'cyc-speed-scale')
1180 self.meanVehicleSpeed = config.getfloat(self.sectionHeader, 'mean-veh-speed')
1181 self.stdVehicleSpeed = config.getfloat(self.sectionHeader, 'std-veh-speed')
1182
1183 # Safety parameters 1228 # Safety parameters
1184 self.maxPredictedSpeed = config.getfloat(self.sectionHeader, 'max-predicted-speed')/3.6/self.videoFrameRate 1229 self.maxPredictedSpeed = config.getfloat(self.sectionHeader, 'max-predicted-speed')/3.6/self.videoFrameRate
1185 self.predictionTimeHorizon = config.getfloat(self.sectionHeader, 'prediction-time-horizon')*self.videoFrameRate 1230 self.predictionTimeHorizon = config.getfloat(self.sectionHeader, 'prediction-time-horizon')*self.videoFrameRate
1186 self.collisionDistance = config.getfloat(self.sectionHeader, 'collision-distance') 1231 self.collisionDistance = config.getfloat(self.sectionHeader, 'collision-distance')
1187 self.crossingZones = config.getboolean(self.sectionHeader, 'crossing-zones') 1232 self.crossingZones = config.getboolean(self.sectionHeader, 'crossing-zones')
1195 self.useFeaturesForPrediction = config.getboolean(self.sectionHeader, 'use-features-prediction') 1240 self.useFeaturesForPrediction = config.getboolean(self.sectionHeader, 'use-features-prediction')
1196 1241
1197 def __init__(self, filename = None): 1242 def __init__(self, filename = None):
1198 if filename is not None: 1243 if filename is not None:
1199 self.loadConfigFile(filename) 1244 self.loadConfigFile(filename)
1200
1201 def convertToFrames(self, speedRatio = 3.6):
1202 '''Converts parameters with a relationship to time in 'native' frame time
1203 speedRatio is the conversion from the speed unit in the config file
1204 to the distance per second
1205
1206 ie param(config file) = speedRatio x fps x param(used in program)
1207 eg km/h = 3.6 (m/s to km/h) x frame/s x m/frame'''
1208 denominator = self.videoFrameRate*speedRatio
1209 denominator2 = denominator**2
1210 self.minSpeedEquiprobable = self.minSpeedEquiprobable/denominator
1211 self.maxPedestrianSpeed = self.maxPedestrianSpeed/denominator
1212 self.maxCyclistSpeed = self.maxCyclistSpeed/denominator
1213 self.meanPedestrianSpeed = self.meanPedestrianSpeed/denominator
1214 self.stdPedestrianSpeed = self.stdPedestrianSpeed/denominator
1215 self.meanVehicleSpeed = self.meanVehicleSpeed/denominator
1216 self.stdVehicleSpeed = self.stdVehicleSpeed/denominator
1217 # special case for the lognormal distribution
1218 self.locationCyclistSpeed = self.locationCyclistSpeed-log(denominator)
1219 #self.scaleCyclistSpeed = self.scaleCyclistSpeed
1220 1245
1221 class SceneParameters(object): 1246 class SceneParameters(object):
1222 def __init__(self, config, sectionName): 1247 def __init__(self, config, sectionName):
1223 from ConfigParser import NoOptionError 1248 from ConfigParser import NoOptionError
1224 from ast import literal_eval 1249 from ast import literal_eval