Mercurial Hosting > traffic-intelligence
diff python/metadata.py @ 971:9897a13772fb
added utils to load video sequence in metadata
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 13 Dec 2017 14:06:20 -0500 |
parents | bf401567a933 |
children | b50145235f9e |
line wrap: on
line diff
--- a/python/metadata.py Thu Dec 07 23:31:54 2017 -0500 +++ b/python/metadata.py Wed Dec 13 14:06:20 2017 -0500 @@ -8,7 +8,7 @@ from sqlalchemy.orm import relationship, backref, sessionmaker from sqlalchemy.ext.declarative import declarative_base -from utils import datetimeFormat, removeExtension, getExtension +from utils import datetimeFormat, removeExtension, getExtension, TimeConverter from cvutils import computeUndistortMaps, videoFilenameExtensions, infoVideo from moving import TimeInterval @@ -70,15 +70,7 @@ else: return self.mapImageFilename - @staticmethod - def getSite(session, siteId): - 'Returns the site(s) matching the index or the name' - if str.isdigit(siteId): - return session.query(Site).filter(Site.idx == int(siteId)).all() - else: - return session.query(Site).filter(Site.description.like('%'+siteId+'%')).all() - class EnvironementalFactors(Base): '''Represents any environmental factors that may affect the results, in particular * changing weather conditions @@ -358,34 +350,54 @@ Session = sessionmaker(bind=engine) return Session() -def initializeSites(session, directoryName): - '''Initializes default site objects and Camera Views +def getSite(session, siteId): + 'Returns the site(s) matching the index or the name' + if str.isdigit(siteId): + return session.query(Site).filter(Site.idx == int(siteId)).all() + else: + return session.query(Site).filter(Site.description.like('%'+siteId+'%')).all() + +def getCameraView(session, viewId): + 'Returns the site(s) matching the index' + return session.query(CameraView).filter(CameraView.idx == int(viewId)).first() + +def initializeSites(session, directoryName, nViewsPerSite = 1): + '''Initializes default site objects and n camera views per site eg somedirectory/montreal/ contains intersection1, intersection2, etc. - The site names would be somedirectory/montreal/intersection1, somedirectory/montreal/intersection2, etc.''' + The site names would be somedirectory/montreal/intersection1, somedirectory/montreal/intersection2, etc. + The views should be directories in somedirectory/montreal/intersection1''' sites = [] cameraViews = [] names = listdir(directoryName) - cameraViewIdx = 1 for name in names: if path.isdir(directoryName+sep+name): sites.append(Site(directoryName+sep+name, None)) - cameraViews.append(CameraView('view{}'.format(cameraViewIdx), None, sites[-1], None, None, None)) - cameraViewIdx += 1 + for cameraViewIdx in range(1, nViewsPerSite+1): + cameraViews.append(CameraView('view{}'.format(cameraViewIdx), None, sites[-1], None, None, None)) session.add_all(sites) session.add_all(cameraViews) session.commit() -# TODO crawler for video files? def initializeVideos(session, cameraView, directoryName, startTime = None, datetimeFormat = None): '''Initializes videos with time or tries to guess it from filename directoryName should contain the videos to find and be the relative path from the site location''' names = listdir(directoryName) videoSequences = [] + if datetimeFormat is not None: + timeConverter = TimeConverter(datetimeFormat) for name in names: prefix = removeExtension(name) extension = getExtension(name) if extension in videoFilenameExtensions: + if datetimeFormat is not None: + from argparse import ArgumentTypeError + try: + prefix = name[:name.rfind('_')] + t1 = timeConverter.convert(prefix) + print('DB time {} / Time from filename {}'.format(startTime, t1)) + except ArgumentTypeError as e: + print('File format error for time {} (prefix {})'.format(name, prefix)) vidinfo = infoVideo(directoryName+sep+name) duration = vidinfo['number of frames']#timedelta(minutes = 27, seconds = 33) fps = vidinfo['fps']