comparison scripts/process.py @ 1064:cbc026dacf0b

changed interval string representation
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Sun, 15 Jul 2018 22:52:26 -0400
parents 3c37d8d20e97
children d4d052a05337
comparison
equal deleted inserted replaced
1063:3c37d8d20e97 1064:cbc026dacf0b
14 from trafficintelligence.metadata import * 14 from trafficintelligence.metadata import *
15 15
16 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.') 16 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.')
17 # input 17 # input
18 parser.add_argument('--db', dest = 'metadataFilename', help = 'name of the metadata file', required = True) 18 parser.add_argument('--db', dest = 'metadataFilename', help = 'name of the metadata file', required = True)
19 parser.add_argument('--videos', dest = 'videoIds', help = 'indices of the video sequences', nargs = '*', type = int) 19 parser.add_argument('--videos', dest = 'videoIds', help = 'indices of the video sequences', nargs = '*')
20 parser.add_argument('--sites', dest = 'siteIds', help = 'indices of the video sequences', nargs = '*') 20 parser.add_argument('--sites', dest = 'siteIds', help = 'indices of the video sequences', nargs = '*')
21 21
22 # main function 22 # main function
23 parser.add_argument('--delete', dest = 'delete', help = 'data to delete', choices = ['feature', 'object', 'classification', 'interaction']) 23 parser.add_argument('--delete', dest = 'delete', help = 'data to delete', choices = ['feature', 'object', 'classification', 'interaction'])
24 parser.add_argument('--process', dest = 'process', help = 'data to process', choices = ['feature', 'object', 'classification', 'prototype', 'interaction']) 24 parser.add_argument('--process', dest = 'process', help = 'data to process', choices = ['feature', 'object', 'classification', 'prototype', 'interaction'])
82 session = connectDatabase(args.metadataFilename) 82 session = connectDatabase(args.metadataFilename)
83 parentPath = Path(args.metadataFilename).parent # files are relative to metadata location 83 parentPath = Path(args.metadataFilename).parent # files are relative to metadata location
84 videoSequences = [] 84 videoSequences = []
85 sites = [] 85 sites = []
86 if args.videoIds is not None: 86 if args.videoIds is not None:
87 videoSequences = [session.query(VideoSequence).get(videoId) for videoId in args.videoIds] 87 for videoId in args.videoIds:
88 siteIds = set([vs.cameraView.siteIdx for vs in videoSequences]) 88 if '-' in videoId:
89 videoSequences.extend([session.query(VideoSequence).get(i) for i in moving.TimeInterval.parse(videoId)])
90 else:
91 videoSequences.append(session.query(VideoSequence).get(int(videoId)))
92 sites = set([vs.cameraView.site for vs in videoSequences])
89 elif args.siteIds is not None: 93 elif args.siteIds is not None:
90 siteIds = set(args.siteIds) 94 for siteId in args.siteIds:
91 for siteId in siteIds: 95 if '-' in siteId:
92 tmpsites = getSite(session, siteId) 96 sites.extend([session.query(Site).get(i) for i in moving.TimeInterval.parse(siteId)])
93 sites.extend(tmpsites) 97 else:
94 for site in tmpsites: 98 sites.append(session.query(Site).get(int(siteId)))
95 videoSequences.extend(getSiteVideoSequences(site)) 99 for site in sites:
100 videoSequences.extend(getSiteVideoSequences(site))
96 else: 101 else:
97 print('No video/site to process') 102 print('No video/site to process')
98 103 sys.exit()
99 if args.nProcesses > 1: 104 if args.nProcesses > 1:
100 pool = Pool(args.nProcesses) 105 pool = Pool(args.nProcesses)
101 106
102 ################################# 107 #################################
103 # Delete 108 # Report progress in the processing
104 ################################# 109 #################################
105 if args.progress: 110 if args.progress:
106 print('Providing information on data progress') 111 print('Providing information on data progress')
107 print('TODO')
108 112
109 ################################# 113 #################################
110 # Delete 114 # Delete
111 ################################# 115 #################################
112 if args.delete is not None: 116 if args.delete is not None:
243 data.append(row) 247 data.append(row)
244 data = pd.DataFrame(data, columns = headers) 248 data = pd.DataFrame(data, columns = headers)
245 if args.output == 'figure': 249 if args.output == 'figure':
246 for name in headers[4:]: 250 for name in headers[4:]:
247 plt.ioff() 251 plt.ioff()
248 plt.figure() 252 plt.figure() # siteids does not exist
249 plt.boxplot([data.loc[data['sites']==siteId, name] for siteId in siteIds], labels = [session.query(Site).get(siteId).name for siteId in siteIds]) 253 plt.boxplot([data.loc[data['site']==site.name, name] for site in sites], labels = [site.name for site in sites])
250 plt.ylabel(name+' Speeds (km/h)') 254 plt.ylabel(name+' Speeds (km/h)')
251 plt.savefig(name.lower()+'-speeds.png', dpi=dpi) 255 plt.savefig(name.lower()+'-speeds.png', dpi=dpi)
252 plt.close() 256 plt.close()
253 elif args.output == 'event': 257 elif args.output == 'event':
254 data.to_csv(args.eventFilename, index = False) 258 data.to_csv(args.eventFilename, index = False)