Mercurial > hg > nsaunier > traffic-intelligence
comparison scripts/process.py @ 1065:d4d052a05337
added progress report functionality
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Mon, 16 Jul 2018 00:05:17 -0400 |
| parents | cbc026dacf0b |
| children | 862b55a87e63 |
comparison
equal
deleted
inserted
replaced
| 1064:cbc026dacf0b | 1065:d4d052a05337 |
|---|---|
| 87 for videoId in args.videoIds: | 87 for videoId in args.videoIds: |
| 88 if '-' in videoId: | 88 if '-' in videoId: |
| 89 videoSequences.extend([session.query(VideoSequence).get(i) for i in moving.TimeInterval.parse(videoId)]) | 89 videoSequences.extend([session.query(VideoSequence).get(i) for i in moving.TimeInterval.parse(videoId)]) |
| 90 else: | 90 else: |
| 91 videoSequences.append(session.query(VideoSequence).get(int(videoId))) | 91 videoSequences.append(session.query(VideoSequence).get(int(videoId))) |
| 92 videoSequences = [vs for vs in videoSequences if vs is not None] | |
| 92 sites = set([vs.cameraView.site for vs in videoSequences]) | 93 sites = set([vs.cameraView.site for vs in videoSequences]) |
| 93 elif args.siteIds is not None: | 94 elif args.siteIds is not None: |
| 94 for siteId in args.siteIds: | 95 for siteId in args.siteIds: |
| 95 if '-' in siteId: | 96 if '-' in siteId: |
| 96 sites.extend([session.query(Site).get(i) for i in moving.TimeInterval.parse(siteId)]) | 97 sites.extend([session.query(Site).get(i) for i in moving.TimeInterval.parse(siteId)]) |
| 97 else: | 98 else: |
| 98 sites.append(session.query(Site).get(int(siteId))) | 99 sites.append(session.query(Site).get(int(siteId))) |
| 100 sites = [s for s in sites if s is not None] | |
| 99 for site in sites: | 101 for site in sites: |
| 100 videoSequences.extend(getSiteVideoSequences(site)) | 102 videoSequences.extend(getSiteVideoSequences(site)) |
| 101 else: | 103 else: |
| 102 print('No video/site to process') | 104 print('No video/site to process') |
| 103 sys.exit() | 105 |
| 104 if args.nProcesses > 1: | 106 if args.nProcesses > 1: |
| 105 pool = Pool(args.nProcesses) | 107 pool = Pool(args.nProcesses) |
| 106 | 108 |
| 107 ################################# | 109 ################################# |
| 108 # Report progress in the processing | 110 # Report progress in the processing |
| 109 ################################# | 111 ################################# |
| 110 if args.progress: | 112 if args.progress: |
| 111 print('Providing information on data progress') | 113 print('Providing information on data progress') |
| 114 headers = ['site', 'vs', 'features', 'objects', 'interactions'] # todo add prototypes and object classification | |
| 115 data = [] | |
| 116 for site in sites: | |
| 117 unprocessedVideoSequences = [] | |
| 118 for vs in getSiteVideoSequences(site): | |
| 119 if (parentPath/vs.getDatabaseFilename()).is_file(): | |
| 120 tableNames = storage.tableNames(str(parentPath.absolute()/vs.getDatabaseFilename())) | |
| 121 data.append([site.name, vs.idx, 'positions' in tableNames, 'objects' in tableNames, 'interactions' in tableNames]) | |
| 122 else: | |
| 123 unprocessedVideoSequences.append(vs) | |
| 124 data.append([site.name, vs.idx, False, False, False]) | |
| 125 #if len(unprocessedVideoSequences): | |
| 126 # print('Site {} ({}) has {} completely unprocessed video sequences'.format (site.name, site.idx, len(unprocessedVideoSequences))) | |
| 127 data = pd.DataFrame(data, columns = headers) | |
| 128 print('-'*80) | |
| 129 print('\t'+' '.join(headers[2:])) | |
| 130 print('-'*80) | |
| 131 for name, group in data.groupby(['site']): #.agg({'vs': 'count'})) | |
| 132 n = group.vs.count() | |
| 133 print('{}: {} % / {} % / {} % ({})'.format(name, 100*group.features.sum()/float(n), 100*group.objects.sum()/float(n), 100*group.interactions.sum()/float(n), n)) | |
| 134 print('-'*80) | |
| 135 print(data) | |
| 112 | 136 |
| 113 ################################# | 137 ################################# |
| 114 # Delete | 138 # Delete |
| 115 ################################# | 139 ################################# |
| 116 if args.delete is not None: | 140 if args.delete is not None: |
| 129 # Process | 153 # Process |
| 130 ################################# | 154 ################################# |
| 131 if args.process in ['feature', 'object']: # tracking | 155 if args.process in ['feature', 'object']: # tracking |
| 132 if args.nProcesses == 1: | 156 if args.nProcesses == 1: |
| 133 for vs in videoSequences: | 157 for vs in videoSequences: |
| 134 if not (parentPath/vs.getDatabaseFilename()).exists() or args.process == 'object': | 158 if not (parentPath/vs.getDatabaseFilename()).is_file() or args.process == 'object': |
| 135 if args.configFilename is None: | 159 if args.configFilename is None: |
| 136 configFilename = str(parentPath/vs.cameraView.getTrackingConfigurationFilename()) | 160 configFilename = str(parentPath/vs.cameraView.getTrackingConfigurationFilename()) |
| 137 else: | 161 else: |
| 138 configFilename = args.configFilename | 162 configFilename = args.configFilename |
| 139 if vs.cameraView.cameraType is None: | 163 if vs.cameraView.cameraType is None: |
| 142 cvutils.tracking(configFilename, args.process == 'object', str(parentPath.absolute()/vs.getVideoSequenceFilename()), str(parentPath.absolute()/vs.getDatabaseFilename()), str(parentPath.absolute()/vs.cameraView.getHomographyFilename()), str(parentPath.absolute()/vs.cameraView.getMaskFilename()), True, vs.cameraView.cameraType.intrinsicCameraMatrix, vs.cameraView.cameraType.distortionCoefficients, args.dryRun) | 166 cvutils.tracking(configFilename, args.process == 'object', str(parentPath.absolute()/vs.getVideoSequenceFilename()), str(parentPath.absolute()/vs.getDatabaseFilename()), str(parentPath.absolute()/vs.cameraView.getHomographyFilename()), str(parentPath.absolute()/vs.cameraView.getMaskFilename()), True, vs.cameraView.cameraType.intrinsicCameraMatrix, vs.cameraView.cameraType.distortionCoefficients, args.dryRun) |
| 143 else: | 167 else: |
| 144 print('SQLite already exists: {}'.format(parentPath/vs.getDatabaseFilename())) | 168 print('SQLite already exists: {}'.format(parentPath/vs.getDatabaseFilename())) |
| 145 else: | 169 else: |
| 146 for vs in videoSequences: | 170 for vs in videoSequences: |
| 147 if not (parentPath/vs.getDatabaseFilename()).exists() or args.process == 'object': | 171 if not (parentPath/vs.getDatabaseFilename()).is_file() or args.process == 'object': |
| 148 if args.configFilename is None: | 172 if args.configFilename is None: |
| 149 configFilename = str(parentPath/vs.cameraView.getTrackingConfigurationFilename()) | 173 configFilename = str(parentPath/vs.cameraView.getTrackingConfigurationFilename()) |
| 150 else: | 174 else: |
| 151 configFilename = args.configFilename | 175 configFilename = args.configFilename |
| 152 if vs.cameraView.cameraType is None: | 176 if vs.cameraView.cameraType is None: |
