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
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
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
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
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
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
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])