1. 修改 void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filename, float thresh, float hier_thresh, char *outfile, int fullscreen) ( 在 ./example/detector.c)

set_init_filename(filename, "01451");  // 額外添加, 01451 為起始編號-1
while(1){

/*if(filename){    // 這段註解掉,因為我們要設定自己的 filename
            strncpy(input, filename, 256);
        } else {
            printf("Enter Image Path: ");
            fflush(stdout);
            input = fgets(input, 256, stdin);
            if(!input) return;
            strtok(input, "\n");
        }*/ 

set_filename(filename);  // 設定下一個的 filename

...

if(out_file){
   ...
}
else{
   save_image(im, "predictions");
   char filename_copy[0x100];
   strcpy(filename_copy, filename);
   save_xml_data(im, filename_copy, names, dets, nboxes, thresh); // 添加這行,用來存 xml 檔
   free_detections(dets, nboxes);
}

//if (filename) break;  // 只判別一個 file . 註解掉不會進入無窮迴圈嗎?會阿,ctrl c 就好了,不然自己添加終止條件
}


}

2. 添加在 test_detector 上方

void save_xml_data(image im, char *filename, char **names, detection *dets, int num, float thresh)
{
    int i = strlen(filename), j;
    filename[i-4] = 0;

    char buff_name[256];
    sprintf(buff_name, "./MyData/Annotations/%s.xml", filename);

    FILE *fp;
    fp = fopen(buff_name, "w+");   

    int width = 640;
    int height = 480;        
    
    char prefix[0x400];
    char object[0x400];
    char suffix[0x400] = "</annotation>";
    
    sprintf(prefix, "<annotation><folder>JPEGImages</folder><filename>%s.jpg</filename><path>/home/xavier/Desktop/Project/training_data/Image/%1$s.jpg</path><source><database>Unknown</database></source><size><width>%d</width><height>%d</height><depth>3</depth></size><segmented>0</segmented>", filename, width, height);


    fputs(prefix, fp);

    for(i = 0; i<num; i++)
        for(j = 0; j<5; j++){
            if( dets[i].prob[j] > thresh){
                box b = dets[i].bbox;
                int left  = (b.x-b.w/2.)*im.w;
                int right = (b.x+b.w/2.)*im.w;
                int top   = (b.y-b.h/2.)*im.h;
                int bot   = (b.y+b.h/2.)*im.h;
                sprintf(object, "<object><name>%s</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>%d</xmin><ymin>%d</ymin><xmax>%d</xmax><ymax>%d</ymax></bndbox></object>", names[j], left, top, right, bot);
                fputs(object, fp);
            }
    }
    fputs(suffix, fp);
    fclose(fp);
}

void set_init_filename(char *filename, char *start_point)
{
    sprintf(filename, "./MyData/JPEGImages/%s.jpg", start_point); 
}


void set_filename(char *filename)
{
    int len = strlen(filename);
    filename[len - 5]++; //.jpg\0

    int i;
    for(i = len-5; i>=len-8; i--)
        if(filename[i] > '9'){
            filename[i] = '0';
            filename[i-1]++;
        }else break;
}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大神(偽) 的頭像
    大神(偽)

    大神的世界

    大神(偽) 發表在 痞客邦 留言(0) 人氣()