annotate python/metadata.py @ 825:6e4357e9116d

corrected and changed matrix to individual columns
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 28 Jun 2016 15:55:32 -0400
parents 26daf35180ad
children 14e4ad7c7420
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
821
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
3 from datetime import datetime, timedelta
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
4 from os import path
821
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
5 from math import floor
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
6
821
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
7 from sqlalchemy import orm, create_engine, Column, Integer, Float, DateTime, String, ForeignKey, Boolean, Interval
426
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
8 from sqlalchemy.orm import relationship, backref, sessionmaker
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
9 from sqlalchemy.ext.declarative import declarative_base
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
10
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
11 from utils import datetimeFormat, removeExtension
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
12
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
13 Base = declarative_base()
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
14
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
15 class Site(Base):
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
16 __tablename__ = 'sites'
580
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
17 idx = Column(Integer, primary_key=True)
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
18 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
19 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
20 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
21 ycoordinate = Column(Float)
805
180b6b0231c0 added saving/loading points of interests
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 580
diff changeset
22 mapImageFilename = Column(String) # path to filename, relative to site name, ie sitename/mapImageFilename
180b6b0231c0 added saving/loading points of interests
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 580
diff changeset
23 nUnitsPerPixel = Column(Float) # number of units of distance per pixel in map image
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
24 worldDistanceUnit = Column(String, default = 'm') # make sure it is default in the database
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
25
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
26 def __init__(self, name, description = "", xcoordinate = None, ycoordinate = None, mapImageFilename = None, nUnitsPerPixel = 1., worldDistanceUnit = 'm'):
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
27 self.name = name
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
28 self.description = description
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
29 self.xcoordinate = xcoordinate
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
30 self.ycoordinate = ycoordinate
805
180b6b0231c0 added saving/loading points of interests
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 580
diff changeset
31 self.mapImageFilename = mapImageFilename
180b6b0231c0 added saving/loading points of interests
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 580
diff changeset
32 self.nUnitsPerPixel = nUnitsPerPixel
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
33 self.worldDistanceUnit = worldDistanceUnit
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
34
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
35 def getFilename(self):
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
36 return self.name
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
37
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
38 class EnvironementalFactors(Base):
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
39 '''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
40 * changing weather conditions
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
41 * changing road configuration, geometry, signalization, etc.
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
42 ex: sunny, rainy, before counter-measure, after counter-measure'''
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
43 __tablename__ = 'environmental_factors'
580
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
44 idx = Column(Integer, primary_key=True)
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
45 startTime = Column(DateTime)
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
46 endTime = Column(DateTime)
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
47 description = Column(String) # eg sunny, before, after
580
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
48 siteIdx = Column(Integer, ForeignKey('sites.idx'))
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
49
580
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
50 site = relationship("Site", backref=backref('environmental_factors', order_by = idx))
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
51
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
52 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
53 '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
54 self.startTime = datetime.strptime(startTime, datetimeFormat)
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
55 self.endTime = datetime.strptime(endTime, datetimeFormat)
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
56 self.description = description
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
57 self.site = site
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
58
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
59 class CameraType(Base):
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
60 ''' Represents parameters of the specific camera used.
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
61
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
62 Taken and adapted from tvalib'''
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
63 __tablename__ = 'camera_types'
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
64 idx = Column(Integer, primary_key=True)
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
65 name = Column(String)
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
66 resX = Column(Integer)
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
67 resY = Column(Integer)
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
68 frameRate = Column(Float)
821
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
69 frameRateTimeUnit = Column(String, default = 's')
825
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
70 intrinsicCameraMatrix00 = Column(Float)
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
71 intrinsicCameraMatrix01 = Column(Float)
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
72 intrinsicCameraMatrix02 = Column(Float)
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
73 intrinsicCameraMatrix10 = Column(Float)
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
74 intrinsicCameraMatrix11 = Column(Float)
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
75 intrinsicCameraMatrix12 = Column(Float)
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
76 intrinsicCameraMatrix20 = Column(Float)
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
77 intrinsicCameraMatrix21 = Column(Float)
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
78 intrinsicCameraMatrix22 = Column(Float)
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
79 distortionCoefficients0 = Column(Float)
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
80 distortionCoefficients1 = Column(Float)
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
81 distortionCoefficients2 = Column(Float)
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
82 distortionCoefficients3 = Column(Float)
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
83 distortionCoefficients4 = Column(Float)
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
84 undistortedImageMultiplication = Column(Float)
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
85
825
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
86 def __init__(self, name, resX, resY, frameRate, frameRateTimeUnit = 's', trackingConfigurationFilename = None, intrinsicCameraMatrix = None, distortionCoefficients = None, undistortedImageMultiplication = None):
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
87 self.name = name
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
88 self.resX = resX
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
89 self.resY = resY
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
90 self.frameRate = frameRate
821
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
91 self.frameRateTimeUnit = frameRateTimeUnit
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
92
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
93 if trackingConfigurationFilename is not None:
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
94 from storage import ProcessParameters
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
95 params = ProcessParameters(trackingConfigurationFilename)
825
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
96 self.intrinsicCameraMatrix = params.intrinsicCameraMatrix
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
97 self.distortionCoefficients = params.distortionCoefficients
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
98 self.undistortedImageMultiplication = params.undistortedImageMultiplication
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
99 else:
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
100 self.intrinsicCameraMatrix = intrinsicCameraMatrix
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
101 self.distortionCoefficients = distortionCoefficients
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
102 self.undistortedImageMultiplication = undistortedImageMultiplication
825
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
103
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
104 if self.intrinsicCameraMatrix is not None and self.intrinsicCameraMatrix.size == 9:
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
105 self.intrinsicCameraMatrix00 = self.intrinsicCameraMatrix[0,0]
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
106 self.intrinsicCameraMatrix01 = self.intrinsicCameraMatrix[0,1]
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
107 self.intrinsicCameraMatrix02 = self.intrinsicCameraMatrix[0,2]
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
108 self.intrinsicCameraMatrix10 = self.intrinsicCameraMatrix[1,0]
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
109 self.intrinsicCameraMatrix11 = self.intrinsicCameraMatrix[1,1]
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
110 self.intrinsicCameraMatrix12 = self.intrinsicCameraMatrix[1,2]
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
111 self.intrinsicCameraMatrix20 = self.intrinsicCameraMatrix[2,0]
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
112 self.intrinsicCameraMatrix21 = self.intrinsicCameraMatrix[2,1]
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
113 self.intrinsicCameraMatrix22 = self.intrinsicCameraMatrix[2,2]
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
114 if self.distortionCoefficients is not None and len(self.distortionCoefficients) == 5:
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
115 self.distortionCoefficients0 = self.distortionCoefficients[0]
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
116 self.distortionCoefficients1 = self.distortionCoefficients[1]
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
117 self.distortionCoefficients2 = self.distortionCoefficients[2]
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
118 self.distortionCoefficients3 = self.distortionCoefficients[3]
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
119 self.distortionCoefficients4 = self.distortionCoefficients[4]
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
120
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
121 @orm.reconstructor
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
122 def initOnLoad(self):
825
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
123 from numpy import zeros
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
124 if self.intrinsicCameraMatrix00 is not None:
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
125 self.intrinsicCameraMatrix = zeros((3,3))
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
126 self.intrinsicCameraMatrix[0,0] = self.intrinsicCameraMatrix00
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
127 self.intrinsicCameraMatrix[0,1] = self.intrinsicCameraMatrix01
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
128 self.intrinsicCameraMatrix[0,2] = self.intrinsicCameraMatrix02
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
129 self.intrinsicCameraMatrix[1,0] = self.intrinsicCameraMatrix10
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
130 self.intrinsicCameraMatrix[1,1] = self.intrinsicCameraMatrix11
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
131 self.intrinsicCameraMatrix[1,2] = self.intrinsicCameraMatrix12
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
132 self.intrinsicCameraMatrix[2,0] = self.intrinsicCameraMatrix20
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
133 self.intrinsicCameraMatrix[2,1] = self.intrinsicCameraMatrix21
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
134 self.intrinsicCameraMatrix[2,2] = self.intrinsicCameraMatrix22
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
135 else:
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
136 self.intrinsicCameraMatrix = None
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
137 if self.distortionCoefficients0 is not None:
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
138 self.distortionCoefficients = [0]*5
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
139 self.distortionCoefficients[0] = self.distortionCoefficients0
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
140 self.distortionCoefficients[1] = self.distortionCoefficients1
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
141 self.distortionCoefficients[2] = self.distortionCoefficients2
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
142 self.distortionCoefficients[3] = self.distortionCoefficients3
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
143 self.distortionCoefficients[4] = self.distortionCoefficients4
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
144 else:
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
145 self.distortionCoefficients = None
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
146
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
147 class CameraView(Base):
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
148 __tablename__ = 'camera_views'
580
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
149 idx = Column(Integer, primary_key=True)
821
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
150 description = Column(String)
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
151 homographyFilename = Column(String) # path to homograph filename, relative to the site name
580
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
152 siteIdx = Column(Integer, ForeignKey('sites.idx'))
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
153 cameraTypeIdx = Column(Integer, ForeignKey('camera_types.idx'))
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
154 trackingConfigurationFilename = Column(String) # path to configuration .cfg file, relative to site name
825
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
155 maskFilename = Column(String) # path to mask file, relative to site name
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
156
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
157 site = relationship("Site", backref=backref('sites', order_by = idx))
821
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
158 cameraType = relationship('CameraType', backref=backref('camera_views', order_by = idx))
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
159
825
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
160 def __init__(self, description, homographyFilename, site, cameraType, trackingConfigurationFilename, maskFilename):
821
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
161 self.description = description
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
162 self.homographyFilename = homographyFilename
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
163 self.site = site
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
164 self.cameraType = cameraType
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
165 self.trackingConfigurationFilename = trackingConfigurationFilename
825
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
166 self.maskFilename = maskFilename
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
167
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
168 def getHomographyFilename(self, relativeToSiteFilename = True):
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
169 if relativeToSiteFilename:
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
170 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
171 else:
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
172 return self.homographyFilename
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
173
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
174 def getTrackingConfigurationFilename(self, relativeToSiteFilename = True):
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
175 if relativeToSiteFilename:
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
176 return self.site.getFilename()+path.sep+self.trackingConfigurationFilename
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
177 else:
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
178 return self.trackingConfigurationFilename
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
179
825
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
180 def getMaskFilename(self, relativeToSiteFilename = True):
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
181 if relativeToSiteFilename:
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
182 return self.site.getFilename()+path.sep+self.maskFilename
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
183 else:
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
184 return self.maskFilename
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
185
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
186 def getTrackingParameters(self):
825
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
187 return ProcessParameters(self.getTrackingConfigurationFilename())
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
188
825
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
189 def getHomographyDistanceUnit(self):
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
190 return self.site.worldDistanceUnit
6e4357e9116d corrected and changed matrix to individual columns
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 821
diff changeset
191
580
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
192 class Alignment(Base):
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
193 __tablename__ = 'alignments'
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
194 idx = Column(Integer, primary_key=True)
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
195 cameraViewIdx = Column(Integer, ForeignKey('camera_views.idx'))
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
196
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
197 cameraView = relationship("CameraView", backref=backref('alignments', order_by = idx))
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
198
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
199 def __init__(self, cameraView):
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
200 self.cameraView = cameraView
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
201
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
202 class Point(Base):
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
203 __tablename__ = 'points'
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
204 alignmentIdx = Column(Integer, ForeignKey('alignments.idx'), primary_key=True)
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
205 index = Column(Integer, primary_key=True) # order of points in this alignment
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
206 x = Column(Float)
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
207 y = Column(Float)
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
208
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
209 alignment = relationship("Alignment", backref=backref('points', order_by = index))
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
210
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
211 def __init__(self, alignmentIdx, index, x, y):
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
212 self.alignmentIdx = alignmentIdx
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
213 self.index = index
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
214 self.x = x
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
215 self.y = y
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
216
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
217 class VideoSequence(Base):
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
218 __tablename__ = 'video_sequences'
580
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
219 idx = Column(Integer, primary_key=True)
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
220 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
221 startTime = Column(DateTime)
821
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
222 duration = Column(Interval) # video sequence duration
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
223 databaseFilename = Column(String) # path relative to the the site name
580
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
224 siteIdx = Column(Integer, ForeignKey('sites.idx'))
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
225 cameraViewIdx = Column(Integer, ForeignKey('camera_views.idx'))
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
226
580
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
227 site = relationship("Site", backref=backref('video_sequences', order_by = idx))
1262faae12e7 alignments may be stored in metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 491
diff changeset
228 cameraView = relationship("CameraView", backref=backref('video_sequences', order_by = idx))
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
229
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
230 def __init__(self, name, startTime, duration, site, cameraView, databaseFilename = None):
821
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
231 '''startTime is passed as string in utils.datetimeFormat, eg 2011-06-22 10:00:39
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
232 duration is a timedelta object'''
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
233 self.name = name
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
234 self.startTime = datetime.strptime(startTime, datetimeFormat)
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
235 self.duration = duration
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
236 self.site = site
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
237 self.cameraView = cameraView
819
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
238 if databaseFilename is None and len(self.name) > 0:
fc8b3ce629d1 important modifications to metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 805
diff changeset
239 self.databaseFilename = removeExtension(self.name)+'.sqlite'
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
240
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
241 def getVideoSequenceFilename(self, relativeToSiteFilename = True):
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
242 if relativeToSiteFilename:
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
243 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
244 else:
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
245 return self.name
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
246
821
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
247 def containsInstant(self, instant):
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
248 'instant is a datetime'
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
249 return self.startTime <= instant and self.startTime+self.duration
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
250
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
251 def getFrameNum(self, instant):
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
252 'Warning, there is no check of correct time units'
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
253 if self.containsInstant(instant):
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
254 return int(floor((instant-self.startTime).seconds*self.cameraView.cameraType.frameRate))
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
255 else:
26daf35180ad finished modification and demo script to replay synchronized video (with same frame rate)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 819
diff changeset
256 return None
424
e74a09bddb6d new fields
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 422
diff changeset
257
422
67c7ff5d6b26 added new fields for units, getting filenames
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 421
diff changeset
258 # 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
259
420
def795d1120f first work on video metadata
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
260 # 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
261
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
262 # 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
263 # eg bounding box depends on camera view, tracking configuration depends on camera view
424
e74a09bddb6d new fields
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 422
diff changeset
264 # results: sqlite
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
265
426
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
266 def createDatabase(filename):
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
267 'creates a session to query the filename'
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
268 engine = create_engine('sqlite:///'+filename)
421
4fce27946c60 first example of video metadata using sqlalchemy
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 420
diff changeset
269 Base.metadata.create_all(engine)
426
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
270 Session = sessionmaker(bind=engine)
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
271 return Session()
425
a31dde19caa8 connect function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 424
diff changeset
272
426
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
273 def connectDatabase(filename):
425
a31dde19caa8 connect function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 424
diff changeset
274 'creates a session to query the filename'
a31dde19caa8 connect function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 424
diff changeset
275 engine = create_engine('sqlite:///'+filename)
a31dde19caa8 connect function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 424
diff changeset
276 Session = sessionmaker(bind=engine)
a31dde19caa8 connect function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 424
diff changeset
277 return Session()
426
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
278
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
279 def initializeSites(session, directoryName):
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
280 '''Initializes default site objects and Camera Views
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
281
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
282 eg somedirectory/montreal/ contains intersection1, intersection2, etc.
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
283 The site names would be somedirectory/montreal/intersection1, somedirectory/montreal/intersection2, etc.'''
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
284 from os import listdir, path
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
285 sites = []
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
286 cameraViews = []
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
287 names = listdir(directoryName)
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
288 for name in names:
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
289 if path.isdir(directoryName+'/'+name):
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
290 sites.append(Site(directoryName+'/'+name, None))
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
291 cameraViews.append(CameraView(-1, None, None, sites[-1], None))
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
292 session.add_all(sites)
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
293 session.add_all(cameraViews)
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
294 session.commit()
334e1151828b corrected creation and connection to database + helper function to generate sites and camera views
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 425
diff changeset
295 # TODO crawler for video files?