-
Notifications
You must be signed in to change notification settings - Fork 8
/
separate_by_class.py
67 lines (55 loc) · 1.92 KB
/
separate_by_class.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
####This script is used to separate out the dataset into different folders by classes
import os
import numpy as np
import pandas as pd
import re
import shutil
##### For all paths
csv_path = "./DL_info.csv"
Image_slices_dir = "/home/weilunhuang/faster-rcnn-pytorch/VOC2007/JPEGImages"
Anno_slices_dir = "/home/weilunhuang/faster-rcnn-pytorch/VOC2007/Annotations"
ImageSet_slices_dir = "/home/weilunhuang/faster-rcnn-pytorch/VOC2007/ImageSets/Main"
root_dir="/home/weilunhuang/Data"
###create dict for 8 classes
dest_dir={};
for i in range(1,9):
sub_path="/class"+str(i);
dest_dir[i]={};
#3 folders for JPEG, Annotations, ImageSets
dest_dir[i]['jpeg']=root_dir+sub_path+'/JPEGImages';
dest_dir[i]['annotation']=root_dir+sub_path+'/Annotations';
dest_dir[i]['imagesets']=root_dir+sub_path+'/ImageSets/Main';
###df stuff
df = pd.read_csv(csv_path)
test_df = df[df['Train_Val_Test']==3];
df_dic={};
for i in range(1,9):
df_dic[i]=test_df[df['Coarse_lesion_type']==i];
###separate images and annotations
for i in range(1,9):
for j in range(len(df_dic[i].index)):
#debug
#if j>0:
# break;
#jpeg
file_name = os.path.join(Image_slices_dir, df_dic[i].iloc[j]['File_name'])
print (file_name)
shutil.copy(file_name, dest_dir[i]['jpeg'])
#xml
file_name = os.path.join(Anno_slices_dir, df_dic[i].iloc[j]['File_name'])
file_name,_=os.path.splitext(file_name)
file_name=file_name+'.xml'
print(file_name);
shutil.copy(file_name, dest_dir[i]['annotation'])
###separate imagesets, for test dataset
for i in range(1,9):
#debug
#if i>1:
# break;
path=dest_dir[i]['imagesets']+'/test.txt'
file = open(path,"w") ;
for j in range(len(df_dic[i].index)):
idx=df_dic[i].iloc[j]['File_name'];
idx,_=os.path.splitext(idx)
file.write(idx+'\n');
file.close();