convert_voc2012.py 2.9 KB
Newer Older
W
wuyefeilin 已提交
1 2
# coding: utf8
# Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserve.
3
#
W
wuyefeilin 已提交
4
# Licensed under the Apache License, Version 2.0 (the "License");
5 6 7
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
W
wuyefeilin 已提交
8
#    http://www.apache.org/licenses/LICENSE-2.0
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import sys
import os
import numpy as np
import os
from PIL import Image
import glob

LOCAL_PATH = os.path.dirname(os.path.abspath(__file__))
W
wuyefeilin 已提交
24 25


26 27 28 29 30 31 32 33 34 35
def remove_colormap(filename):
    gray_anno = np.array(Image.open(filename))
    return gray_anno


def save_annotation(annotation, filename):
    annotation = annotation.astype(dtype=np.uint8)
    annotation = Image.fromarray(annotation)
    annotation.save(filename)

W
wuyefeilin 已提交
36

37 38 39 40 41 42 43 44 45 46 47 48 49
def convert_list(origin_file, seg_file, output_folder):
    with open(seg_file, 'w') as fid_seg:
        with open(origin_file) as fid_ori:
            lines = fid_ori.readlines()
            for line in lines:
                line = line.strip()
                line = '.'.join([line, 'jpg'])
                img_name = os.path.join("JPEGImages", line)
                line = line.replace('jpg', 'png')
                anno_name = os.path.join(output_folder.split(os.sep)[-1], line)
                new_line = ' '.join([img_name, anno_name])
                fid_seg.write(new_line + "\n")

W
wuyefeilin 已提交
50

51 52 53 54 55 56 57 58 59 60 61
if __name__ == "__main__":
    pascal_root = "./VOCtrainval_11-May-2012/VOC2012"
    pascal_root = os.path.join(LOCAL_PATH, pascal_root)
    seg_folder = os.path.join(pascal_root, "SegmentationClass")
    txt_folder = os.path.join(pascal_root, "ImageSets/Segmentation")
    train_path = os.path.join(txt_folder, "train.txt")
    val_path = os.path.join(txt_folder, "val.txt")
    trainval_path = os.path.join(txt_folder, "trainval.txt")

    # 标注图转换后存储目录
    output_folder = os.path.join(pascal_root, "SegmentationClassAug")
W
wuyefeilin 已提交
62

63 64 65 66 67 68 69 70 71 72 73 74
    print("annotation convert and file list convert")
    if not os.path.exists(os.path.join(LOCAL_PATH, output_folder)):
        os.mkdir(os.path.join(LOCAL_PATH, output_folder))
    annotation_names = glob.glob(os.path.join(seg_folder, '*.png'))
    for annotation_name in annotation_names:
        annotation = remove_colormap(annotation_name)
        filename = os.path.basename(annotation_name)
        save_name = os.path.join(output_folder, filename)
        save_annotation(annotation, save_name)

    convert_list(train_path, train_path.replace('txt', 'list'), output_folder)
    convert_list(val_path, val_path.replace('txt', 'list'), output_folder)
W
wuyefeilin 已提交
75 76
    convert_list(trainval_path, trainval_path.replace('txt', 'list'),
                 output_folder)