changeset 1009:0d29b75f74ea

cleaning
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 04 Jun 2018 10:25:30 -0400
parents a5f2309bb1ff
children cf9d29de3dbf
files scripts/process.py
diffstat 1 files changed, 44 insertions(+), 33 deletions(-) [+]
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] = {}