annotate python/metadata.py @ 422:67c7ff5d6b26

added new fields for units, getting filenames
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 21 Oct 2013 18:16:33 -0400
parents 4fce27946c60
children e74a09bddb6d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
1 # from moving import Point
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
2
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
3 from datetime import datetime
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
4 from os import path
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
5
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
6 from sqlalchemy import Column, Integer, Float, DateTime, String, ForeignKey
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
7 from sqlalchemy.orm import relationship, backref
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
8 from sqlalchemy.ext.declarative import declarative_base
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
9
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
10 from utils import datetimeFormat
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
11
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
12 Base = declarative_base()
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
13
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
14 class Site(Base):
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
15 __tablename__ = 'sites'
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
16 id = Column(Integer, primary_key=True)
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
17 name = Column(String) # same as path, relative to the database position
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
18 description = Column(String) # longer names, eg intersection of road1 and road2
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
19 xcoordinate = Column(Float) # ideally moving.Point, but needs to be
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
20 ycoordinate = Column(Float)
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
21
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
22 def __init__(self, name, description = "", xcoordinate = None, ycoordinate = None):
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
23 self.name = name
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
24 self.description = description
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
25 self.xcoordinate = xcoordinate
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
26 self.ycoordinate = ycoordinate
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
27
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
28 def getFilename(self):
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
29 return self.name
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
30
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
31 # def __repr__(self):
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
32 # return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
33
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
34 class EnvironementalFactors(Base):
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
35 '''Represents any environmental factors that may affect the results, in particular
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
36 * changing weather conditions
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
37 * changing road configuration, geometry, signalization, etc.
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
38 ex: sunny, rainy, before counter-measure, after counter-measure'''
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
39 __tablename__ = 'environmental_factors'
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
40 id = Column(Integer, primary_key=True)
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
41 startTime = Column(DateTime)
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
42 endTime = Column(DateTime)
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
43 description = Column(String) # eg sunny, before, after
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
44 siteId = Column(Integer, ForeignKey('sites.id'))
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
45
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
46 site = relationship("Site", backref=backref('environmental_factors', order_by = id))
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
47
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
48 def __init__(self, startTime, endTime, description, site):
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
49 'startTime is passed as string in utils.datetimeFormat, eg 2011-06-22 10:00:39'
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
50 self.startTime = datetime.strptime(startTime, datetimeFormat)
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
51 self.endTime = datetime.strptime(endTime, datetimeFormat)
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
52 self.description = description
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
53 self.site = site
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
54
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
55 class CameraView(Base):
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
56 __tablename__ = 'camera_views'
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
57 id = Column(Integer, primary_key=True)
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
58 frameRate = Column(Float)
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
59 homographyFilename = Column(String) # path to homograph filename, relative to the site name
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
60 cameraCalibrationFilename = Column(String) # path to full camera calibration, relative to the site name
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
61 siteId = Column(Integer, ForeignKey('sites.id'))
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
62 homographyDistanceUnit = Column(String, default = 'm')
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
63 # TODO default config filename
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
64
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
65 site = relationship("Site", backref=backref('camera_views', order_by = id))
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
66
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
67 def __init__(self, frameRate, homographyFilename, cameraCalibrationFilename, site):
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
68 self.frameRate = frameRate
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
69 self.homographyFilename = homographyFilename
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
70 self.site = site
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
71
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
72 def getHomographyFilename(self, relativeToSiteFilename = True):
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
73 if relativeToSiteFilename:
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
74 return self.site.getFilename()+path.sep+self.homographyFilename
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
75 else:
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
76 return self.homographyFilename
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
77
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
78 class VideoSequence(Base):
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
79 __tablename__ = 'video_sequences'
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
80 id = Column(Integer, primary_key=True)
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
81 name = Column(String) # path relative to the the site name
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
82 startTime = Column(DateTime)
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
83 duration = Column(Float) # video sequence duration
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
84 durationUnit = Column(String, default = 's')
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
85 siteId = Column(Integer, ForeignKey('sites.id'))
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
86 cameraViewId = Column(Integer, ForeignKey('camera_views.id'))
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
87
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
88 site = relationship("Site", backref=backref('video_sequences', order_by = id))
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
89 cameraView = relationship("CameraView", backref=backref('video_sequences', order_by = id))
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
90
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
91 def __init__(self, name, startTime, duration, site, cameraView):
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
92 'startTime is passed as string in utils.datetimeFormat, eg 2011-06-22 10:00:39'
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
93 self.name = name
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
94 self.startTime = datetime.strptime(startTime, datetimeFormat)
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
95 self.duration = duration
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
96 self.site = site
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
97 self.cameraView = cameraView
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
98
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
99 def getVideoSequenceFilename(self, relativeToSiteFilename = True):
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
100 if relativeToSiteFilename:
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
101 return self.site.getFilename()+path.sep+self.name
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
102 else:
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
103 return self.name
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
104
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
105 # add class for Analysis: foreign key VideoSequenceId, dataFilename, configFilename (get the one from camera view by default), mask? (no, can be referenced in the tracking cfg file)
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
106
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
107 # class SiteDescription(Base): # list of lines and polygons describing the site, eg for sidewalks, center lines
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
108
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
109 # class Analysis(Base): # parameters necessary for processing the data: free form
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
110 # eg bounding box depends on camera view, tracking configuration depends on camera view
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
111
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
112 def createDatabases(engine):
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
113 Base.metadata.create_all(engine)