Mercurial Hosting > traffic-intelligence
diff scripts/process.py @ 1009:0d29b75f74ea
cleaning
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Mon, 04 Jun 2018 10:25:30 -0400 |
parents | 192de96e5255 |
children | 16932cefabc1 |
line wrap: on
line diff
--- a/scripts/process.py Sun Jun 03 23:32:13 2018 -0400 +++ b/scripts/process.py Mon Jun 04 10:25:30 2018 -0400 @@ -32,43 +32,54 @@ # override tracking.cfg from db # manage cfg files, overwrite them (or a subset of parameters) # delete sqlite files - # info of metadata - args = parser.parse_args() -# files are relative to metadata location - -session = connectDatabase(args.metadataFilename) -parentDir = Path(args.metadataFilename).parent +################################# +# Data preparation +################################# +session = connectDatabase(args.metadataFilename) +parentDir = Path(args.metadataFilename).parent # files are relative to metadata location +videoSequences = [] +if args.videoIds is not None: + videoSequences = [session.query(VideoSequence).get(videoId) for videoId in args.videoIds] +elif args.siteIds is not None: + for siteId in args.siteIds: + for site in getSite(session, siteId): + for cv in site.cameraViews: + videoSequences += cv.videoSequences +else: + print('No video/site to process') + +################################# +# Delete +################################# if args.delete is not None: - if args.delete in ['object', 'interaction']: + if args.delete == 'feature': + pass + elif args.delete in ['object', 'interaction']: #parser.add_argument('-t', dest = 'dataType', help = 'type of the data to remove', required = True, choices = ['object','interaction', 'bb', 'pois', 'prototype']) - for videoId in args.videoIds: - vs = session.query(VideoSequence).get(videoId) + for vs in videoSequences: storage.deleteFromSqlite(str(parentDir/vs.getDatabaseFilename()), args.delete) -import time -def track(i): - time.sleep(1) - print('process {}'.format(i)) - - +################################# +# Process +################################# if args.process in ['feature', 'object']: # tracking - if args.videoIds is not None: - videoSequences = [session.query(VideoSequence).get(videoId) for videoId in args.videoIds] - elif args.siteIds is not None: - videoSequences = [] - for siteId in args.siteIds: - for site in getSite(session, siteId): - for cv in site.cameraViews: - videoSequences += cv.videoSequences - else: - print('No video/site to process') - videoSequences = [] if args.nProcesses == 1: - pass + for vs in videoSequences: + if not (parentDir/vs.getDatabaseFilename()).exists() or args.process == 'object': + if args.configFilename is None: + configFilename = str(parentDir/vs.cameraView.getTrackingConfigurationFilename()) + else: + configFilename = args.configFilename + if vs.cameraView.cameraType is None: + cvutils.tracking(configFilename, args.process == 'object', str(parentDir.absolute()/vs.getVideoSequenceFilename()), str(parentDir.absolute()/vs.getDatabaseFilename()), str(parentDir.absolute()/vs.cameraView.getHomographyFilename()), str(parentDir.absolute()/vs.cameraView.getMaskFilename()), False, None, None, args.dryRun) + else: + cvutils.tracking(configFilename, args.process == 'object', str(parentDir.absolute()/vs.getVideoSequenceFilename()), str(parentDir.absolute()/vs.getDatabaseFilename()), str(parentDir.absolute()/vs.cameraView.getHomographyFilename()), str(parentDir.absolute()/vs.cameraView.getMaskFilename()), True, vs.cameraView.cameraType.intrinsicCameraMatrix, vs.cameraView.cameraType.distortionCoefficients, args.dryRun) + else: + print('SQLite already exists: {}'.format(parentDir/vs.getDatabaseFilename())) else: pool = Pool(args.nProcesses) for vs in videoSequences: @@ -92,8 +103,7 @@ predictionParameters = prediction.CVDirectPredictionParameters() if args.predictionMethod == 'cve': predictionParameters = prediction.CVExactPredictionParameters() - for videoId in args.videoIds: - vs = session.query(VideoSequence).get(videoId) + for vs in videoSequences: print('Processing '+vs.getDatabaseFilename()) objects = storage.loadTrajectoriesFromSqlite(str(parentDir/vs.getDatabaseFilename()), 'object')#, args.nObjects, withFeatures = (params.useFeaturesForPrediction or predictionMethod == 'ps' or predictionMethod == 'mp')) interactions = events.createInteractions(objects) @@ -112,12 +122,14 @@ # processed += job.get() # pool.close() +################################# +# Analyze +################################# if args.analyze == 'object': # user speed for now medianSpeeds = {} speeds85 = {} minLength = 2*30 - for videoId in args.videoIds: - vs = session.query(VideoSequence).get(videoId) + for vs in videoSequences: if not vs.cameraView.siteIdx in medianSpeeds: medianSpeeds[vs.cameraView.siteIdx] = [] speeds85[vs.cameraView.siteIdx] = [] @@ -142,8 +154,7 @@ maxIndicatorValue = {2: float('inf'), 5: float('inf'), 7:10., 10:10.} indicators = {} interactions = {} - for videoId in args.videoIds: - vs = session.query(VideoSequence).get(videoId) + for vs in videoSequences: if not vs.cameraView.siteIdx in interactions: interactions[vs.cameraView.siteIdx] = [] indicators[vs.cameraView.siteIdx] = {}