Mercurial Hosting > traffic-intelligence
comparison 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 |
comparison
equal
deleted
inserted
replaced
1008:a5f2309bb1ff | 1009:0d29b75f74ea |
---|---|
30 | 30 |
31 # need way of selecting sites as similar as possible to sql alchemy syntax | 31 # need way of selecting sites as similar as possible to sql alchemy syntax |
32 # override tracking.cfg from db | 32 # override tracking.cfg from db |
33 # manage cfg files, overwrite them (or a subset of parameters) | 33 # manage cfg files, overwrite them (or a subset of parameters) |
34 # delete sqlite files | 34 # delete sqlite files |
35 | |
36 # info of metadata | 35 # info of metadata |
37 | 36 |
37 args = parser.parse_args() | |
38 | 38 |
39 args = parser.parse_args() | 39 ################################# |
40 # files are relative to metadata location | 40 # Data preparation |
41 ################################# | |
42 session = connectDatabase(args.metadataFilename) | |
43 parentDir = Path(args.metadataFilename).parent # files are relative to metadata location | |
44 videoSequences = [] | |
45 if args.videoIds is not None: | |
46 videoSequences = [session.query(VideoSequence).get(videoId) for videoId in args.videoIds] | |
47 elif args.siteIds is not None: | |
48 for siteId in args.siteIds: | |
49 for site in getSite(session, siteId): | |
50 for cv in site.cameraViews: | |
51 videoSequences += cv.videoSequences | |
52 else: | |
53 print('No video/site to process') | |
41 | 54 |
42 session = connectDatabase(args.metadataFilename) | 55 ################################# |
43 parentDir = Path(args.metadataFilename).parent | 56 # Delete |
44 | 57 ################################# |
45 if args.delete is not None: | 58 if args.delete is not None: |
46 if args.delete in ['object', 'interaction']: | 59 if args.delete == 'feature': |
60 pass | |
61 elif args.delete in ['object', 'interaction']: | |
47 #parser.add_argument('-t', dest = 'dataType', help = 'type of the data to remove', required = True, choices = ['object','interaction', 'bb', 'pois', 'prototype']) | 62 #parser.add_argument('-t', dest = 'dataType', help = 'type of the data to remove', required = True, choices = ['object','interaction', 'bb', 'pois', 'prototype']) |
48 for videoId in args.videoIds: | 63 for vs in videoSequences: |
49 vs = session.query(VideoSequence).get(videoId) | |
50 storage.deleteFromSqlite(str(parentDir/vs.getDatabaseFilename()), args.delete) | 64 storage.deleteFromSqlite(str(parentDir/vs.getDatabaseFilename()), args.delete) |
51 | 65 |
52 import time | 66 ################################# |
53 def track(i): | 67 # Process |
54 time.sleep(1) | 68 ################################# |
55 print('process {}'.format(i)) | |
56 | |
57 | |
58 if args.process in ['feature', 'object']: # tracking | 69 if args.process in ['feature', 'object']: # tracking |
59 if args.videoIds is not None: | |
60 videoSequences = [session.query(VideoSequence).get(videoId) for videoId in args.videoIds] | |
61 elif args.siteIds is not None: | |
62 videoSequences = [] | |
63 for siteId in args.siteIds: | |
64 for site in getSite(session, siteId): | |
65 for cv in site.cameraViews: | |
66 videoSequences += cv.videoSequences | |
67 else: | |
68 print('No video/site to process') | |
69 videoSequences = [] | |
70 if args.nProcesses == 1: | 70 if args.nProcesses == 1: |
71 pass | 71 for vs in videoSequences: |
72 if not (parentDir/vs.getDatabaseFilename()).exists() or args.process == 'object': | |
73 if args.configFilename is None: | |
74 configFilename = str(parentDir/vs.cameraView.getTrackingConfigurationFilename()) | |
75 else: | |
76 configFilename = args.configFilename | |
77 if vs.cameraView.cameraType is None: | |
78 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) | |
79 else: | |
80 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) | |
81 else: | |
82 print('SQLite already exists: {}'.format(parentDir/vs.getDatabaseFilename())) | |
72 else: | 83 else: |
73 pool = Pool(args.nProcesses) | 84 pool = Pool(args.nProcesses) |
74 for vs in videoSequences: | 85 for vs in videoSequences: |
75 if not (parentDir/vs.getDatabaseFilename()).exists() or args.process == 'object': | 86 if not (parentDir/vs.getDatabaseFilename()).exists() or args.process == 'object': |
76 if args.configFilename is None: | 87 if args.configFilename is None: |
90 # safety analysis TODO make function in safety analysis script | 101 # safety analysis TODO make function in safety analysis script |
91 if args.predictionMethod == 'cvd': | 102 if args.predictionMethod == 'cvd': |
92 predictionParameters = prediction.CVDirectPredictionParameters() | 103 predictionParameters = prediction.CVDirectPredictionParameters() |
93 if args.predictionMethod == 'cve': | 104 if args.predictionMethod == 'cve': |
94 predictionParameters = prediction.CVExactPredictionParameters() | 105 predictionParameters = prediction.CVExactPredictionParameters() |
95 for videoId in args.videoIds: | 106 for vs in videoSequences: |
96 vs = session.query(VideoSequence).get(videoId) | |
97 print('Processing '+vs.getDatabaseFilename()) | 107 print('Processing '+vs.getDatabaseFilename()) |
98 objects = storage.loadTrajectoriesFromSqlite(str(parentDir/vs.getDatabaseFilename()), 'object')#, args.nObjects, withFeatures = (params.useFeaturesForPrediction or predictionMethod == 'ps' or predictionMethod == 'mp')) | 108 objects = storage.loadTrajectoriesFromSqlite(str(parentDir/vs.getDatabaseFilename()), 'object')#, args.nObjects, withFeatures = (params.useFeaturesForPrediction or predictionMethod == 'ps' or predictionMethod == 'mp')) |
99 interactions = events.createInteractions(objects) | 109 interactions = events.createInteractions(objects) |
100 #if args.nProcesses == 1: | 110 #if args.nProcesses == 1: |
101 #print(str(parentDir/vs.cameraView.getTrackingConfigurationFilename())) | 111 #print(str(parentDir/vs.cameraView.getTrackingConfigurationFilename())) |
110 # processed = [] | 120 # processed = [] |
111 # for job in jobs: | 121 # for job in jobs: |
112 # processed += job.get() | 122 # processed += job.get() |
113 # pool.close() | 123 # pool.close() |
114 | 124 |
125 ################################# | |
126 # Analyze | |
127 ################################# | |
115 if args.analyze == 'object': # user speed for now | 128 if args.analyze == 'object': # user speed for now |
116 medianSpeeds = {} | 129 medianSpeeds = {} |
117 speeds85 = {} | 130 speeds85 = {} |
118 minLength = 2*30 | 131 minLength = 2*30 |
119 for videoId in args.videoIds: | 132 for vs in videoSequences: |
120 vs = session.query(VideoSequence).get(videoId) | |
121 if not vs.cameraView.siteIdx in medianSpeeds: | 133 if not vs.cameraView.siteIdx in medianSpeeds: |
122 medianSpeeds[vs.cameraView.siteIdx] = [] | 134 medianSpeeds[vs.cameraView.siteIdx] = [] |
123 speeds85[vs.cameraView.siteIdx] = [] | 135 speeds85[vs.cameraView.siteIdx] = [] |
124 print('Extracting speed from '+vs.getDatabaseFilename()) | 136 print('Extracting speed from '+vs.getDatabaseFilename()) |
125 objects = storage.loadTrajectoriesFromSqlite(str(parentDir/vs.getDatabaseFilename()), 'object') | 137 objects = storage.loadTrajectoriesFromSqlite(str(parentDir/vs.getDatabaseFilename()), 'object') |
140 indicatorIds = [2,5,7,10] | 152 indicatorIds = [2,5,7,10] |
141 conversionFactors = {2: 1., 5: 30.*3.6, 7:1./30, 10:1./30} | 153 conversionFactors = {2: 1., 5: 30.*3.6, 7:1./30, 10:1./30} |
142 maxIndicatorValue = {2: float('inf'), 5: float('inf'), 7:10., 10:10.} | 154 maxIndicatorValue = {2: float('inf'), 5: float('inf'), 7:10., 10:10.} |
143 indicators = {} | 155 indicators = {} |
144 interactions = {} | 156 interactions = {} |
145 for videoId in args.videoIds: | 157 for vs in videoSequences: |
146 vs = session.query(VideoSequence).get(videoId) | |
147 if not vs.cameraView.siteIdx in interactions: | 158 if not vs.cameraView.siteIdx in interactions: |
148 interactions[vs.cameraView.siteIdx] = [] | 159 interactions[vs.cameraView.siteIdx] = [] |
149 indicators[vs.cameraView.siteIdx] = {} | 160 indicators[vs.cameraView.siteIdx] = {} |
150 for i in indicatorIds: | 161 for i in indicatorIds: |
151 indicators[vs.cameraView.siteIdx][i] = [] | 162 indicators[vs.cameraView.siteIdx][i] = [] |