代码1
coco数据集过大,希望从里面挑选特定的类别,来构成测试集。
以下cocodeal.py文件能够保留coco中指定的类别数据,同时生成.xml文件。具体应用可以见代码注释。
#cocodeal.py
#本文件处理coco数据集,删除指定类别数据。要处理的目录结构如下。最后生成Annotations和images备份文件。
#并且在images_coco文件夹中是我们想要的。
# 如下是必须需要的目录或文件,其中annotations存着.xml文件,images下的train2014和val2014存着.jpg文件,labels下的train2014和val2014存着.txt文件信息
# ├── coco
# │ ├── annotations # 里面是*.xml
# │ ├── images
# │ │ ├── train2014 # 里面是*.jpg
# │ │ └── val2014 # 里面是*.jpg
# │ └── labels
# │ ├── train2014 # 里面是*.txt
# │ └── val2014 # 里面是*.txt
# |—— cocodeal.py # 本文件
#生成annotations_filtered和images_filtered文件夹
from pycocotools.coco import COCO
import os
import shutil
from tqdm import tqdm
import skimage.io as io
import matplotlib.pyplot as plt
import cv2
from PIL import Image, ImageDraw, ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
#if the dir is not exists,make it,else delete it
def mkr(path):
if os.path.exists(path):
shutil.rmtree(path)
os.mkdir(path)
else:
os.mkdir(path)
###########################修改以下参数适配路径
#the path you want to save your results for coco to voc
savepath="" # 保存的路径
img_dir = savepath+'images_filtered/' # 保存图片的文件夹路径
mkr(img_dir)
anno_dir = savepath+'annotations_filtered/' # 保存xml的文件夹路径
mkr(anno_dir)
datasets_list=['train2014', 'val2014'] # 与 coco/images里的两个文件夹名一致
# datasets_list=['train2014']
# datasets_list = ['val2017']
# 你需要挑出的类的名称
classes_names = ["elephant"] # 要保留的类别list
#Store annotations and train2014/val2014/... in this folder
dataDir = 'coco' # coco数据集所在的位置。本文件与该文件夹在同一级目录下
####################