Mercurial > hg > nsaunier > traffic-intelligence
comparison c/feature-based-tracking.cpp @ 225:d4d3b1e8a9f1
added code to process only needed frames based on saved features
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Tue, 26 Jun 2012 03:37:19 -0400 |
| parents | 426321b46e44 |
| children | b7612c6d5702 |
comparison
equal
deleted
inserted
replaced
| 224:37a434fb848e | 225:d4d3b1e8a9f1 |
|---|---|
| 269 // success = trajectoryDB->read(trajectory, i, "positions"); | 269 // success = trajectoryDB->read(trajectory, i, "positions"); |
| 270 // } | 270 // } |
| 271 // c_end = std::clock(); | 271 // c_end = std::clock(); |
| 272 // cout << "Loaded " << trajectories.size() << " trajectories one by one in " << 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC << " CPU seconds" << endl; | 272 // cout << "Loaded " << trajectories.size() << " trajectories one by one in " << 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC << " CPU seconds" << endl; |
| 273 | 273 |
| 274 trajectoryDB->createViewInstants("table"); | 274 trajectoryDB->createInstants("table"); |
| 275 | 275 |
| 276 unsigned int maxTrajectoryLength; | 276 unsigned int maxTrajectoryLength = 0; |
| 277 trajectoryDB->maxTrajectoryLength(maxTrajectoryLength); | 277 success = trajectoryDB->maxTrajectoryLength(maxTrajectoryLength); |
| 278 if (!success || maxTrajectoryLength == 0) { | |
| 279 cout << "problem with trajectory length " << success << endl; | |
| 280 exit(0); | |
| 281 } | |
| 278 cout << "Longest trajectory: " << maxTrajectoryLength << endl; | 282 cout << "Longest trajectory: " << maxTrajectoryLength << endl; |
| 279 | 283 |
| 280 // alternative: read and load features in batches directly select * from positions where trajectory_id in select trajectory_id from positions where frame_number <100 and frame_number > 50 group by trajectory_id | 284 // alternative: read and load features in batches directly select * from positions where trajectory_id in select trajectory_id from positions where frame_number <100 and frame_number > 50 group by trajectory_id |
| 281 int queryIntervalLength = 10; | 285 int queryIntervalLength = 10; |
| 282 | 286 |
| 283 FeatureGraph featureGraph(params.mmConnectionDistance, params.mmSegmentationDistance, params.minFeatureTime, params.minNFeaturesPerGroup); | 287 FeatureGraph featureGraph(params.mmConnectionDistance, params.mmSegmentationDistance, params.minFeatureTime, params.minNFeaturesPerGroup); |
| 284 | 288 |
| 285 // main loop | 289 // main loop |
| 286 for (int frameNum = params.frame1; ((frameNum-params.frame1 < params.nFrames) || (params.nFrames < 0)); frameNum ++) { // frameNum += queryIntervalLength // interval = frameNum, min(frameNum+queryIntervalLength, frameNum+params.nFrames) // stop if no trajectory available ? problem if nothing moves, timeout, get max of trajectory frame numbers | 290 int frameNum; |
| 291 unsigned int firstFrameNum, lastFrameNum; | |
| 292 trajectoryDB->firstLastInstants(firstFrameNum, lastFrameNum); | |
| 293 firstFrameNum = MAX(firstFrameNum, params.frame1); | |
| 294 if (params.nFrames>0) | |
| 295 lastFrameNum = MIN(lastFrameNum,params.frame1+params.nFrames); | |
| 296 for (frameNum = firstFrameNum; frameNum<lastFrameNum; frameNum ++) { | |
| 287 vector<int> trajectoryIds; | 297 vector<int> trajectoryIds; |
| 288 success = trajectoryDB->trajectoryIdEndingAt(trajectoryIds, frameNum); // ending | 298 success = trajectoryDB->trajectoryIdEndingAt(trajectoryIds, frameNum); // ending |
| 289 cout << "frame " << frameNum << endl; | 299 if (frameNum%100 ==0) |
| 300 cout << "frame " << frameNum << endl; | |
| 290 //success = trajectoryDB->trajectoryIdInInterval(trajectoryIds, frameNum, min(frameNum+queryIntervalLength-1, frameNum+params.nFrames)); // ending | 301 //success = trajectoryDB->trajectoryIdInInterval(trajectoryIds, frameNum, min(frameNum+queryIntervalLength-1, frameNum+params.nFrames)); // ending |
| 291 #if DEBUG | 302 #if DEBUG |
| 292 cout << trajectoryIds.size() << " trajectories " << endl; | 303 cout << trajectoryIds.size() << " trajectories " << endl; |
| 293 #endif | 304 #endif |
| 294 // vector<TrajectoryPoint2fPtr> positions, velocities; | 305 // vector<TrajectoryPoint2fPtr> positions, velocities; |
| 305 // cout << ft->getFirstInstant() << " " << ft->getLastInstant() << endl; | 316 // cout << ft->getFirstInstant() << " " << ft->getLastInstant() << endl; |
| 306 featureGraph.addFeature(ft); | 317 featureGraph.addFeature(ft); |
| 307 } | 318 } |
| 308 | 319 |
| 309 // check for connected components | 320 // check for connected components |
| 310 featureGraph.connectedComponents(frameNum+params.minFeatureTime); | 321 int lastInstant = frameNum+params.minFeatureTime-maxTrajectoryLength; |
| 311 vector<vector<unsigned int> > featureGroups = featureGraph.getFeatureGroups(); | 322 if (lastInstant > 0) { |
| 312 for (unsigned int i=0; i<featureGroups.size(); ++i) { | 323 featureGraph.connectedComponents(lastInstant); |
| 313 trajectoryDB->writeObject(savedObjectId, featureGroups[i], -1, 1, string("objects"), string("objects_features")); | 324 vector<vector<unsigned int> > featureGroups = featureGraph.getFeatureGroups(); |
| 314 savedObjectId++; | 325 for (unsigned int i=0; i<featureGroups.size(); ++i) { |
| 326 trajectoryDB->writeObject(savedObjectId, featureGroups[i], -1, 1, string("objects"), string("objects_features")); | |
| 327 savedObjectId++; | |
| 328 } | |
| 315 } | 329 } |
| 316 | 330 |
| 317 cout << featureGraph.informationString() << endl; | 331 if (frameNum%100 ==0) |
| 332 cout << featureGraph.informationString() << endl; | |
| 333 } | |
| 334 | |
| 335 // save remaining objects | |
| 336 featureGraph.connectedComponents(frameNum+maxTrajectoryLength+1); | |
| 337 vector<vector<unsigned int> > featureGroups = featureGraph.getFeatureGroups(); | |
| 338 for (unsigned int i=0; i<featureGroups.size(); ++i) { | |
| 339 trajectoryDB->writeObject(savedObjectId, featureGroups[i], -1, 1, string("objects"), string("objects_features")); | |
| 340 savedObjectId++; | |
| 318 } | 341 } |
| 319 | 342 |
| 320 trajectoryDB->endTransaction(); | 343 trajectoryDB->endTransaction(); |
| 321 trajectoryDB->disconnect(); | 344 trajectoryDB->disconnect(); |
| 322 } | 345 } |
