Mercurial > hg > nsaunier > traffic-intelligence
comparison python/metadata.py @ 865:5afa1d30edd8
minor improvement to path description and path accessors
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Thu, 08 Dec 2016 11:07:14 -0500 |
| parents | 2d6249fe905a |
| children | 8fba46899e74 |
comparison
equal
deleted
inserted
replaced
| 864:8f28b4fcf129 | 865:5afa1d30edd8 |
|---|---|
| 17 Base = declarative_base() | 17 Base = declarative_base() |
| 18 | 18 |
| 19 class Site(Base): | 19 class Site(Base): |
| 20 __tablename__ = 'sites' | 20 __tablename__ = 'sites' |
| 21 idx = Column(Integer, primary_key=True) | 21 idx = Column(Integer, primary_key=True) |
| 22 name = Column(String) # same as path, relative to the database position | 22 name = Column(String) # path to directory containing all site information (in subdirectories), relative to the database position |
| 23 description = Column(String) # longer names, eg intersection of road1 and road2 | 23 description = Column(String) # longer names, eg intersection of road1 and road2 |
| 24 xcoordinate = Column(Float) # ideally moving.Point, but needs to be | 24 xcoordinate = Column(Float) # ideally moving.Point, but needs to be |
| 25 ycoordinate = Column(Float) | 25 ycoordinate = Column(Float) |
| 26 mapImageFilename = Column(String) # path to filename, relative to site name, ie sitename/mapImageFilename | 26 mapImageFilename = Column(String) # path to map image file, relative to site name, ie sitename/mapImageFilename |
| 27 nUnitsPerPixel = Column(Float) # number of units of distance per pixel in map image | 27 nUnitsPerPixel = Column(Float) # number of units of distance per pixel in map image |
| 28 worldDistanceUnit = Column(String, default = 'm') # make sure it is default in the database | 28 worldDistanceUnit = Column(String, default = 'm') # make sure it is default in the database |
| 29 | 29 |
| 30 def __init__(self, name, description = "", xcoordinate = None, ycoordinate = None, mapImageFilename = None, nUnitsPerPixel = 1., worldDistanceUnit = 'm'): | 30 def __init__(self, name, description = "", xcoordinate = None, ycoordinate = None, mapImageFilename = None, nUnitsPerPixel = 1., worldDistanceUnit = 'm'): |
| 31 self.name = name | 31 self.name = name |
| 34 self.ycoordinate = ycoordinate | 34 self.ycoordinate = ycoordinate |
| 35 self.mapImageFilename = mapImageFilename | 35 self.mapImageFilename = mapImageFilename |
| 36 self.nUnitsPerPixel = nUnitsPerPixel | 36 self.nUnitsPerPixel = nUnitsPerPixel |
| 37 self.worldDistanceUnit = worldDistanceUnit | 37 self.worldDistanceUnit = worldDistanceUnit |
| 38 | 38 |
| 39 def getFilename(self): | 39 def getPath(self): |
| 40 return self.name | 40 return self.name |
| 41 | |
| 42 def getMapImageFilename(self, relativeToSiteFilename = True): | |
| 43 if relativeToSiteFilename: | |
| 44 return path.join(self.getPath(), self.mapImageFilename) | |
| 45 else: | |
| 46 return self.mapImageFilename | |
| 41 | 47 |
| 42 @staticmethod | 48 @staticmethod |
| 43 def getSite(session, siteId): | 49 def getSite(session, siteId): |
| 44 'Returns the site(s) matching the index or the name' | 50 'Returns the site(s) matching the index or the name' |
| 45 if str.isdigit(siteId): | 51 if str.isdigit(siteId): |
| 145 | 151 |
| 146 class CameraView(Base): | 152 class CameraView(Base): |
| 147 __tablename__ = 'camera_views' | 153 __tablename__ = 'camera_views' |
| 148 idx = Column(Integer, primary_key=True) | 154 idx = Column(Integer, primary_key=True) |
| 149 description = Column(String) | 155 description = Column(String) |
| 150 homographyFilename = Column(String) # path to homograph filename, relative to the site name | 156 homographyFilename = Column(String) # path to homograph file, relative to the site name |
| 151 siteIdx = Column(Integer, ForeignKey('sites.idx')) | 157 siteIdx = Column(Integer, ForeignKey('sites.idx')) |
| 152 cameraTypeIdx = Column(Integer, ForeignKey('camera_types.idx')) | 158 cameraTypeIdx = Column(Integer, ForeignKey('camera_types.idx')) |
| 153 trackingConfigurationFilename = Column(String) # path to configuration .cfg file, relative to site name | 159 trackingConfigurationFilename = Column(String) # path to configuration .cfg file, relative to site name |
| 154 maskFilename = Column(String) # path to mask file, relative to site name | 160 maskFilename = Column(String) # path to mask file, relative to site name |
| 155 virtual = Column(Boolean) # indicates it is not a real camera view, eg merged | 161 virtual = Column(Boolean) # indicates it is not a real camera view, eg merged |
| 166 self.maskFilename = maskFilename | 172 self.maskFilename = maskFilename |
| 167 self.virtual = virtual | 173 self.virtual = virtual |
| 168 | 174 |
| 169 def getHomographyFilename(self, relativeToSiteFilename = True): | 175 def getHomographyFilename(self, relativeToSiteFilename = True): |
| 170 if relativeToSiteFilename: | 176 if relativeToSiteFilename: |
| 171 return self.site.getFilename()+path.sep+self.homographyFilename | 177 return path.join(self.site.getPath(), self.homographyFilename) |
| 172 else: | 178 else: |
| 173 return self.homographyFilename | 179 return self.homographyFilename |
| 174 | 180 |
| 175 def getTrackingConfigurationFilename(self, relativeToSiteFilename = True): | 181 def getTrackingConfigurationFilename(self, relativeToSiteFilename = True): |
| 176 if relativeToSiteFilename: | 182 if relativeToSiteFilename: |
| 177 return self.site.getFilename()+path.sep+self.trackingConfigurationFilename | 183 return path.join(self.site.getPath(), self.trackingConfigurationFilename) |
| 178 else: | 184 else: |
| 179 return self.trackingConfigurationFilename | 185 return self.trackingConfigurationFilename |
| 180 | 186 |
| 181 def getMaskFilename(self, relativeToSiteFilename = True): | 187 def getMaskFilename(self, relativeToSiteFilename = True): |
| 182 if relativeToSiteFilename: | 188 if relativeToSiteFilename: |
| 183 return self.site.getFilename()+path.sep+self.maskFilename | 189 return path.join(self.site.getPath(), self.maskFilename) |
| 184 else: | 190 else: |
| 185 return self.maskFilename | 191 return self.maskFilename |
| 186 | 192 |
| 187 def getTrackingParameters(self): | 193 def getTrackingParameters(self): |
| 188 return ProcessParameters(self.getTrackingConfigurationFilename()) | 194 return ProcessParameters(self.getTrackingConfigurationFilename()) |
| 216 self.y = y | 222 self.y = y |
| 217 | 223 |
| 218 class VideoSequence(Base): | 224 class VideoSequence(Base): |
| 219 __tablename__ = 'video_sequences' | 225 __tablename__ = 'video_sequences' |
| 220 idx = Column(Integer, primary_key=True) | 226 idx = Column(Integer, primary_key=True) |
| 221 name = Column(String) # path relative to the the site name | 227 name = Column(String) # path to the video file relative to the the site name |
| 222 startTime = Column(DateTime) | 228 startTime = Column(DateTime) |
| 223 duration = Column(Interval) # video sequence duration | 229 duration = Column(Interval) # video sequence duration |
| 224 databaseFilename = Column(String) # path relative to the the site name | 230 databaseFilename = Column(String) # path to the database file relative to the the site name |
| 225 virtual = Column(Boolean) # indicates it is not a real video sequence (no video file), eg merged | 231 virtual = Column(Boolean) # indicates it is not a real video sequence (no video file), eg merged |
| 226 cameraViewIdx = Column(Integer, ForeignKey('camera_views.idx')) | 232 cameraViewIdx = Column(Integer, ForeignKey('camera_views.idx')) |
| 227 | 233 |
| 228 cameraView = relationship("CameraView", backref=backref('video_sequences', order_by = idx)) | 234 cameraView = relationship("CameraView", backref=backref('video_sequences', order_by = idx)) |
| 229 | 235 |
| 243 self.databaseFilename = databaseFilename | 249 self.databaseFilename = databaseFilename |
| 244 self.virtual = virtual | 250 self.virtual = virtual |
| 245 | 251 |
| 246 def getVideoSequenceFilename(self, relativeToSiteFilename = True): | 252 def getVideoSequenceFilename(self, relativeToSiteFilename = True): |
| 247 if relativeToSiteFilename: | 253 if relativeToSiteFilename: |
| 248 return self.cameraView.site.getFilename()+path.sep+self.name | 254 return path.join(self.cameraView.site.getPath(), self.name) |
| 249 else: | 255 else: |
| 250 return self.name | 256 return self.name |
| 251 | 257 |
| 252 def getDatabaseFilename(self, relativeToSiteFilename = True): | 258 def getDatabaseFilename(self, relativeToSiteFilename = True): |
| 253 if relativeToSiteFilename: | 259 if relativeToSiteFilename: |
| 254 return self.cameraView.site.getFilename()+path.sep+self.databaseFilename | 260 return path.join(self.cameraView.site.getPath(), self.databaseFilename) |
| 255 else: | 261 else: |
| 256 return self.databaseFilename | 262 return self.databaseFilename |
| 257 | 263 |
| 258 def getTimeInterval(self): | 264 def getTimeInterval(self): |
| 259 return TimeInterval(self.startTime, self.startTime+self.duration) | 265 return TimeInterval(self.startTime, self.startTime+self.duration) |
| 270 'Warning, there is no check of correct time units' | 276 'Warning, there is no check of correct time units' |
| 271 if self.containsInstant(instant): | 277 if self.containsInstant(instant): |
| 272 return int(floor((instant-self.startTime).seconds*self.cameraView.cameraType.frameRate)) | 278 return int(floor((instant-self.startTime).seconds*self.cameraView.cameraType.frameRate)) |
| 273 else: | 279 else: |
| 274 return None | 280 return None |
| 281 | |
| 282 class TrackingAnnotation(Base): | |
| 283 __tablename__ = 'tracking_annotations' | |
| 284 idx = Column(Integer, primary_key=True) | |
| 285 description = Column(String) # description | |
| 275 | 286 |
| 276 # 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) | 287 # 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) |
| 277 | 288 |
| 278 # class SiteDescription(Base): # list of lines and polygons describing the site, eg for sidewalks, center lines | 289 # class SiteDescription(Base): # list of lines and polygons describing the site, eg for sidewalks, center lines |
| 279 | 290 |
