Added extras to traincascade functionality
authorStevenPuttemans <steven.puttemans@kuleuven.be>
Thu, 21 Nov 2013 13:07:53 +0000 (14:07 +0100)
committerSteven Puttemans <steven.puttemans@kuleuven.be>
Wed, 27 Nov 2013 11:54:11 +0000 (12:54 +0100)
apps/traincascade/cascadeclassifier.cpp

index 00674ff..33f29aa 100644 (file)
@@ -137,6 +137,9 @@ bool CvCascadeClassifier::train( const String _cascadeDirName,
                                 const CvCascadeBoostParams& _stageParams,
                                 bool baseFormatSave )
 {
+    // Start recording clock ticks for training time output
+    const clock_t begin_time = clock();
+
     if( _cascadeDirName.empty() || _posFilename.empty() || _negFilename.empty() )
         CV_Error( CV_StsBadArg, "_cascadeDirName or _bgfileName or _vecFileName is NULL" );
 
@@ -247,6 +250,14 @@ bool CvCascadeClassifier::train( const String _cascadeDirName,
         fs << FileStorage::getDefaultObjectName(stageFilename) << "{";
         tempStage->write( fs, Mat() );
         fs << "}";
+
+        // Output training time up till now
+        float seconds = float( clock () - begin_time ) / CLOCKS_PER_SEC;
+        int days = int(seconds) / 60 / 60 / 24;
+        int hours = (int(seconds) / 60 / 60) % 24;
+        int minutes = (int(seconds) / 60) % 60;
+        int seconds_left = int(seconds) % 60;
+        cout << "Training until now has taken " << days << " days " << hours << " hours " << minutes << " minutes " << seconds_left <<" seconds." << endl;
     }
 
     if(stageClassifiers.size() == 0)
@@ -310,6 +321,7 @@ int CvCascadeClassifier::fillPassedSamples( int first, int count, bool isPositiv
             if( predict( i ) == 1.0F )
             {
                 getcount++;
+                printf("%s current samples: %d\r", isPositive ? "POS":"NEG", getcount);
                 break;
             }
         }