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++; } } } } }
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++; } } } } }