comparison trafficintelligence/moving.py @ 1132:09ef0dc994a0

modification for performance computation
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 26 Feb 2020 22:32:39 -0500
parents 2682b4696cdf
children c4d9c270f999
comparison
equal deleted inserted replaced
1131:3972d85e3b6c 1132:09ef0dc994a0
1755 return Point.boundingRectangle(positions, self.getVelocityAtInstant(instant)) 1755 return Point.boundingRectangle(positions, self.getVelocityAtInstant(instant))
1756 else: 1756 else:
1757 print('Object {} has no features'.format(self.getNum())) 1757 print('Object {} has no features'.format(self.getNum()))
1758 return None 1758 return None
1759 1759
1760 def motDistanceAtInstant(self, obj, instant):
1761 '''Returns distance for computing CLEAR MOT metrics
1762 (returns an actual value, otherwise munkres does not terminate)'''
1763 return Point.distanceNorm2(self.getPositionAtInstant(instant), obj.getPositionAtInstant(instant))
1764
1760 ### 1765 ###
1761 # User Type Classification 1766 # User Type Classification
1762 ### 1767 ###
1763 def classifyUserTypeSpeedMotorized(self, threshold, aggregationFunc = median, nInstantsIgnoredAtEnds = 0): 1768 def classifyUserTypeSpeedMotorized(self, threshold, aggregationFunc = median, nInstantsIgnoredAtEnds = 0):
1764 '''Classifies slow and fast road users 1769 '''Classifies slow and fast road users
1937 1942
1938 Its center is the center of the box (generalize to other shapes?) 1943 Its center is the center of the box (generalize to other shapes?)
1939 (computed after projecting if homography available) 1944 (computed after projecting if homography available)
1940 ''' 1945 '''
1941 1946
1942 def __init__(self, num = None, timeInterval = None, topLeftPositions = None, bottomRightPositions = None, userType = userType2Num['unknown']): 1947 def __init__(self, topLeftPositions, bottomRightPositions, num = None, timeInterval = None, userType = userType2Num['unknown']):
1943 super(BBMovingObject, self).__init__(num, timeInterval, userType = userType) 1948 super(BBMovingObject, self).__init__(num, timeInterval, userType = userType)
1944 self.topLeftPositions = topLeftPositions.getPositions() 1949 self.topLeftPositions = topLeftPositions.getPositions()
1945 self.bottomRightPositions = bottomRightPositions.getPositions() 1950 self.bottomRightPositions = bottomRightPositions.getPositions()
1946 1951
1947 def computeCentroidTrajectory(self, homography = None): 1952 def computeCentroidTrajectory(self, homography = None):
1948 self.positions = self.topLeftPositions.add(self.bottomRightPositions).__mul__(0.5) 1953 self.positions = self.topLeftPositions.add(self.bottomRightPositions).__mul__(0.5)
1949 if homography is not None: 1954 if homography is not None:
1950 self.positions = self.positions.homographyProject(homography) 1955 self.positions = self.positions.homographyProject(homography)
1951
1952 def matches(self, obj, instant, matchingDistance):
1953 '''Indicates if the annotation matches obj (MovingObject)
1954 with threshold matchingDistance
1955 Returns distance if below matchingDistance, matchingDistance+1 otherwise
1956 (returns an actual value, otherwise munkres does not terminate)'''
1957 d = Point.distanceNorm2(self.getPositionAtInstant(instant), obj.getPositionAtInstant(instant))
1958 if d < matchingDistance:
1959 return d
1960 else:
1961 return matchingDistance + 1
1962 1956
1963 def matchObjects(obj1, obj2, instant, matchingDistance): 1957 def matchObjects(obj1, obj2, instant, matchingDistance):
1964 '''Indicates if obj matches obj2 with threshold matchingDistance 1958 '''Indicates if obj matches obj2 with threshold matchingDistance
1965 Returns distance if below matchingDistance, matchingDistance+1 otherwise 1959 Returns distance if below matchingDistance, matchingDistance+1 otherwise
1966 (returns an actual value, otherwise munkres does not terminate)''' 1960 (returns an actual value, otherwise munkres does not terminate)'''
2018 previousMatches = matches.copy() 2012 previousMatches = matches.copy()
2019 # go through currently matched GT-TO and check if they are still matched withing matchingDistance 2013 # go through currently matched GT-TO and check if they are still matched withing matchingDistance
2020 toDelete = [] 2014 toDelete = []
2021 for a in matches: 2015 for a in matches:
2022 if a.existsAtInstant(t) and matches[a].existsAtInstant(t): 2016 if a.existsAtInstant(t) and matches[a].existsAtInstant(t):
2023 d = a.matches(matches[a], t, matchingDistance) 2017 d = a.motDistanceAtInstant(matches[a], t)
2024 if d < matchingDistance: 2018 if d < matchingDistance:
2025 dist += d 2019 dist += d
2026 else: 2020 else:
2027 toDelete.append(a) 2021 toDelete.append(a)
2028 else: 2022 else: