Mercurial Hosting > traffic-intelligence
diff 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 |
line wrap: on
line diff
--- a/trafficintelligence/storage.py Thu May 04 22:30:32 2023 -0400 +++ b/trafficintelligence/storage.py Fri May 05 22:52:25 2023 -0400 @@ -7,8 +7,8 @@ from copy import copy import sqlite3, logging -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 -from pandas import read_csv, merge +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 +from pandas import read_csv, merge, concat, DataFrame from trafficintelligence import utils, moving, events, indicators, cvutils from trafficintelligence.base import VideoFilenameAddable @@ -1336,6 +1336,13 @@ for objNum in data.trackingid.unique(): tmp = data[data.trackingid == objNum].sort_values('frame') t = moving.Trajectory()#([[float(numbers[6])],[float(numbers[7])]]) + 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) + 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) featureTrajectories = [moving.Trajectory() for i in range(4)] for i, r in tmp.iterrows(): _, Tr_imu_to_world = oxts[r.frame] @@ -1381,10 +1388,10 @@ for i in range(4): featureTrajectories[i].addPositionXY(xCoords[i], yCoords[i]) # check https://docs.opencv.org/3.4/d9/d0c/group__calib3d.html#ga1019495a2c8d1743ed5cc23fa0daff8c - - 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)]) - objects.append(newObj) - featureNum += 4 + if interval.length()>1: + 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)]) + objects.append(newObj) + featureNum += 4 # ego vehicle t = moving.Trajectory() @@ -1420,9 +1427,8 @@ t.addPositionXY(xCoords.mean(), yCoords.mean()) for i in range(4): featureTrajectories[i].addPositionXY(xCoords[i], yCoords[i]) - # check https://docs.opencv.org/3.4/d9/d0c/group__calib3d.html#ga1019495a2c8d1743ed5cc23fa0daff8c - - 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)]) + # check https://docs.opencv.org/3.4/d9/d0c/group__calib3d.html#ga1019495a2c8d1743ed5cc23fa0daff8c + 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)]) objects.append(newObj) return objects