]> rtime.felk.cvut.cz Git - opencv.git/commitdiff
no message
authorvp153 <vp153@73c94f0f-984f-4a5f-82bc-2d8db8d8ee08>
Wed, 8 Sep 2004 09:16:15 +0000 (09:16 +0000)
committervp153 <vp153@73c94f0f-984f-4a5f-82bc-2d8db8d8ee08>
Wed, 8 Sep 2004 09:16:15 +0000 (09:16 +0000)
git-svn-id: https://code.ros.org/svn/opencv/trunk@60 73c94f0f-984f-4a5f-82bc-2d8db8d8ee08

opencv/src/cv/cvhaar.cpp

index f61b2d992cc86655c8b52da1497fa15bebe73d94..99f589f407a7e6ac2c49b1b767133c1c433d62f1 100644 (file)
@@ -1145,77 +1145,64 @@ cvLoadHaarClassifierCascade( const char* directory, CvSize orig_window_size )
 
     __BEGIN__;
 
-    int n;
+    int i, n;
+    char* slash;
     char name[_MAX_PATH];
-
-    CvFileStorage* fs = NULL;
+    int size = 0;
+    char* ptr = 0;
 
     if( !directory )
         CV_ERROR( CV_StsNullPtr, "Null path is passed" );
 
-    CV_CALL( fs = cvOpenFileStorage( directory, 0, CV_STORAGE_READ ) );
-    if( fs )
+    n = strlen(directory)-1;
+    slash = directory[n] == '\\' || directory[n] == '/' ? "" : "/";
+
+    /* try to read the classifier from directory */
+    for( n = 0; ; n++ )
     {
-        /* read the classifier from .[xy]ml file */
-        CV_CALL( cascade = (CvHaarClassifierCascade*)cvReadByName( fs, NULL, "cascade"));
-        CV_CALL( cvReleaseFileStorage( &fs ) );
-        EXIT;
+        sprintf( name, "%s%s%d/AdaBoostCARTHaarClassifier.txt", directory, slash, n );
+        FILE* f = fopen( name, "rb" );
+        if( !f )
+            break;
+        fseek( f, 0, SEEK_END );
+        size += ftell( f ) + 1;
+        fclose(f);
     }
 
-    /* read the classifier from directory */
-
-    /*if( !directory || strcmp( directory, "<default_face_cascade>" ) == 0 )
+    if( n == 0 && slash[0] )
     {
-        input_cascade = icvDefaultFaceCascade;
-        for( n = 0; input_cascade[n] != 0; n++ )
-            ;
+        CV_CALL( cascade = (CvHaarClassifierCascade*)cvLoad( directory ));
+        EXIT;
     }
-    else*/
-    {
-        int i, size = 0;
-        char* ptr;
-
-        for( n = 0; ; n++ )
-        {
-            sprintf( name, "%s/%d/AdaBoostCARTHaarClassifier.txt", directory, n );
-            FILE* f = fopen( name, "rb" );
-            if( !f )
-                break;
-            fseek( f, 0, SEEK_END );
-            size += ftell( f ) + 1;
-            fclose(f);
-        }
-
-        size += (n+1)*sizeof(char*);
-        CV_CALL( input_cascade = (const char**)cvAlloc( size ));
-        ptr = (char*)(input_cascade + n + 1);
+    else if( n == 0 )
+        CV_ERROR( CV_StsBadArg, "Invalid path" );
+    
+    size += (n+1)*sizeof(char*);
+    CV_CALL( input_cascade = (const char**)cvAlloc( size ));
+    ptr = (char*)(input_cascade + n + 1);
 
-        for( i = 0; i < n; i++ )
-        {
-            sprintf( name, "%s/%d/AdaBoostCARTHaarClassifier.txt", directory, i );
-            FILE* f = fopen( name, "rb" );
-            if( !f )
-                CV_ERROR( CV_StsError, "" );
-            fseek( f, 0, SEEK_END );
-            size = ftell( f );
-            fseek( f, 0, SEEK_SET );
-            fread( ptr, 1, size, f );
-            fclose(f);
-            input_cascade[i] = ptr;
-            ptr += size;
-            *ptr++ = '\0';
-        }
-        input_cascade[n] = 0;
+    for( i = 0; i < n; i++ )
+    {
+        sprintf( name, "%s/%d/AdaBoostCARTHaarClassifier.txt", directory, i );
+        FILE* f = fopen( name, "rb" );
+        if( !f )
+            CV_ERROR( CV_StsError, "" );
+        fseek( f, 0, SEEK_END );
+        size = ftell( f );
+        fseek( f, 0, SEEK_SET );
+        fread( ptr, 1, size, f );
+        fclose(f);
+        input_cascade[i] = ptr;
+        ptr += size;
+        *ptr++ = '\0';
     }
 
-    if( n == 0 )
-        CV_ERROR( CV_StsBadArg, "Invalid path" );
-
+    input_cascade[n] = 0;
     cascade = icvLoadCascadeCART( input_cascade, n, orig_window_size );
 
     __END__;
 
-    if( input_cascade /*&& input_cascade != icvDefaultFaceCascade*/ )
+    if( input_cascade )
         cvFree( (void**)&input_cascade );
 
     if( cvGetErrStatus() < 0 )