示例#1
0
文件: gmm.c 项目: czxxjtu/videosearch
gmm_t * gmm_read(FILE *f) {
    int d,k;

    READANDCHECK(&d,1);
    READANDCHECK(&k,1);

    gmm_t *g=gmm_new(d,k);

    READANDCHECK(g->w,g->k);
    READANDCHECK(g->mu,g->k*g->d);
    READANDCHECK(g->sigma,g->k*g->d);

    return g;
}
示例#2
0
int bvecs_new_from_siftgeo(const char *fname, 
			    int *d_out, unsigned char **v_out,
			    int *d_meta_out, float **meta_out) {

  FILE * f = fopen(fname, "r"); 
  if(!f) {
    fprintf(stderr, "could not open %s: %s\n", fname, strerror(errno));
    return -1;
  }

#define READANDCHECK(a,n) if(fread(a, sizeof(*(a)), n, f) != n) {fprintf(stderr, "weird format in %s\n", fname); goto err; }
  
  int n = 0, na = 0;
  int d = -1;
  unsigned char * v = NULL; 
  float * meta = NULL;

  for(;;) {
    float buf[9];
    int header_read = fread(buf, 1, sizeof(buf), f);

    if(header_read == 0 && feof(f)) break;
    else if(header_read != sizeof(buf)) {
      fprintf(stderr, "bvecs_new_from_siftgeo: error in point header in %s\n", fname); 
      goto err;
    }

    int d2; 
    READANDCHECK(&d2, 1)
    if(n == 0) {
      if(!(d2 >= 0 && d2 < 100000)) {
        fprintf(stderr, "bvecs_new_from_siftgeo: weird descriptor dim %d in %s\n", d2, fname); 
        goto err;        
      }        
      d = d2;
    }
    else if(d2 != d) {
      fprintf(stderr, "bvecs_new_from_siftgeo: weird dim in %s (expect %d found %d)\n", fname, d, d2); 
      goto err;
    } 
      
    if(n >= na) {
      na = na == 0 ? 512 : na*3/2;
      if(meta_out) meta = realloc(meta, sizeof(float) * 9 * na);
      v = realloc(v, d * sizeof(float) * na); 
    }
    
    if(meta_out) memcpy(meta + 9 * n, buf, sizeof(buf));
    
    READANDCHECK(v + d * n, d);
    
    n++;
  }
#undef READANDCHECK

  fclose(f); 

  *d_out = d; 
  *v_out = v; 
  if(meta_out) *meta_out = meta;
  if(d_meta_out) *d_meta_out = 9;
  return n;

  err: 
  fclose(f); 
  free(v); 
  free(meta); 
  *d_out = -1; 
  *v_out = NULL; 
  if(meta_out) *meta_out = NULL;
  if(d_meta_out) *d_meta_out = -1;
  return -1;
}