Mercurial Hosting > traffic-intelligence
changeset 1251:2b1c8fe8f7e4
added function for KITTI 2D format (just a simple csv-like format with xy coordinates)
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Fri, 15 Mar 2024 17:05:54 -0400 |
parents | 77fbd0e2ba7d |
children | fe35473acee3 |
files | trafficintelligence/storage.py |
diffstat | 1 files changed, 27 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/trafficintelligence/storage.py Thu Feb 15 22:04:35 2024 -0500 +++ b/trafficintelligence/storage.py Fri Mar 15 17:05:54 2024 -0400 @@ -1347,8 +1347,8 @@ if len(tmp) != interval.length(): #interpolate print(objNum, len(tmp), interval.length()) instants = set(interval).difference(tmp.frame) - tmp = concat([tmp, DataFrame([[t, objNum, userType]+[NaN]*(len(header)-3) for t in instants], columns = header)], ignore_index=True).sort_values('frame') - tmp.interpolate(inplace=True) + missing = concat([tmp[header[10:]], DataFrame([[t]+[NaN]*(len(header)-10) for t in instants], columns = ['frame']+header[10:])], ignore_index=True).sort_values('frame') + tmp = missing.interpolate() featureTrajectories = [moving.Trajectory() for i in range(4)] for i, r in tmp.iterrows(): _, Tr_imu_to_world = oxts[r.frame] @@ -1439,6 +1439,31 @@ return objects +def loadTrajectoriesFromKITTI2D(filename): + '''Loads x,y coordinate series + e.g. obtained by projecting from image to ground world plane using a homography + Format: frame_id,track_id,usertype,x,y,score ''' + + header = ['frame','trackingid','usertype','x','y','score'] + data = read_csv(filename, delimiter=' ', names = header) + objects = [] + for objNum in data.trackingid.unique(): + tmp = data[data.trackingid == objNum].sort_values('frame') + interval = moving.TimeInterval(int(tmp.frame.min()), int(tmp.frame.max())) + userType = tmp.iloc[0].usertype + if len(tmp) != interval.length(): #interpolate + print(objNum, len(tmp), interval.length()) + instants = set(interval).difference(tmp.frame) + missing = concat([tmp[['frame', 'x', 'y']], DataFrame([[t, NaN, NaN] for t in instants], columns = ['frame', 'x', 'y'])], ignore_index=True).sort_values('frame') + tmp = missing.interpolate() + #print(tmp.info()) + if interval.length()>1: + t = moving.Trajectory([tmp.x.to_list(), tmp.y.to_list()]) + newObj = moving.MovingObject(num = objNum, timeInterval = interval, positions = t, velocities = t.differentiate(True), userType = userType) + objects.append(newObj) + + return objects + def convertNgsimFile(inputfile, outputfile, append = False, nObjects = -1, sequenceNum = 0): '''Reads data from the trajectory data provided by NGSIM project and converts to our current format.'''