comparison trafficintelligence/storage.py @ 1215:1b472cddf9b1

updated reading by interpolating missing frames
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 05 May 2023 22:52:25 -0400
parents 3f2214125164
children 8356e15fd691
comparison
equal deleted inserted replaced
1214:01c24c1cdb70 1215:1b472cddf9b1
5 from pathlib import Path 5 from pathlib import Path
6 import shutil 6 import shutil
7 from copy import copy 7 from copy import copy
8 import sqlite3, logging 8 import sqlite3, logging
9 9
10 from numpy import log, min as npmin, max as npmax, round as npround, array, sum as npsum, loadtxt, floor as npfloor, ceil as npceil, linalg, int32, int64, reshape, dot, vstack, transpose, ones, zeros_like, pi 10 from numpy import log, min as npmin, max as npmax, round as npround, array, sum as npsum, loadtxt, floor as npfloor, ceil as npceil, linalg, int32, int64, reshape, dot, vstack, transpose, ones, zeros_like, pi, NaN
11 from pandas import read_csv, merge 11 from pandas import read_csv, merge, concat, DataFrame
12 12
13 from trafficintelligence import utils, moving, events, indicators, cvutils 13 from trafficintelligence import utils, moving, events, indicators, cvutils
14 from trafficintelligence.base import VideoFilenameAddable 14 from trafficintelligence.base import VideoFilenameAddable
15 15
16 16
1334 objects = [] 1334 objects = []
1335 featureNum = 0 1335 featureNum = 0
1336 for objNum in data.trackingid.unique(): 1336 for objNum in data.trackingid.unique():
1337 tmp = data[data.trackingid == objNum].sort_values('frame') 1337 tmp = data[data.trackingid == objNum].sort_values('frame')
1338 t = moving.Trajectory()#([[float(numbers[6])],[float(numbers[7])]]) 1338 t = moving.Trajectory()#([[float(numbers[6])],[float(numbers[7])]])
1339 interval = moving.TimeInterval(int(tmp.frame.min()), int(tmp.frame.max()))
1340 userType = tmp.iloc[0].usertype
1341 if len(tmp) != interval.length(): #interpolate
1342 print(objNum, len(tmp), interval.length())
1343 instants = set(interval).difference(tmp.frame)
1344 tmp = concat([tmp, DataFrame([[t, objNum, userType]+[NaN]*(len(header)-3) for t in instants], columns = header)], ignore_index=True).sort_values('frame')
1345 tmp.interpolate(inplace=True)
1339 featureTrajectories = [moving.Trajectory() for i in range(4)] 1346 featureTrajectories = [moving.Trajectory() for i in range(4)]
1340 for i, r in tmp.iterrows(): 1347 for i, r in tmp.iterrows():
1341 _, Tr_imu_to_world = oxts[r.frame] 1348 _, Tr_imu_to_world = oxts[r.frame]
1342 # transfer_matrix = {'P2': reshape(kittiCalibration['P2'], (3, 4)), 1349 # transfer_matrix = {'P2': reshape(kittiCalibration['P2'], (3, 4)),
1343 # 'R_rect': kittiCalibration['R_rect'], 1350 # 'R_rect': kittiCalibration['R_rect'],
1379 yCoords = worldCorners[:4,1] 1386 yCoords = worldCorners[:4,1]
1380 t.addPositionXY(xCoords.mean(), yCoords.mean()) 1387 t.addPositionXY(xCoords.mean(), yCoords.mean())
1381 for i in range(4): 1388 for i in range(4):
1382 featureTrajectories[i].addPositionXY(xCoords[i], yCoords[i]) 1389 featureTrajectories[i].addPositionXY(xCoords[i], yCoords[i])
1383 # check https://docs.opencv.org/3.4/d9/d0c/group__calib3d.html#ga1019495a2c8d1743ed5cc23fa0daff8c 1390 # check https://docs.opencv.org/3.4/d9/d0c/group__calib3d.html#ga1019495a2c8d1743ed5cc23fa0daff8c
1384 1391 if interval.length()>1:
1385 newObj = moving.MovingObject(num = objNum, timeInterval = moving.TimeInterval(int(tmp.frame.min()), int(tmp.frame.max())), positions = t, velocities = t.differentiate(True), userType = tmp.iloc[0].usertype, features = [moving.MovingObject(num = featureNum+i, timeInterval = moving.TimeInterval(int(tmp.frame.min()), int(tmp.frame.max())), positions = featureTrajectories[i], velocities = featureTrajectories[i].differentiate(True)) for i in range(4)]) 1392 newObj = moving.MovingObject(num = objNum, timeInterval = interval, positions = t, velocities = t.differentiate(True), userType = userType, features = [moving.MovingObject(num = featureNum+i, timeInterval = copy(interval), positions = featureTrajectories[i], velocities = featureTrajectories[i].differentiate(True)) for i in range(4)])
1386 objects.append(newObj) 1393 objects.append(newObj)
1387 featureNum += 4 1394 featureNum += 4
1388 1395
1389 # ego vehicle 1396 # ego vehicle
1390 t = moving.Trajectory() 1397 t = moving.Trajectory()
1391 featureTrajectories = [moving.Trajectory() for i in range(4)] 1398 featureTrajectories = [moving.Trajectory() for i in range(4)]
1392 interval = moving.TimeInterval(0, len(oxts)-1)#int(data.frame.min()), int(data.frame.max())) 1399 interval = moving.TimeInterval(0, len(oxts)-1)#int(data.frame.min()), int(data.frame.max()))
1418 xCoords = worldCorners[:4,0] 1425 xCoords = worldCorners[:4,0]
1419 yCoords = worldCorners[:4,1] 1426 yCoords = worldCorners[:4,1]
1420 t.addPositionXY(xCoords.mean(), yCoords.mean()) 1427 t.addPositionXY(xCoords.mean(), yCoords.mean())
1421 for i in range(4): 1428 for i in range(4):
1422 featureTrajectories[i].addPositionXY(xCoords[i], yCoords[i]) 1429 featureTrajectories[i].addPositionXY(xCoords[i], yCoords[i])
1423 # check https://docs.opencv.org/3.4/d9/d0c/group__calib3d.html#ga1019495a2c8d1743ed5cc23fa0daff8c 1430 # check https://docs.opencv.org/3.4/d9/d0c/group__calib3d.html#ga1019495a2c8d1743ed5cc23fa0daff8c
1424 1431 newObj = moving.MovingObject(num = objNum+1, timeInterval = interval, positions = t, velocities = t.differentiate(True), userType = 'Car', features = [moving.MovingObject(num = featureNum+i, timeInterval = copy(interval), positions = featureTrajectories[i], velocities = featureTrajectories[i].differentiate(True)) for i in range(4)])
1425 newObj = moving.MovingObject(num = objNum+1, timeInterval = interval, positions = t, velocities = t.differentiate(True), userType = 'Car', features = [moving.MovingObject(num = featureNum+i, timeInterval = interval, positions = featureTrajectories[i], velocities = featureTrajectories[i].differentiate(True)) for i in range(4)])
1426 objects.append(newObj) 1432 objects.append(newObj)
1427 1433
1428 return objects 1434 return objects
1429 1435
1430 def convertNgsimFile(inputfile, outputfile, append = False, nObjects = -1, sequenceNum = 0): 1436 def convertNgsimFile(inputfile, outputfile, append = False, nObjects = -1, sequenceNum = 0):