comparison trafficintelligence/metadata.py @ 1140:78dddfe7aa0f

added alignments for sites
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 15 Apr 2020 00:18:35 -0400
parents 9cc51a2d3c46
children b3ee75b4978a
comparison
equal deleted inserted replaced
1137:e9c12982ed28 1140:78dddfe7aa0f
9 from sqlalchemy.orm import relationship, backref, sessionmaker 9 from sqlalchemy.orm import relationship, backref, sessionmaker
10 from sqlalchemy.ext.declarative import declarative_base 10 from sqlalchemy.ext.declarative import declarative_base
11 11
12 from trafficintelligence.utils import datetimeFormat, removeExtension, getExtension, TimeConverter 12 from trafficintelligence.utils import datetimeFormat, removeExtension, getExtension, TimeConverter
13 from trafficintelligence.cvutils import computeUndistortMaps, videoFilenameExtensions, infoVideo 13 from trafficintelligence.cvutils import computeUndistortMaps, videoFilenameExtensions, infoVideo
14 from trafficintelligence.moving import TimeInterval 14 from trafficintelligence.moving import TimeInterval, Trajectory
15 15
16 """ 16 """
17 Metadata to describe how video data and configuration files for video analysis are stored 17 Metadata to describe how video data and configuration files for video analysis are stored
18 18
19 Typical example is 19 Typical example is
210 return ProcessParameters(self.getTrackingConfigurationFilename()) 210 return ProcessParameters(self.getTrackingConfigurationFilename())
211 211
212 def getHomographyDistanceUnit(self): 212 def getHomographyDistanceUnit(self):
213 return self.site.worldDistanceUnit 213 return self.site.worldDistanceUnit
214 214
215 # class Alignment(Base): 215 class Alignment(Base):
216 # __tablename__ = 'alignments' 216 __tablename__ = 'alignments'
217 # idx = Column(Integer, primary_key=True) 217 idx = Column(Integer, primary_key=True)
218 # siteIdx = Column(Integer, ForeignKey('sites.idx')) 218 siteIdx = Column(Integer, ForeignKey('sites.idx'))
219 219
220 # cameraView = relationship("Site", backref = backref('alignments')) 220 site = relationship("Site", backref = backref('alignments'))
221 221
222 # def __init__(self, cameraView): 222 def __init__(self, site):
223 # self.cameraView = cameraView 223 self.site = site
224 224
225 # class Point(Base): 225 def getTrajectory(self):
226 # __tablename__ = 'points' 226 t = Trajectory()
227 # alignmentIdx = Column(Integer, ForeignKey('alignments.idx'), primary_key=True) 227 for p in self.point:
228 # index = Column(Integer, primary_key=True) # order of points in this alignment 228 t.addPositionXY(p.x_coordinate, p.y_coordinate)
229 # x = Column(Float) 229 return t
230 # y = Column(Float) 230
231 231 class Point(Base):
232 # alignment = relationship("Alignment", backref = backref('points', order_by = index)) 232 __tablename__ = 'positions'
233 233 trajectory_id = Column(Integer, ForeignKey('alignments.idx'), primary_key=True)
234 # def __init__(self, alignmentIdx, index, x, y): 234 frame_number = Column(Integer, primary_key=True) # order of points in this alignment, as index
235 # self.alignmentIdx = alignmentIdx 235 x_coordinate = Column(Float)
236 # self.index = index 236 y_coordinate = Column(Float)
237 # self.x = x 237
238 # self.y = y 238 alignment = relationship("Alignment", backref = backref('points', order_by = trajectory_id))
239
240 def __init__(self, alignment, index, x, y):
241 self.alignment = alignment
242 self.frame_number = index
243 self.x_coordinate = x
244 self.y_coordinate = y
239 245
240 class VideoSequence(Base): 246 class VideoSequence(Base):
241 __tablename__ = 'video_sequences' 247 __tablename__ = 'video_sequences'
242 idx = Column(Integer, primary_key=True) 248 idx = Column(Integer, primary_key=True)
243 name = Column(String) # path to the video file relative to the the site name 249 name = Column(String) # path to the video file relative to the the site name
423 session.add_all(videoSequences) 429 session.add_all(videoSequences)
424 session.commit() 430 session.commit()
425 431
426 def generateTimeIntervals(videoSequences, maxTimeGap): 432 def generateTimeIntervals(videoSequences, maxTimeGap):
427 '' 433 ''
434
435 def addAlignment(session, site, t):
436 'Adds trajectory (moving.Trajectory) t to metadata of site'
437 al = Alignment(site)
438 session.add(al)
439 session.commit()
440 points = []
441 for i,p in enumerate(t):
442 points.append(Point(al, i, p.x, p.y))
443 session.add_all(points)
444 session.commit()
428 445
429 # management 446 # management
430 # TODO need to be able to copy everything from a site from one sqlite to another, and delete everything attached to a site 447 # TODO need to be able to copy everything from a site from one sqlite to another, and delete everything attached to a site