def loadInteractions(filename, nInteractions = -1): 'Loads interactions from the old UBC traffic event format' from events import Interaction from indicators import SeverityIndicator file = storage.openCheck(filename) if (not file): return [] interactions = [] interactionNum = 0 lines = storage.getLines(file) while (lines != []) and ((nInteractions<0) or (interactionNum<nInteractions)): parsedLine = [int(n) for n in lines[0].split(' ')] inter = Interaction(interactionNum, TimeInterval(parsedLine[1],parsedLine[2]), parsedLine[3], parsedLine[4], categoryNum = parsedLine[5]) indicatorFrameNums = [int(n) for n in lines[1].split(' ')] for indicatorNum,line in enumerate(lines[2:]): values = {} for i,v in enumerate([float(n) for n in line.split(' ')]): if not ignoredValue[indicatorNum] or v != ignoredValue[indicatorNum]: values[indicatorFrameNums[i]] = v inter.addIndicator(SeverityIndicator(severityIndicatorNames[indicatorNum], values, None, mostSevereIsMax[indicatorNum])) interactions.append(inter) interactionNum+=1 lines = storage.getLines(file) file.close() return interactions
def loadNewInteractions(videoFilename, interactionType, dirname, extension, indicatorsNames, roaduserNum1, roaduserNum2, selectedIndicators=[]): """ Loads interactions from the POLY traffic event format Args: videoFilename (str): Name of video file, excluding extension and absolute location (i.e., name only). interactionType (: dirname: extension: indicatorsNames: roaduserNum1: roaduserNum2: selectedIndicators: Returns: """ from events import Interaction filename = dirname + videoFilename + extension # filename= dirname + interactionType+ '-' + videoFilename + extension # # case of min distance todo: change the saving format to be matched with # all outputs file = utils.openCheck(filename) if (not file): return [] # interactions = [] interactionNum = 0 data = np.loadtxt(filename) indicatorFrameNums = data[:, 0] inter = Interaction( interactionNum, TimeInterval(indicatorFrameNums[0], indicatorFrameNums[-1]), roaduserNum1, roaduserNum2) inter.addVideoFilename(videoFilename) inter.addInteractionType(interactionType) for key in indicatorsNames.keys(): values = {} for i, t in enumerate(indicatorFrameNums): values[t] = data[i, key] inter.addIndicator(SeverityIndicator(indicatorsNames[key], values)) if selectedIndicators != []: values = {} for i, t in enumerate(indicatorFrameNums): values[t] = [data[i, index] for index in selectedIndicators] inter.addIndicator(SeverityIndicator('selectedIndicators', values)) # interactions.append(inter) file.close() # return interactions return inter
def loadTrajectories(filename, nObjects=-1): '''Loads trajectories''' file = storage.openCheck(filename) if (not file): return [] objects = [] objNum = 0 objectType = getFileType(filename) lines = storage.getLines(file) while (lines != []) and ((nObjects < 0) or (objNum < nObjects)): l = lines[0].split(' ') parsedLine = [int(n) for n in l[:4]] obj = MovingObject(num=objNum, timeInterval=TimeInterval(parsedLine[1], parsedLine[2])) #add = True if len(lines) >= 3: obj.positions = Trajectory.load(lines[1], lines[2]) if len(lines) >= 5: obj.velocities = Trajectory.load(lines[3], lines[4]) if objectType == 'object': obj.userType = parsedLine[3] obj.nObjects = float(l[4]) obj.featureNumbers = [int(n) for n in l[5:]] # load contour data if available if len(lines) >= 6: obj.contourType = utils.line2Floats(lines[6]) obj.contourOrigins = Trajectory.load( lines[7], lines[8]) obj.contourSizes = Trajectory.load(lines[9], lines[10]) elif objectType == 'prototype': obj.userType = parsedLine[3] obj.nMatchings = int(l[4]) if len(lines) != 2: objects.append(obj) objNum += 1 else: print("Error two lines of data for feature %d" % (f.num)) lines = storage.getLines(file) file.close() return objects
def getTimeInterval(self): return TimeInterval(self.firstFrameNum, self.lastFrameNum)
def intersection(self, startTime, endTime): 'returns the moving.TimeInterval intersection with [startTime, endTime]' return TimeInterval.intersection(self.getTimeInterval(), TimeInterval(startTime, endTime))
def getTimeInterval(self): return TimeInterval(self.startTime, self.startTime + self.duration)