Mercurial Hosting > traffic-intelligence
view python/metadata.py @ 421:4fce27946c60
first example of video metadata using sqlalchemy
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 09 Oct 2013 23:25:51 -0400 |
parents | def795d1120f |
children | 67c7ff5d6b26 |
line wrap: on
line source
# from moving import Point from datetime import datetime from sqlalchemy import Column, Integer, Float, DateTime, String, ForeignKey from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.declarative import declarative_base from utils import datetimeFormat Base = declarative_base() class Site(Base): __tablename__ = 'sites' id = Column(Integer, primary_key=True) name = Column(String) # same as path, relative to the database position description = Column(String) # longer names, eg intersection of road1 and road2 xcoordinate = Column(Float) # ideally moving.Point, but needs to be ycoordinate = Column(Float) def __init__(self, name, description = "", xcoordinate = None, ycoordinate = None): self.name = name self.description = description self.xcoordinate = xcoordinate self.ycoordinate = ycoordinate # def __repr__(self): # return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password) class EnvironementalFactors(Base): '''Represents any environmental factors that may affect the results, in particular * changing weather conditions * changing road configuration, geometry, signalization, etc. ex: sunny, rainy, before counter-measure, after counter-measure''' __tablename__ = 'environmental_factors' id = Column(Integer, primary_key=True) startTime = Column(DateTime) endTime = Column(DateTime) description = Column(String) # eg sunny, before, after siteId = Column(Integer, ForeignKey('sites.id')) site = relationship("Site", backref=backref('environmental_factors', order_by = id)) def __init__(self, startTime, endTime, description, site): 'startTime is passed as string in utils.datetimeFormat, eg 2011-06-22 10:00:39' self.startTime = datetime.strptime(startTime, datetimeFormat) self.endTime = datetime.strptime(endTime, datetimeFormat) self.description = description self.site = site class CameraView(Base): __tablename__ = 'camera_views' id = Column(Integer, primary_key=True) frameRate = Column(Float) homographyFilename = Column(String) # path to homograph filename, relative to SiteId siteId = Column(Integer, ForeignKey('sites.id')) # add distanceUnit related to homography? site = relationship("Site", backref=backref('camera_views', order_by = id)) def __init__(self, frameRate, homographyFilename, site): self.frameRate = frameRate self.homographyFilename = homographyFilename self.site = site class VideoSequence(Base): __tablename__ = 'video_sequences' id = Column(Integer, primary_key=True) name = Column(String) # path that can be composed with the site name startTime = Column(DateTime) duration = Column(Float) # video sequence duration siteId = Column(Integer, ForeignKey('sites.id')) cameraViewId = Column(Integer, ForeignKey('camera_views.id')) 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): '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 # 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 def createDatabases(engine): Base.metadata.create_all(engine)