comparison scripts/process.py @ 1004:75601be6019f

work on process
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Sun, 03 Jun 2018 00:21:18 -0400
parents 75af46516b2b
children 666b38437d9a
comparison
equal deleted inserted replaced
1003:75af46516b2b 1004:75601be6019f
1 #! /usr/bin/env python3 1 #! /usr/bin/env python3
2 2
3 import sys, argparse 3 import sys, argparse
4 from pathlib import Path 4 from pathlib import Path
5 from multiprocessing.pool import Pool
5 6
6 import matplotlib 7 import matplotlib
7 matplotlib.use('Agg') 8 matplotlib.use('Agg')
8 import matplotlib.pyplot as plt 9 import matplotlib.pyplot as plt
9 from numpy import percentile 10 from numpy import percentile
10 11
11 import storage, events, prediction 12 import storage, events, prediction, cvutils
12 from metadata import * 13 from metadata import *
13 14
14 parser = argparse.ArgumentParser(description='This program manages the processing of several files based on a description of the sites and video data in an SQLite database following the metadata module.') 15 parser = argparse.ArgumentParser(description='This program manages the processing of several files based on a description of the sites and video data in an SQLite database following the metadata module.')
15 parser.add_argument('--db', dest = 'metadataFilename', help = 'name of the metadata file', required = True) 16 parser.add_argument('--db', dest = 'metadataFilename', help = 'name of the metadata file', required = True)
16 parser.add_argument('--videos', dest = 'videoIds', help = 'indices of the video sequences', nargs = '*', type = int) 17 parser.add_argument('--videos', dest = 'videoIds', help = 'indices of the video sequences', nargs = '*', type = int)
18 parser.add_argument('--sites', dest = 'siteIds', help = 'indices of the video sequences', nargs = '*', type = int)
17 parser.add_argument('--cfg', dest = 'configFilename', help = 'name of the configuration file') 19 parser.add_argument('--cfg', dest = 'configFilename', help = 'name of the configuration file')
18 parser.add_argument('-n', dest = 'nObjects', help = 'number of objects/interactions to process', type = int) 20 parser.add_argument('-n', dest = 'nObjects', help = 'number of objects/interactions to process', type = int)
19 parser.add_argument('--prediction-method', dest = 'predictionMethod', help = 'prediction method (constant velocity (cvd: vector computation (approximate); cve: equation solving; cv: discrete time (approximate)), normal adaptation, point set prediction)', choices = ['cvd', 'cve', 'cv', 'na', 'ps', 'mp']) 21 parser.add_argument('--prediction-method', dest = 'predictionMethod', help = 'prediction method (constant velocity (cvd: vector computation (approximate); cve: equation solving; cv: discrete time (approximate)), normal adaptation, point set prediction)', choices = ['cvd', 'cve', 'cv', 'na', 'ps', 'mp'])
20 parser.add_argument('--pet', dest = 'computePET', help = 'computes PET', action = 'store_true') 22 parser.add_argument('--pet', dest = 'computePET', help = 'computes PET', action = 'store_true')
21 # override other tracking config, erase sqlite? 23 # override other tracking config, erase sqlite?
44 #parser.add_argument('-t', dest = 'dataType', help = 'type of the data to remove', required = True, choices = ['object','interaction', 'bb', 'pois', 'prototype']) 46 #parser.add_argument('-t', dest = 'dataType', help = 'type of the data to remove', required = True, choices = ['object','interaction', 'bb', 'pois', 'prototype'])
45 for videoId in args.videoIds: 47 for videoId in args.videoIds:
46 vs = session.query(VideoSequence).get(videoId) 48 vs = session.query(VideoSequence).get(videoId)
47 storage.deleteFromSqlite(str(parentDir/vs.getDatabaseFilename()), args.delete) 49 storage.deleteFromSqlite(str(parentDir/vs.getDatabaseFilename()), args.delete)
48 50
51 import time
52 def track(i):
53 time.sleep(1)
54 print('process {}'.format(i))
55
56
49 if args.process in ['feature', 'object']: # tracking 57 if args.process in ['feature', 'object']: # tracking
50 for videoId in args.videoIds: 58 if args.videoIds is not None:
51 vs = session.query(VideoSequence).get(videoId) 59 videoSequences = [session.query(VideoSequence).get(videoId) for videoId in args.videoIds]
52 if args.configFilename is None: 60 elif args.siteIds is not None:
53 configFilename = vs.cameraView.getTrackingConfigurationFilename() 61 videoSequences = []
54 else: 62 for siteId in args.siteIds:
55 configFilename = args.configFilename 63 for site in getSite(session, siteId):
56 #todo cvutils.tracking(configFilename, args.process == 'object', str(parentDir/vs.getVideoSequenceFilename(), str(parentDir/vs.getDatabaseFilename(), configFilename = vs.cameraView.getHomographyFilename()) 64 for cv in site.cameraViews:
57 65 videoSequences += cv.videoSequences
66 else:
67 print('No video/site to process')
68 videoSequences = []
69 if args.nProcesses == 1:
70 pass
71 else:
72 pool = Pool(args.nProcesses)
73 for vs in videoSequences:
74 if not (parentDir/vs.getDatabaseFilename()).exists():
75 if args.configFilename is None:
76 configFilename = vs.cameraView.getTrackingConfigurationFilename()
77 else:
78 configFilename = args.configFilename
79 if vs.cameraView.cameraType is None:
80 pool.apply_async(cvutils.tracking, args = (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, True))
81 else:
82 pool.apply_async(cvutils.tracking, args = (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, True))
83 else:
84 print('SQLite already exists: {}'.format(parentDir/vs.getDatabaseFilename()))
85 pool.close()
86 pool.join()
87
58 elif args.process == 'interaction': 88 elif args.process == 'interaction':
59 # safety analysis TODO make function in safety analysis script 89 # safety analysis TODO make function in safety analysis script
60 if args.predictionMethod == 'cvd': 90 if args.predictionMethod == 'cvd':
61 predictionParameters = prediction.CVDirectPredictionParameters() 91 predictionParameters = prediction.CVDirectPredictionParameters()
62 if args.predictionMethod == 'cve': 92 if args.predictionMethod == 'cve':