Mercurial Hosting > traffic-intelligence
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): |