void BatchMode() { vector<double> frame_rates; for (size_t i = 0; i < rawlogs.size(); i++) { CRawlog rawlog; rawlog.loadFromRawLogFile(string(rawlogsDir + rawlogs[i] + ".rawlog")); cout << "Processing Rawlog [" << i + 1 << "/" << rawlogs.size() << "]: " << rawlogs[i] << endl; const unsigned int size = rawlog.size(); mrpt::utils::CTicTac tictac; size_t counter = 0; // PROCESS RAWLOG for (unsigned int j = 1; j < size; j++) { if (!counter) tictac.Tic(); CObservation3DRangeScan::Ptr o = std::dynamic_pointer_cast<CObservation3DRangeScan>( rawlog.getAsObservation(j)); ASSERT_(o); vector_detectable_object detected; faceDetector.detectObjects(o, detected); if (++counter == 10) { double t = tictac.Tac(); frame_rates.push_back(counter / t); counter = 0; } std::this_thread::sleep_for(2ms); } unsigned int falsePositivesDeleted, realFacesDeleted; faceDetector.debug_returnResults( falsePositives[i], ignored[i], falsePositivesDeleted, realFacesDeleted); cout << "False positives deleted: " << falsePositivesDeleted << endl; cout << "Real faces delted: " << realFacesDeleted << endl << endl; } cout << "Mean frame rate: " << sum(frame_rates) / frame_rates.size(); // faceDetector.experimental_showMeasurements(); system::pause(); }
void getImages( CRawlog &i_rawlog, vector<CImage> &v_images, size_t imgWidth, size_t width, size_t height, size_t N_channels, string textToAdd, size_t N_sensors ) { vector<CObservation3DRangeScanPtr> v_obs(4); vector<bool> v_imagesLoaded(4,false); // Insert a few frames to show the CImage preImage(width,height,N_channels); preImage.textOut(10,20,textToAdd,TColor(255,0,255)); for ( size_t i=0; i < 10; i++ ) v_images.push_back(preImage); for ( size_t obsIndex = 0; obsIndex < i_rawlog.size(); obsIndex++ ) { CObservationPtr obs = i_rawlog.getAsObservation(obsIndex); if ( IS_CLASS(obs, CObservation3DRangeScan) ) { CObservation3DRangeScanPtr obs3D = CObservation3DRangeScanPtr(obs); obs3D->load(); size_t inserted; if ( obs3D->sensorLabel == "RGBD_1" ) { v_obs[0] = obs3D; v_imagesLoaded[0] = true; inserted = 0; } else if ( obs3D->sensorLabel == "RGBD_2" ) { v_obs[1] = obs3D; v_imagesLoaded[1] = true; inserted = 1; } else if ( obs3D->sensorLabel == "RGBD_3" ) { v_obs[2] = obs3D; v_imagesLoaded[2] = true; inserted = 2; } else if ( obs3D->sensorLabel == "RGBD_4" ) { v_obs[3] = obs3D; v_imagesLoaded[3] = true; inserted = 3; } double sum = v_imagesLoaded[0] + v_imagesLoaded[1] + v_imagesLoaded[2] + v_imagesLoaded[3]; for ( size_t i = 0; i < 4; i++ ) { if (( i == inserted ) || (v_obs[i].null())) continue; if ( timeDifference( v_obs[i]->timestamp, v_obs[inserted]->timestamp ) > 0.5 ) v_imagesLoaded[i] = 0; } if ( sum == 4 ) { CImage img(height,width,N_channels); size_t imagesDrawn = 0; vector<size_t> v_imgsOrder(4); v_imgsOrder[0] = 2; v_imgsOrder[1] = 0; v_imgsOrder[2] = 1; v_imgsOrder[3] = 3; for ( size_t i = 0; i < 4; i++ ) { if ( v_sensorsToUse[i] ) { if ( useDepthImg ) { CImage imgDepth; imgDepth.setFromMatrix(v_obs[v_imgsOrder[i]]->rangeImage); img.drawImage(0,imgWidth*imagesDrawn,imgDepth); } else img.drawImage(0,imgWidth*imagesDrawn,v_obs[v_imgsOrder[i]]->intensityImage); imagesDrawn++; } } CImage rotatedImg(width,height,N_channels); for ( size_t row = 0; row < 320; row++ ) for ( size_t col = 0; col < imgWidth*N_sensors; col++ ) { u_int8_t r, g,b; if ( useDepthImg ) { r = g = b = *(img.get_unsafe(row,col,0)); } else { r = *(img.get_unsafe(row,col,2)); g = *(img.get_unsafe(row,col,1)); b = *(img.get_unsafe(row,col,0)); } TColor color(r,g,b); rotatedImg.setPixel(col,320-row,color); } rotatedImg.textOut(10,20,textToAdd,TColor(255,0,255)); v_images.push_back( rotatedImg ); v_imagesLoaded.clear(); v_imagesLoaded.resize(4,0); } } } }