comparison python/moving.py @ 524:1dced8932b08

corrected bugs
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 19 Jun 2014 13:31:00 -0400
parents ce4eaabacc26
children 21bdeb29f855
comparison
equal deleted inserted replaced
523:ce4eaabacc26 524:1dced8932b08
819 return predictPositionNoLimit(nTimeSteps, self.getPositionAtInstant(instant), self.getVelocityAtInstant(instant), externalAcceleration) 819 return predictPositionNoLimit(nTimeSteps, self.getPositionAtInstant(instant), self.getVelocityAtInstant(instant), externalAcceleration)
820 820
821 ### 821 ###
822 # User Type Classification 822 # User Type Classification
823 ### 823 ###
824 def classifyUserTypeSpeedPedstrianCar(self, threshold, aggregationFunc = median, ignoreNInstantsAtEnds = 0): 824 def classifyUserTypeSpeedMotorized(self, threshold, aggregationFunc = median, ignoreNInstantsAtEnds = 0):
825 '''Classifies slow and fast road users 825 '''Classifies slow and fast road users
826 slow: non-motorized -> pedestrians 826 slow: non-motorized -> pedestrians
827 fast: motorized -> cars''' 827 fast: motorized -> cars'''
828 if ignoreNInstantsAtEnds > 0: 828 if ignoreNInstantsAtEnds > 0:
829 speeds = self.getSpeeds()[ignoreNInstantsAtEnds:-ignoreNInstantsAtEnds] 829 speeds = self.getSpeeds()[ignoreNInstantsAtEnds:-ignoreNInstantsAtEnds]
832 if aggregationFunc(speeds) >= threshold: 832 if aggregationFunc(speeds) >= threshold:
833 self.setUserType(userType2Num['car']) 833 self.setUserType(userType2Num['car'])
834 else: 834 else:
835 self.setUserType(userType2Num['pedestrian']) 835 self.setUserType(userType2Num['pedestrian'])
836 836
837 def classifyUserTypeSpeed(self, aggregationFunc = median, speedProbabilities): 837 def classifyUserTypeSpeed(self, speedProbabilities, aggregationFunc = median):
838 '''Classifies road user per road user type 838 '''Classifies road user per road user type
839 speedProbabilities are functions return P(speed|class) 839 speedProbabilities are functions return P(speed|class)
840 in a dictionary indexed by user type names 840 in a dictionary indexed by user type names
841 Returns probabilities for each class 841 Returns probabilities for each class
842 842
874 else: 874 else:
875 self.userTypes[instant] = userType2Num['car'] 875 self.userTypes[instant] = userType2Num['car']
876 else: 876 else:
877 self.userTypes[instant] = userType2Num['unknown'] 877 self.userTypes[instant] = userType2Num['unknown']
878 878
879 def classifyUserTypeHoGSVM(self, images, pedBikeCarSVM, homography, width, height, bikeCarSVM = None, pedBikeSpeedTreshold = float('Inf'), bikeCarSpeedThreshold = float('Inf'), aggregationFunc = median, speedProbabilities = None, px = 0.2, py = 0.2, pixelThreshold = 800): 879 def classifyUserTypeHoGSVM(self, images, pedBikeCarSVM, homography, width, height, bikeCarSVM = None, pedBikeSpeedTreshold = float('Inf'), bikeCarSpeedThreshold = float('Inf'), speedProbabilities = None, aggregationFunc = median, px = 0.2, py = 0.2, pixelThreshold = 800):
880 '''Agregates SVM detections in each image and returns probability 880 '''Agregates SVM detections in each image and returns probability
881 (proportion of instants with classification in each category) 881 (proportion of instants with classification in each category)
882 882
883 iamges is a dictionary of images indexed by instant 883 iamges is a dictionary of images indexed by instant
884 With default parameters, the general (ped-bike-car) classifier will be used 884 With default parameters, the general (ped-bike-car) classifier will be used
890 if len(self.userTypes) != self.length(): # if classification has not been done previously 890 if len(self.userTypes) != self.length(): # if classification has not been done previously
891 for t in self.getTimeInterval(): 891 for t in self.getTimeInterval():
892 if t not in self.userTypes: 892 if t not in self.userTypes:
893 self.classifyUserTypeHoGSVMAtInstant(images[t], pedBikeCarSVM, t, homography, width, height, bikeCarSVM, pedBikeSpeedTreshold, bikeCarSpeedThreshold, px, py, pixelThreshold) 893 self.classifyUserTypeHoGSVMAtInstant(images[t], pedBikeCarSVM, t, homography, width, height, bikeCarSVM, pedBikeSpeedTreshold, bikeCarSpeedThreshold, px, py, pixelThreshold)
894 # compute P(Speed|Class) 894 # compute P(Speed|Class)
895 if speedProbabilities = None: # equiprobable information from speed 895 if speedProbabilities == None: # equiprobable information from speed
896 userTypeProbabilities = {userType2Num['car']: 1., userType2Num['pedestrian']: 1., userType2Num['bicycle']: 1.} 896 userTypeProbabilities = {userType2Num['car']: 1., userType2Num['pedestrian']: 1., userType2Num['bicycle']: 1.}
897 else: 897 else:
898 userTypeProbabilities = {userType2Num[userTypename]: speedProbabilities[userTypename](self.aggregatedSpeed) for userTypename in speedProbabilities} 898 userTypeProbabilities = {userType2Num[userTypename]: speedProbabilities[userTypename](self.aggregatedSpeed) for userTypename in speedProbabilities}
899 # result is P(Class|Appearance) x P(Speed|Class) 899 # result is P(Class|Appearance) x P(Speed|Class)
900 nInstantsUserType = {userType2Num[userTypename]: 0 for userTypename in userTypeProbabilities}# number of instants the object is classified as userTypename 900 nInstantsUserType = {userType2Num[userTypename]: 0 for userTypename in userTypeProbabilities}# number of instants the object is classified as userTypename