Ejemplo n.º 1
0
def move_test_data_set(dir):
    # read test data list
    front_name_set = set(
        pb.scan_text(os.path.join(dir, 'ImageSets', 'Main', 'test.txt')))
    if len(front_name_set) == 0:
        return
    # make save path
    save_root_path = os.path.join(dir, 'test_part')
    save_jpg_path = os.path.join(save_root_path, 'JPEGImages')
    save_xml_path = os.path.join(save_root_path, 'Annotations')
    pb.makedirs(save_jpg_path)
    pb.makedirs(save_xml_path)
    if os.path.isdir(save_jpg_path) == False or os.path.isdir(
            save_xml_path) == False:
        print('Move test data to {0} is not allowed'.format(save_root_path))

    # read all voc data list
    jpg_path = os.path.join(dir, 'JPEGImages')
    xml_path = os.path.join(dir, 'Annotations')
    img_exts = '.jpg.jpeg.png.JPG.JPEG.PNG'
    pairs,o1,o2 = pb.scan_pair(jpg_path, xml_path, img_exts, '.xml',\
                                with_root_dir=False, \
                                with_ext=True)
    pairs_front_name = {pb.splitext(p[0])[0]: p for p in pairs}
    # moving
    print('Moving test data to {0} ......'.format(save_root_path))
    for front_name in tqdm.tqdm(front_name_set):
        p = pairs_front_name[front_name]
        jpg_full_path = os.path.join(jpg_path, p[0])
        xml_full_path = os.path.join(jpg_path, p[1])
        shutil.move(jpg_full_path, save_jpg_path)
        shutil.move(xml_full_path, save_xml_path)
    return
Ejemplo n.º 2
0
def decode_one_video(param):
    video_path = param[0]
    save_dir = param[1]
    begin_index = param[2]
    ext = param[3]
    img_resizer_param = param[4]
    #if img_resizer_param is None:
    #    img_resizer = None
    #else:
    #    rtype = img_resizer_param['rtype']
    #    dsize = img_resizer_param['dsize']
    #    interpolation = img_resizer_param['interpolation']
    #    img_resizer = pb.img.imResizer(rtype,dsize,interpolation)
    video_full_name = os.path.basename(video_path)
    video_front_name, _ = pb.splitext(video_full_name)
    save_full_name = video_front_name + '_{0}' + ext
    save_full_dir = os.path.join(save_dir, video_front_name)
    pb.makedirs(save_full_dir)
    common_save_path = os.path.join(save_full_dir, save_full_name)
    cap = cv2.VideoCapture(video_path)
    if cap.isOpened():
        index = begin_index
        ret, img = cap.read()
        while ret:
            save_path = common_save_path.format(index)
            if img_resizer_param is None:
                pass
            else:
                dsize = img_resizer_param['dsize']
                interpolation = img_resizer_param['interpolation']
                rtype = img_resizer_param['rtype']
                img = pb.img.imResize(img,
                                      dsize,
                                      interpolation=interpolation,
                                      rtype=rtype)
            #if img_resizer is not None:
            #    img = img_resizer.imResize(img)
            cv2.imwrite(save_path, img)
            ret, img = cap.read()
            index += 1
        print('{0}  -->  save {1} ({2}~{3}) frames.'.format(
            video_full_name, index - begin_index, begin_index, index - 1))
    else:
        print(video_full_name + '  -->  open fail.')
    return
Ejemplo n.º 3
0
def cut_voc(voc_root_path, rate=None):
    rate = 0 if rate is None else float(rate)
    jpeg_path = os.path.join(voc_root_path, 'JPEGImages')
    anno_path = os.path.join(voc_root_path, 'Annotations')
    pairs, others_in_jpeg, others_in_anno = pb.scan_pair(
        jpeg_path, anno_path, '.jpg.jpeg.JPG.JPEG', '.xml', True, True)
    save_root_path = os.path.join(voc_root_path, 'cutVoc')
    #TODO: to speed up
    save_path_dict = {}
    for img_path, xml_path in tqdm.tqdm(pairs, ncols=55):
        #read
        xml = pb.voc.xml_read(xml_path)
        if len(xml.objs) == 0:
            continue
        img = cv2.imread(img_path)
        #cut and save
        objs_index = 10000
        img_front_name = pb.splitext(os.path.basename(xml_path))[0]
        for obj in xml.objs:
            obj_save_path = save_path_dict.get(obj.name)
            if obj_save_path is None:
                obj_save_path = os.path.join(save_root_path, obj.name)
                pb.makedirs(obj_save_path)
                save_path_dict[obj.name] = obj_save_path
            #broaden bndbox
            obj_w = obj.xmax + 1 - obj.xmin
            obj_h = obj.ymax + 1 - obj.ymin
            obj.xmin = max(0, int(obj.xmin - obj_w * rate))
            obj.ymin = max(0, int(obj.ymin - obj_h * rate))
            obj.xmax = min(img.shape[1] - 1, int(obj.xmax + obj_w * rate))
            obj.ymax = min(img.shape[0] - 1, int(obj.ymax + obj_h * rate))
            img_obj = img[obj.ymin:obj.ymax + 1, obj.xmin:obj.xmax + 1]
            save_full_name = '{0}_{1}.jpg'.format(img_front_name, objs_index)
            obj_save_full_path = os.path.join(obj_save_path, save_full_name)
            if cv2.imwrite(obj_save_full_path, img_obj) == False:
                print('Fail to save: \"{0}\", shape={1}'.format(
                    obj_save_full_path, img_obj.shape))
            objs_index += 1
    return
Ejemplo n.º 4
0
def move_files(source_dir, begin, args_format, args_quiet):
    save_dir, name_format = os.path.split(args.format)
    if save_dir == '' and args_quiet:
        print('You are going to cover the source files. Continue? [Y/N]?')
        str_in = input()
        if (str_in != 'Y' and str_in != 'y'):
            sys.exit('user quit')
    save_dir = source_dir if save_dir == '' else save_dir
    pb.makedirs(save_dir)
    # scan
    files = pb.scan_file(source_dir, with_root_dir=False, with_ext=True)
    name_list = make_move_list(name_format, begin, len(files))
    if len(name_list) == 0:
        return
    # move to tmp file
    tmp_save_path_list = []
    file_ext_list = []
    for file_full_name in files:
        file_front_name, file_ext = pb.splitext(file_full_name)
        read_path = os.path.join(source_dir, file_full_name)
        while 1:
            save_path = os.path.join(
                save_dir, '{0}{1}'.format(str(random.random())[2:], file_ext))
            if not os.path.isfile(save_path):
                break
        tmp_save_path_list.append(save_path)
        file_ext_list.append(file_ext)
        shutil.move(read_path, save_path)
    # move to dir
    for read_path, file_ext, name in zip(tmp_save_path_list, file_ext_list,
                                         name_list):
        save_path = os.path.join(save_dir, '{0}{1}'.format(name, file_ext))
        shutil.move(read_path, save_path)
    try:
        os.rmdir(source_dir)
    except Exception as e:
        pass
    return
Ejemplo n.º 5
0
def remake_xml(voc_root_path, save_root_path=None):
    cut_dir = os.path.join(voc_root_path, 'cutVoc')
    if os.path.isdir(cut_dir) == False:
        raise ValueError('No cutVoc folder in: {0}'.format(voc_root_path))
    all_cut_file = pb.deep_scan_file(cut_dir, '.jpg', False, False)
    boxes_label = dict()
    for f in all_cut_file:
        l, n = os.path.split(f)
        boxes_label[n] = l

    anno_path = os.path.join(voc_root_path, 'Annotations')
    all_xml_path = pb.scan_file(anno_path, '.xml', True, True)

    if save_root_path is None:
        save_root_path = os.path.join(voc_root_path, 'Annotations_remade')
    pb.makedirs(save_root_path)
    #TODO: to speed up
    for xml_path in tqdm.tqdm(all_xml_path, ncols=55):
        #read
        xml = pb.voc.xml_read(xml_path)
        xml_full_name = os.path.basename(xml_path)
        img_front_name = pb.splitext(xml_full_name)[0]
        objs_index = 10000 + len(xml.objs) - 1
        for i in range(len(xml.objs) - 1, -1, -1):
            obj = xml.objs[i]
            save_front_name = '{0}_{1}'.format(img_front_name, objs_index)
            changed_label = boxes_label.get(save_front_name)
            if changed_label is None:
                xml.objs.pop(i)
            else:
                obj.name = changed_label
            objs_index -= 1
        if len(xml.objs) != 0:
            xml_full_path = os.path.join(save_root_path, xml_full_name)
            pb.voc.xml_write(xml_full_path, xml)
        else:
            print('Not remake no object xml: \"{0}\"'.format(xml_full_name))
    return
Ejemplo n.º 6
0
def move_voc(source_dir, begin, args_format, args_quiet):
    save_dir, name_format = os.path.split(args.format)
    if save_dir == '' and args_quiet:
        print('You are going to cover the source voc. Continue? [Y/N]?')
        str_in = input()
        if (str_in != 'Y' and str_in != 'y'):
            sys.exit('user quit')
    save_dir = source_dir if save_dir == '' else save_dir
    save_jpg_dir = os.path.join(save_dir, 'JPEGImages')
    save_xml_dir = os.path.join(save_dir, 'Annotations')
    pb.makedirs(save_jpg_dir)
    pb.makedirs(save_xml_dir)
    jpg_dir = os.path.join(source_dir, 'JPEGImages')
    xml_dir = os.path.join(source_dir, 'Annotations')
    # scan
    relative_pairs, o1, o2 = pb.scan_pair(jpg_dir, xml_dir,
                                          '.jpg.jpeg.JPG.JPEG', '.xml', False,
                                          True)
    if len(o1) != 0 or len(o2) != 0:
        print('There are other files not voc type...')
        for x in o1:
            print(x)
        for x in o2:
            print(x)
    name_list = make_move_list(name_format, begin, len(relative_pairs))
    if len(name_list) == 0:
        return
    # move to tmp file
    jpg_save_list = []
    xml_save_list = []
    jpg_ext_list = []
    xml_ext_list = []
    for jpg_full_name, xml_full_name in relative_pairs:
        jpg_ext = pb.splitext(jpg_full_name)[1]
        jpg_read_path = os.path.join(jpg_dir, jpg_full_name)
        while 1:
            jpg_save_path = os.path.join(
                save_jpg_dir,
                '{0}{1}'.format(str(random.random())[2:], jpg_ext))
            if not os.path.isfile(jpg_save_path):
                break
        jpg_save_list.append(jpg_save_path)
        jpg_ext_list.append(jpg_ext)
        shutil.move(jpg_read_path, jpg_save_path)

        xml_ext = pb.splitext(xml_full_name)[1]
        xml_read_path = os.path.join(xml_dir, xml_full_name)
        while 1:
            xml_save_path = os.path.join(
                save_xml_dir,
                '{0}{1}'.format(str(random.random())[2:], xml_ext))
            if not os.path.isfile(xml_save_path):
                break
        xml_save_list.append(xml_save_path)
        xml_ext_list.append(xml_ext)
        shutil.move(xml_read_path, xml_save_path)

    # move to dir
    jpg_save_list = []
    xml_save_list = []
    jpg_ext_list = []
    xml_ext_list = []
    for jpg_read_path,xml_read_path,jpg_ext,xml_ext,name in zip(jpg_save_list,\
                                                                xml_save_list,\
                                                                jpg_ext_list,\
                                                                xml_ext_list):
        jpg_save_path = os.path.join(save_jpg_dir,
                                     '{0}{1}'.format(name, jpg_ext))
        shutil.move(jpg_read_path, jpg_save_path)

        xml_save_path = os.path.join(save_xml_dir,
                                     '{0}{1}'.format(name, xml_ext))
        xml = pb.voc.xml_read(xml_read_path)
        xml.filename = name
        pb.voc.xml_write(xml_save_path, xml)
        os.remove(xml_read_path)
    # move to save_dir
    try:
        os.rmdir(jpg_dir)
    except Exception as e:
        pass
    try:
        os.rmdir(xml_dir)
    except Exception as e:
        pass
    try:
        os.rmdir(source_dir)
    except Exception as e:
        pass
    return
Ejemplo n.º 7
0
        default=3,
        type=int,
        help=
        '[0 = INTER_NEAREST] [1 = INTER_LINEAR] [2 = INTER_CUBIC] [3 = INTER_AREA] [4 = INTER_LANCZOS4], \"3\"'
    )

    parser.add_argument('--process',
                        default=int(multiprocessing.cpu_count()) - 1,
                        type=int,
                        help='use how many process, \"$core$-1\"')
    args = parser.parse_args()

    multi_param = []

    #get video list
    if os.path.isfile(args.video) and pb.splitext(args.video)[1] != '':
        cap = cv2.VideoCapture(args.video)
        if cap.isOpened() and cap.read()[0]:
            cap.release()
            multi_param.append([args.video])
    else:
        all_files = pb.scan_file(args.video, None, True, True)
        for one_file in all_files:
            # if pb.splitext(one_file)[1]!='':
            ext = pb.splitext(one_file)[1]
            if ext == '.avi' or ext == '.mp4' or ext == '.AVI' or ext == '.MP4':
                cap = cv2.VideoCapture(one_file)
                if cap.isOpened() and cap.read()[0]:
                    cap.release()
                    multi_param.append([one_file])