#include <stdio.h>
#include "dirent.h"
#include <cstring>
#include <cstdlib>
#include <stdlib.h>
/*
typedef struct _Position {
int left;
int top;
int right;
int bottom;
}Position;
typedef struct _Obj_Data {
Position pos;
float prob;
}Obj_Data;
typedef struct {
int id;
Position pos;
int reserve[4];
}Track_Info;
*/
/*
数据格式:
000001.txt
000002.txt
000003.txt
000001.txt内文件格式
left top right bottom 2048dims
left top right bottom 2048dims
left top right bottom 2048dims
*/
int main()
{
//不按顺序排序进行遍历文件
// int i = 0;
// int filesize = 0;
// DIR *dir = NULL;
// struct dirent *entry;
// if((dir = opendir(FilePath))==NULL)
// {
// printf("opendir failed!");
// return -1;
// }
// else
// {
// while(entry=readdir(dir))
// {
// if(!strcmp(".",entry->d_name) || !strcmp("..",entry->d_name))
// continue;
// i++;
// printf("filename%d = %s ",i,entry->d_name); //输出文件或者目录的名称
// printf("filetype = %d\n",entry->d_type); //输出文件类型
// }
// closedir(dir);
// }
// return 0;
///按顺序排序进行遍历文件
Obj_Data Detection[100]; //支持最多100个目标
int mot_17_train[7] = {2,4,5,9,10,11,13};
int mot_20_train[4] = {1,2,3,5};
int mot_17_train_cnt = sizeof(mot_17_train) / sizeof(mot_17_train[0]);
int mot_20_train_cnt = sizeof(mot_20_train) / sizeof(mot_20_train[0]);
for(int i=0;i<mot_17_train_cnt;i++)
{
char FilePath[256];
sprintf(FilePath, "/home/ronales/mot_16_17_20data/MOT17/train/MOT17-%02d-DPM/yolox_det_reid/", mot_17_train[i]);
printf("%s\n",FilePath );
char ResFilePath[256];
sprintf(ResFilePath, "/home/ronales/mot_16_17_20data/MOT17/train/MOT17-%02d-DPM/MOT17-%02d-DPM-TrackRes.txt", mot_17_train[i],mot_17_train[i]);
printf("%s\n",ResFilePath );
FILE *res_fp = fopen(ResFilePath,"w");
struct dirent **namelist;
int n;
n = scandir(FilePath,&namelist,0,alphasort);
char fullname[312] ="";
if(n < 0)
{
printf("No File return; total number is : %d", n );
}
else
{
int index=0;
FILE *fp;
int current_frame = 1;
while(index < n)
{
//过滤掉目录里的. 和 ..文件名
if(!strcmp(".",namelist[index]->d_name) || !strcmp("..",namelist[index]->d_name))
{
index++;
continue;
}
// printf("d_ino:%ld d_off:%ld d_name: %s\n", namelist[index]->d_ino,namelist[index]->d_off,namelist[index]->d_name);
sprintf(fullname, "%s%s", FilePath, namelist[index]->d_name);
printf("%s\n", fullname);
int totalnum_perframe = 0;
if( (fp=fopen(fullname,"rb")) == NULL )
{
printf("Fail to open file!\n");
exit(0); //退出程序(结束程序)
}
//每个文件对应该帧所有的定位信息与特征
char delim[] = " ";
char textline[50024];
Obj_Data bbox[100];
float feature[100][FEATURE_SIZE];
Track_Info tracks[100];
//循环读取文件的每一行数据
while( fgets(textline, sizeof(textline), fp) != NULL )
{
// printf("%s", textline);
char *token= strtok(textline,delim);
bbox[totalnum_perframe].pos.left = atoi(token);
token = strtok(NULL, delim); bbox[totalnum_perframe].pos.top = atoi(token);
token = strtok(NULL, delim); bbox[totalnum_perframe].pos.right = atoi(token);
token = strtok(NULL, delim); bbox[totalnum_perframe].pos.bottom = atoi(token);
token = strtok(NULL, delim); bbox[totalnum_perframe].prob = atof(token);
for (int j = 0; j < FEATURE_SIZE; j++)
{
token = strtok(NULL, delim);
// printf(" %f",atof(token) );
feature[totalnum_perframe][j] = atof(token);
}
//当前帧检测到的目标数量
totalnum_perframe++;
}
printf("current number is %d \n", totalnum_perframe);
printf("########################################\n");
// IVS_API int IVS_CALL Get_MOT_TracksResults(IN int ch_handle, IN const Obj_Data objBuf[], IN float feature[][FEATURE_SIZE], INOUT Track_Info track[], int count);
///to do somethings///
// int res_cnt = 0;
// res_cnt = Get_MOT_TracksResults(0, bbox, feature, tracks, totalnum_perframe);
for (int i = 0; i < totalnum_perframe ; ++i)
{
tracks[i].reserve[0] = -1;
tracks[i].reserve[1] = -1;
tracks[i].reserve[2] = -1;
tracks[i].reserve[3] = -1;
int left = tracks[i].pos.left;
int top = tracks[i].pos.top;
int width = tracks[i].pos.right - tracks[i].pos.left;
int height = tracks[i].pos.bottom - tracks[i].pos.top;
fprintf(res_fp,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n" ,current_frame,tracks[i].id,left,top,width,height,tracks[i].reserve[0],tracks[i].reserve[1],tracks[i].reserve[2],tracks[i].reserve[3]);
}
current_frame++;
//操作结束后关闭文件
fclose(fp);
free(namelist[index]);
index++;
}
free(namelist);
}
fclose(res_fp);
//exit(0);
}
}
【C语言】遍历文件夹所有目录下的文件,并读取、处理与存储
于 2022-04-19 16:02:16 首次发布