Example #1
0
void parserModel(FILE * xmlf, CvLSVMFilterObject *** model, int *last, int *max, int **comp, float **b, int *count, float * score){
    int p = 0;
    int N_comp = 0;
    int * cmp;
    float *bb;
    int st = 0;
    int tag;
    int tagVal;
    char ch;
    int i,j, ii = 0;
    char buf[1024];
    char tagBuf[1024];
    
    //printf("<Model>\n");
    
    i   = 0;
    j   = 0;
    st  = 0;
    tag = 0;
    while(!feof(xmlf)){
        ch = (char)fgetc( xmlf );
        if(ch == '<'){
            tag = 1;
            j   = 1;
            tagBuf[j - 1] = ch;
        }else {
            if(ch == '>'){
                tagBuf[j    ] = ch;
                tagBuf[j + 1] = '\0';
                
                tagVal = getTeg(tagBuf);
               
                if(tagVal == EMODEL){
                    //printf("</Model>\n");
                    for(ii = 0; ii <= *last; ii++){
                        (*model)[ii]->numFeatures = p;
                    }
                    * count = N_comp;
                    return;
                }
                if(tagVal == COMP){
                    if(N_comp == 0){
                        cmp = (int    *)malloc(sizeof(int));
                        bb  = (float *)malloc(sizeof(float));
                        * comp = cmp;
                        * b    = bb;
                        * count = N_comp + 1; 
                    } else {
                        cmp = (int   *)malloc(sizeof(int)   * (N_comp + 1));
                        bb  = (float *)malloc(sizeof(float) * (N_comp + 1));
                        for(ii = 0; ii < N_comp; ii++){
                            cmp[ii] = (* comp)[ii];
                            bb [ii] = (* b   )[ii];
                        }
                        free(* comp);
                        free(* b   );
                        * comp = cmp;
                        * b    = bb;
                        * count = N_comp + 1; 
                    }
                    parserComp(xmlf, p, &N_comp, model, &((*b)[N_comp]), last, max);
                    cmp[N_comp - 1] = *last;
                }
                if(tagVal == P){
                    st = 1;
                    i = 0;
                }
                if(tagVal == EP){
                    st = 0;
                    buf[i] = '\0';
                    p = atoi(buf);
                    //printf("<P>%d</P>\n", p);
                }
                if(tagVal == SCORE){
                    st = 1;
                    i = 0;
                }
                if(tagVal == ESCORE){
                    st = 0;
                    buf[i] = '\0';
                    *score = (float)atof(buf);
                    //printf("<ScoreThreshold>%f</ScoreThreshold>\n", score);
                }
                tag = 0;
                i   = 0;                
            }else{
                if((tag == 0)&& (st == 1)){
                    buf[i] = ch; i++;
                }else{
                    tagBuf[j] = ch; j++;
                }
            }
        }        
    }
}
Example #2
0
void parserModel(FILE * xmlf, CvLSVMFilterObjectCascade *** model, int *last, int *max, int **comp, float **b, int *count, float * score, float** PCAcoeff){
    int p = 0, pca = 0;
    int N_comp = 0;
    int * cmp;
    float *bb;
    int st = 0;
    int tag;
    int tagVal;
    char ch;
    int i,j, ii = 0, jj;
    char buf[1024];
    char tagBuf[1024];
    double *data;
    //printf("<Model>\n");
    
    i   = 0;
    j   = 0;
    st  = 0;
    tag = 0;
    while(!feof(xmlf)){
        ch = (char)fgetc( xmlf );
        if(ch == '<'){
            tag = 1;
            j   = 1;
            tagBuf[j - 1] = ch;
        }else {
            if(ch == '>'){
                tagBuf[j    ] = ch;
                tagBuf[j + 1] = '\0';
                
                tagVal = getTeg(tagBuf);
               
                if(tagVal == EMODEL){
                    //printf("</Model>\n");
                    for(ii = 0; ii <= *last; ii++){
                        (*model)[ii]->numFeatures = p;
                    }
                    * count = N_comp;
                    return;
                }
                if(tagVal == COMP){
                    if(N_comp == 0){
                        cmp = (int   *)malloc(sizeof(int));
                        bb  = (float *)malloc(sizeof(float));
                        * comp = cmp;
                        * b    = bb;
                        * count = N_comp + 1; 
                    } else {
                        cmp = (int   *)malloc(sizeof(int)   * (N_comp + 1));
                        bb  = (float *)malloc(sizeof(float) * (N_comp + 1));
                        for(ii = 0; ii < N_comp; ii++){
                            cmp[ii] = (* comp)[ii];
                            bb [ii] = (* b   )[ii];
                        }
                        free(* comp);
                        free(* b   );
                        * comp = cmp;
                        * b    = bb;
                        * count = N_comp + 1; 
                    }
                    parserComp(xmlf, p, pca, &N_comp, model, &((*b)[N_comp]), last, max);
                    cmp[N_comp - 1] = *last;
                }
                if(tagVal == P){
                    st = 1;
                    i = 0;
                }
                if(tagVal == EP){
                    st = 0;
                    buf[i] = '\0';
                    p = atoi(buf);
                    //printf("<P>%d</P>\n", p);
                }
                if(tagVal == PCA){
                    st = 1;
                    i = 0;
                }
                if(tagVal == EPCA){
                    st = 0;
                    buf[i] = '\0';
                    pca = atoi(buf);
                    //printf("<PCA>%d</PCA>\n", p);
                }
                if(tagVal == SCORE){
                    st = 1;
                    i = 0;
                }
                if(tagVal == PCACOEFF){
                    st = 0;
                    i = 0;
                    p--;
                    data = (double *)malloc( sizeof(double) * p * p);
                    (*PCAcoeff) = (float *)malloc( sizeof(float) * p * p);
                    CV_Assert(fread(data, sizeof(double), p * p, xmlf));
                    for(jj = 0; jj < p * p; jj++){
                      (*PCAcoeff)[jj] = (float)data[jj];
                    }
                    free(data);
                    p++;
                }
                if(tagVal == EPCACOEFF){
                    st = 0;
                    //printf("<PCA>%d</PCA>\n", p);
                }
                if(tagVal == SCORE){
                    st = 1;
                    i = 0;
                }
                if(tagVal == ESCORE){
                    st = 0;
                    buf[i] = '\0';
                    *score = (float)atof(buf);
                    //printf("<ScoreThreshold>%f</ScoreThreshold>\n", score);
                }
                tag = 0;
                i   = 0;                
            }else{
                if((tag == 0)&& (st == 1)){
                    buf[i] = ch; i++;
                }else{
                    tagBuf[j] = ch; j++;
                }
            }
        }        
    }
}