comparison c/feature-based-tracking.cpp @ 222:426321b46e44

temporary trajectory instants table
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 26 Jun 2012 02:08:01 -0400
parents bc93e87a2108
children d4d3b1e8a9f1
comparison
equal deleted inserted replaced
221:bc93e87a2108 222:426321b46e44
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(); 274 trajectoryDB->createViewInstants("table");
275 275
276 // unsigned int maxTrajectoryLength; 276 unsigned int maxTrajectoryLength;
277 // // trajectoryDB->maxTrajectoryLength(maxTrajectoryLength); 277 trajectoryDB->maxTrajectoryLength(maxTrajectoryLength);
278 cout << "Longest trajectory: " << maxTrajectoryLength << endl;
278 279
279 // 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 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
280 int queryIntervalLength = 100; 281 int queryIntervalLength = 10;
281 282
282 FeatureGraph featureGraph(params.mmConnectionDistance, params.mmSegmentationDistance, params.minFeatureTime, params.minNFeaturesPerGroup); 283 FeatureGraph featureGraph(params.mmConnectionDistance, params.mmSegmentationDistance, params.minFeatureTime, params.minNFeaturesPerGroup);
283 284
284 // main loop 285 // main loop
285 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 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
286 vector<int> trajectoryIds; 287 vector<int> trajectoryIds;
287 success = trajectoryDB->trajectoryIdEndingAt(trajectoryIds, frameNum); // ending 288 success = trajectoryDB->trajectoryIdEndingAt(trajectoryIds, frameNum); // ending
288 cout << "frame " << frameNum << " " << success << endl; 289 cout << "frame " << frameNum << endl;
290 //success = trajectoryDB->trajectoryIdInInterval(trajectoryIds, frameNum, min(frameNum+queryIntervalLength-1, frameNum+params.nFrames)); // ending
291 #if DEBUG
289 cout << trajectoryIds.size() << " trajectories " << endl; 292 cout << trajectoryIds.size() << " trajectories " << endl;
293 #endif
294 // vector<TrajectoryPoint2fPtr> positions, velocities;
295 // trajectoryDB->read(positions, trajectoryIds, "positions");
296 // trajectoryDB->read(velocities, trajectoryIds, "velocities");
297 // for (unsigned int i=0; i<trajectoryIds.size(); ++i) {
298 // FeatureTrajectoryPtr ft = FeatureTrajectoryPtr(new FeatureTrajectory(positions[i], velocities[i]));
290 BOOST_FOREACH(int trajectoryId, trajectoryIds) { 299 BOOST_FOREACH(int trajectoryId, trajectoryIds) {
291 //cout << trajectoryId << " " << endl; 300 //cout << trajectoryId << " " << endl;
292 // boost::shared_ptr<Trajectory<cv::Point2f> > trajectory; 301 // boost::shared_ptr<Trajectory<cv::Point2f> > trajectory;
293 // success = trajectoryDB->read(trajectory, trajectoryId, "positions"); // velocities 302 // success = trajectoryDB->read(trajectory, trajectoryId, "positions"); // velocities
294 FeatureTrajectoryPtr ft = FeatureTrajectoryPtr(new FeatureTrajectory(trajectoryId, *trajectoryDB, "positions", "velocities")); 303 FeatureTrajectoryPtr ft = FeatureTrajectoryPtr(new FeatureTrajectory(trajectoryId, *trajectoryDB, "positions", "velocities"));
295 // stringstream ss;ss << *ft; cout << ss.str() << endl; 304 // stringstream ss;ss << *ft; cout << ss.str() << endl;
296 // cout << ft->getFirstInstant() << " " << ft->getLastInstant() << endl; 305 // cout << ft->getFirstInstant() << " " << ft->getLastInstant() << endl;
297 featureGraph.addFeature(ft); 306 featureGraph.addFeature(ft);
298 } 307 }
299 308
300 // check for connected components that are old enough (no chance to match with trajectories to be added later 309 // check for connected components
301 // we could check only when some features are getting old enough? 310 featureGraph.connectedComponents(frameNum+params.minFeatureTime);
302 if (frameNum%10 == 0) { 311 vector<vector<unsigned int> > featureGroups = featureGraph.getFeatureGroups();
303 featureGraph.connectedComponents(frameNum+params.minFeatureTime); 312 for (unsigned int i=0; i<featureGroups.size(); ++i) {
304 vector<vector<unsigned int> > featureGroups = featureGraph.getFeatureGroups(); 313 trajectoryDB->writeObject(savedObjectId, featureGroups[i], -1, 1, string("objects"), string("objects_features"));
305 for (unsigned int i=0; i<featureGroups.size(); ++i) { 314 savedObjectId++;
306 trajectoryDB->writeObject(savedObjectId, featureGroups[i], -1, 1, string("objects"), string("objects_features"));
307 savedObjectId++;
308 }
309 } 315 }
310 316
311 cout << featureGraph.informationString() << endl; 317 cout << featureGraph.informationString() << endl;
312 } 318 }
313 319
314 trajectoryDB->endTransaction(); 320 trajectoryDB->endTransaction();
315 trajectoryDB->disconnect(); 321 trajectoryDB->disconnect();