From 2c6d4ba1d5cffd26c5c9527175d565a81226e18d Mon Sep 17 00:00:00 2001
From: Joseph Redmon <pjreddie@gmail.com>
Date: Wed, 19 Feb 2014 21:41:44 +0000
Subject: [PATCH] Single image feature extraction for VOC

---
 src/tests.c |   65 +++++++++++++++++++++++++++++++-
 1 files changed, 62 insertions(+), 3 deletions(-)

diff --git a/src/tests.c b/src/tests.c
index 07f5287..c72e900 100644
--- a/src/tests.c
+++ b/src/tests.c
@@ -497,10 +497,68 @@
     }
 }
 
+void features_VOC_image(char *image_file, char *image_dir, char *out_dir)
+{
+    int i,j;
+    network net = parse_network_cfg("cfg/voc_features.cfg");
+    char image_path[1024];
+    sprintf(image_path, "%s%s",image_dir, image_file);
+    char out_path[1024];
+    sprintf(out_path, "%s%s.txt",out_dir, image_file);
+    printf("%s\n", image_file);
+    FILE *fp = fopen(out_path, "w");
+    if(fp == 0) file_error(out_path);
+
+    IplImage* src = 0;
+    if( (src = cvLoadImage(image_path,-1)) == 0 ) file_error(image_path);
+    int w = src->width;
+    int h = src->height;
+    int sbin = 8;
+    int interval = 10;
+    double scale = pow(2., 1./interval);
+    int m = (w<h)?w:h;
+    int max_scale = 1+floor((double)log((double)m/(5.*sbin))/log(scale));
+    image *ims = calloc(max_scale+interval, sizeof(image));
+
+    for(i = 0; i < interval; ++i){
+        double factor = 1./pow(scale, i);
+        double ih =  round(h*factor);
+        double iw =  round(w*factor);
+        int ex_h = round(ih/4.) - 2;
+        int ex_w = round(iw/4.) - 2;
+        ims[i] = features_output_size(net, src, ex_h, ex_w);
+
+        ih =  round(h*factor);
+        iw =  round(w*factor);
+        ex_h = round(ih/8.) - 2;
+        ex_w = round(iw/8.) - 2;
+        ims[i+interval] = features_output_size(net, src, ex_h, ex_w);
+        for(j = i+interval; j < max_scale; j += interval){
+            factor /= 2.;
+            ih =  round(h*factor);
+            iw =  round(w*factor);
+            ex_h = round(ih/8.) - 2;
+            ex_w = round(iw/8.) - 2;
+            ims[j+interval] = features_output_size(net, src, ex_h, ex_w);
+        }
+    }
+    for(i = 0; i < max_scale+interval; ++i){
+        image out = ims[i];
+        fprintf(fp, "%d, %d, %d\n",out.c, out.h, out.w);
+        for(j = 0; j < out.c*out.h*out.w; ++j){
+            if(j != 0)fprintf(fp, ",");
+            fprintf(fp, "%g", out.data[j]);
+        }
+        fprintf(fp, "\n");
+        free_image(out);
+    }
+    free(ims);
+    fclose(fp);
+    cvReleaseImage(&src);
+}
+
 int main(int argc, char *argv[])
 {
-    int part = atoi(argv[1]);
-    int total = atoi(argv[2]);
     //feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
 
     //test_blas();
@@ -511,7 +569,8 @@
     //test_nist();
     //test_full();
     //train_VOC();
-    features_VOC(part, total);
+    features_VOC_image(argv[1], argv[2], argv[3]);
+    printf("Success!\n");
     //test_random_preprocess();
     //test_random_classify();
     //test_parser();

--
Gitblit v1.10.0