Mercurial Hosting > traffic-intelligence
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?