changeset 428:70accfa6692f

merged
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 05 Nov 2013 23:42:28 -0500
parents 1e3c7fe21a38 (current diff) 334e1151828b (diff)
children 2be846d36dec
files
diffstat 1 files changed, 42 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/python/metadata.py	Tue Nov 05 23:37:02 2013 -0500
+++ b/python/metadata.py	Tue Nov 05 23:42:28 2013 -0500
@@ -3,8 +3,8 @@
 from datetime import datetime
 from os import path
 
-from sqlalchemy import Column, Integer, Float, DateTime, String, ForeignKey
-from sqlalchemy.orm import relationship, backref
+from sqlalchemy import create_engine, Column, Integer, Float, DateTime, String, ForeignKey
+from sqlalchemy.orm import relationship, backref, sessionmaker
 from sqlalchemy.ext.declarative import declarative_base
 
 from utils import datetimeFormat
@@ -59,15 +59,16 @@
     homographyFilename = Column(String) # path to homograph filename, relative to the site name
     cameraCalibrationFilename = Column(String) # path to full camera calibration, relative to the site name
     siteId = Column(Integer, ForeignKey('sites.id'))
-    homographyDistanceUnit = Column(String, default = 'm')
-    # TODO default config filename
+    homographyDistanceUnit = Column(String, default = 'm') # make sure it is default in the database
+    configurationFilename = Column(String) # path to configuration .cfg file, relative to site name
 
     site = relationship("Site", backref=backref('camera_views', order_by = id))
 
-    def __init__(self, frameRate, homographyFilename, cameraCalibrationFilename, site):
+    def __init__(self, frameRate, homographyFilename, cameraCalibrationFilename, site, configurationFilename):
         self.frameRate = frameRate
         self.homographyFilename = homographyFilename
         self.site = site
+        self.configurationFilename = configurationFilename
 
     def getHomographyFilename(self, relativeToSiteFilename = True):
         if relativeToSiteFilename:
@@ -84,17 +85,19 @@
     durationUnit = Column(String, default = 's')
     siteId = Column(Integer, ForeignKey('sites.id'))
     cameraViewId = Column(Integer, ForeignKey('camera_views.id'))
+    configurationFilename = Column(String)
 
     site = relationship("Site", backref=backref('video_sequences', order_by = id))
     cameraView = relationship("CameraView", backref=backref('video_sequences', order_by = id))
 
-    def __init__(self, name, startTime, duration, site, cameraView):
+    def __init__(self, name, startTime, duration, site, cameraView, configurationFilename = None):
         'startTime is passed as string in utils.datetimeFormat, eg 2011-06-22 10:00:39'
         self.name = name
         self.startTime = datetime.strptime(startTime, datetimeFormat)
         self.duration = duration
         self.site = site
         self.cameraView = cameraView
+        self.configurationFilename = configurationFilename
 
     def getVideoSequenceFilename(self, relativeToSiteFilename = True):
         if relativeToSiteFilename:
@@ -102,12 +105,44 @@
         else:
             return self.name
 
+        #def getConfigurationFilename(self):
+        #'returns the local configuration filename, or the one of the camera view otherwise'
+
 # 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)
 
 # class SiteDescription(Base): # list of lines and polygons describing the site, eg for sidewalks, center lines
 
 # class Analysis(Base): # parameters necessary for processing the data: free form
 # eg bounding box depends on camera view, tracking configuration depends on camera view 
+# results: sqlite
 
-def createDatabases(engine):
+def createDatabase(filename):
+    'creates a session to query the filename'
+    engine = create_engine('sqlite:///'+filename)
     Base.metadata.create_all(engine)
+    Session = sessionmaker(bind=engine)
+    return Session()
+
+def connectDatabase(filename):
+    'creates a session to query the filename'
+    engine = create_engine('sqlite:///'+filename)
+    Session = sessionmaker(bind=engine)
+    return Session()
+
+def initializeSites(session, directoryName):
+    '''Initializes default site objects and Camera Views
+    
+    eg somedirectory/montreal/ contains intersection1, intersection2, etc.
+    The site names would be somedirectory/montreal/intersection1, somedirectory/montreal/intersection2, etc.'''
+    from os import listdir, path
+    sites = []
+    cameraViews = []
+    names = listdir(directoryName)
+    for name in names:
+        if path.isdir(directoryName+'/'+name):
+            sites.append(Site(directoryName+'/'+name, None))
+            cameraViews.append(CameraView(-1, None, None, sites[-1], None))
+    session.add_all(sites)
+    session.add_all(cameraViews)
+    session.commit()
+# TODO crawler for video files?