def rebuild_load_data(): normal_videos = read_file( os.path.join(constants.PATH_UCFCRIME2LOCAL_README, 'normal_videos.txt')) normal_videos_from_anormal = read_file( os.path.join(constants.PATH_UCFCRIME2LOCAL_README, 'normal_videos_from_anormal.txt')) anomaly_normal = read_file( os.path.join(constants.PATH_UCFCRIME2LOCAL_README, 'anomaly_normal.txt')) violence_videos = read_file( os.path.join(constants.PATH_UCFCRIME2LOCAL_README, 'violence_videos.txt')) X, y, numFrames = [], [], [] ll = [violence_videos, anomaly_normal] llabels = [1, 0] for i, videos_list in enumerate(ll): for v_video in videos_list: if llabels[i] == 1: v_path = os.path.join( constants.PATH_UCFCRIME2LOCAL_FRAMES_VIOLENCE, v_video) else: v_path = os.path.join( constants.PATH_UCFCRIME2LOCAL_FRAMES_NONVIOLENCE, v_video) l_frames = os.listdir(v_path) X.append(v_video) y.append(llabels[i]) numFrames.append(len(l_frames)) save_csvfile_multicolumn( zip(X, y, numFrames), os.path.join(constants.PATH_UCFCRIME2LOCAL_README, 'All_data.txt')) return X, y, numFrames
def crime2localgGetSplit(X, y, numFrames, splits=5): # print(X) kfold = KFold(splits, shuffle=True) if not os.path.exists( os.path.join(constants.PATH_UCFCRIME2LOCAL_README, 'fold-1-train.txt')): for i, (train_idx, test_idx) in enumerate(kfold.split(X)): save_file( train_idx, os.path.join(constants.PATH_UCFCRIME2LOCAL_README, 'fold-{}-train.txt'.format(i + 1))) save_file( test_idx, os.path.join(constants.PATH_UCFCRIME2LOCAL_README, 'fold-{}-test.txt'.format(i + 1))) for i in range(splits): train_idx = read_file( os.path.join(constants.PATH_UCFCRIME2LOCAL_README, 'fold-{}-train.txt'.format(i + 1))) test_idx = read_file( os.path.join(constants.PATH_UCFCRIME2LOCAL_README, 'fold-{}-test.txt'.format(i + 1))) train_idx = list(map(int, train_idx)) test_idx = list(map(int, test_idx)) yield train_idx, test_idx
def get_Fold_Data(fold): train_idx = read_file( os.path.join(constants.PATH_UCFCRIME2LOCAL_README, 'fold-{}-train.txt'.format(fold))) test_idx = read_file( os.path.join(constants.PATH_UCFCRIME2LOCAL_README, 'fold-{}-test.txt'.format(fold))) train_idx = list(map(int, train_idx)) test_idx = list(map(int, test_idx)) return train_idx, test_idx
def load_fold_data(dataset, fold): if dataset == 'hockey' or dataset == 'ucfcrime2local' or dataset == 'vif': if dataset == 'vif': folder = constants.PATH_VIF_README else: folder = constants.PATH_UCFCRIME2LOCAL_README if dataset == 'ucfcrime2local' else constants.PATH_HOCKEY_README train_idx = read_file( os.path.join(folder, 'fold_{}_train.txt'.format(fold))) test_idx = read_file( os.path.join(folder, 'fold_{}_test.txt'.format(fold))) train_idx = list(map(int, train_idx)) test_idx = list(map(int, test_idx)) return train_idx, test_idx
def hockeyTrainTestSplit(split_type, datasetAll, labelsAll, numFramesAll): train_idx = read_file( os.path.join( constants.PATH_HOCKEY_README, 'fold_{}_train.txt'.format(int(split_type[len(split_type) - 1])))) test_idx = read_file( os.path.join( constants.PATH_HOCKEY_README, 'fold_{}_test.txt'.format(int(split_type[len(split_type) - 1])))) train_idx = list(map(int, train_idx)) test_idx = list(map(int, test_idx)) train_x = list(itemgetter(*train_idx)(datasetAll)) train_y = list(itemgetter(*train_idx)(labelsAll)) train_numFrames = list(itemgetter(*train_idx)(numFramesAll)) test_x = list(itemgetter(*test_idx)(datasetAll)) test_y = list(itemgetter(*test_idx)(labelsAll)) test_numFrames = list(itemgetter(*test_idx)(numFramesAll)) return train_x, train_y, train_numFrames, test_x, test_y, test_numFrames
def k_folds(n_splits, subjects, splits_folder): """ Generates folds for cross validation Args: n_splits: folds number subjects: number of patients frames: length of the sequence of each patient """ indices = np.arange(subjects).astype(int) if n_splits == 1: for i in range(1): train, test = train_test_split(80, 20, subjects) yield train, test # indices = np.arange(subjects * frames).astype(int) else: if not os.path.exists(os.path.join(splits_folder, 'fold_1_train.txt')): # if True: for fold, test_idx in enumerate(get_indices(n_splits, subjects)): train_idx = np.setdiff1d(indices, test_idx) save_file( train_idx, os.path.join(splits_folder, 'fold_' + str(fold + 1) + '_train.txt')) save_file( test_idx, os.path.join(splits_folder, 'fold_' + str(fold + 1) + '_test.txt')) yield train_idx, test_idx else: for fold in range(n_splits): train_idx = read_file( os.path.join(splits_folder, 'fold_' + str(fold + 1) + '_train.txt')) test_idx = read_file( os.path.join(splits_folder, 'fold_' + str(fold + 1) + '_test.txt')) train_idx = list(map(int, train_idx)) test_idx = list(map(int, test_idx)) yield train_idx, test_idx
def plot_bbox_annotations(): anomaly_normal = read_file( os.path.join(constants.PATH_UCFCRIME2LOCAL_README, 'anomaly_normal.txt')) for av in anomaly_normal: v_path = os.path.join(constants.PATH_UCFCRIME2LOCAL_FRAMES_NONVIOLENCE, av) print(v_path) l_frames = os.listdir(v_path) l_frames.sort(key=lambda f: int("".join(filter(str.isdigit, f)))) av = av[:-8] bdx_file_path = os.path.join( constants.PATH_UCFCRIME2LOCAL_Txt_ANNOTATIONS, av + '.txt') data = [] with open(bdx_file_path, 'r') as file: for row in file: data.append(row.split()) # data = np.array(data) gt_bboxes = [] counter = 0 start = False end = False for i, frame_path in enumerate(l_frames): # print('------frame_path=',frame_path) pth, frame_name = os.path.split(frame_path) splits = re.split('(\d+)', frame_name) frame_number = int(splits[1]) if frame_number >= len(data): break frame_data = data[frame_number] # print('video={}, frame={}, frame_number={}, gt={}'.format(video_name, frame_name, frame_number, frame_data)) if frame_number != int(frame_data[5]): print('=========*********** Error en Ground Truth!!!!!!!!!') break x0, y0, w, h = int(frame_data[1]), int( frame_data[2]), int(frame_data[3]) - int(frame_data[1]), int( frame_data[4]) - int(frame_data[2]) gt_bboxes.append([x0, y0, w, h]) frame = cv2.imread(os.path.join(v_path, frame_path)) flac = int(frame_data[6]) if flac == 0: cv2.rectangle(frame, (x0, y0), (x0 + w, y0 + h), (0, 255, 0), 2) cv2.imshow("frame", frame) key = cv2.waitKey(0)
def temporal_cut_long_videos(): anomaly_normal = read_file( os.path.join(constants.PATH_UCFCRIME2LOCAL_README, 'anomaly_normal.txt')) for av in anomaly_normal: v_path = os.path.join(constants.PATH_UCFCRIME2LOCAL_FRAMES_NONVIOLENCE, av) print(v_path) l_frames = os.listdir(v_path) l_frames.sort(key=lambda f: int("".join(filter(str.isdigit, f)))) bdx_file_path = os.path.join( constants.PATH_UCFCRIME2LOCAL_Txt_ANNOTATIONS, av + '.txt') data = [] with open(bdx_file_path, 'r') as file: for row in file: data.append(row.split()) # data = np.array(data) gt_bboxes = [] anomaly_clips = [] counter = 0 start = False end = False clip_frames = [] counter = 0 for i, frame_path in enumerate(l_frames): # print('------frame_path=',frame_path) pth, frame_name = os.path.split(frame_path) splits = re.split('(\d+)', frame_name) frame_number = int(splits[1]) if frame_number >= len(data): break frame_data = data[frame_number] # print('video={}, frame={}, frame_number={}, gt={}'.format(video_name, frame_name, frame_number, frame_data)) if frame_number != int(frame_data[5]): print('=========*********** Error en Ground Truth!!!!!!!!!') break x0, y0, w, h = int(frame_data[1]), int( frame_data[2]), int(frame_data[3]) - int(frame_data[1]), int( frame_data[4]) - int(frame_data[2]) gt_bboxes.append([x0, y0, w, h]) # frame = cv2.imread(os.path.join(v_path,frame_path)) flac = int(frame_data[6]) if flac == 0: # cv2.rectangle(frame, (x0, y0),(x0+w, y0+h), (0,255,0), 2) clip_frames.append(os.path.join(v_path, frame_path)) if not start: # print('================') # clip_frames.append(os.path.join(v_path,frame_path)) start = True elif start: end = True start = False # for f in clip_frames: # print(f) anomaly_clips.append(clip_frames) counter += 1 f_name = av + '-VSplit-' + str(counter) if not os.path.isdir( os.path.join( constants.PATH_UCFCRIME2LOCAL_FRAMES_NONVIOLENCE, f_name)): os.mkdir( os.path.join( constants.PATH_UCFCRIME2LOCAL_FRAMES_NONVIOLENCE, f_name)) for fimg in clip_frames: newPath = shutil.copy( fimg, os.path.join( constants.PATH_UCFCRIME2LOCAL_FRAMES_NONVIOLENCE, f_name)) clip_frames = []
def customize_kfold(n_splits, dataset, X, y, shuffle=True): # def customize_kfold(n_splits, dataset, shuffle=True): # X=np.arange(X_len) if dataset == 'hockey' or dataset == 'ucfcrime2local': kfold = StratifiedKFold(n_splits, shuffle=shuffle) folder = constants.PATH_UCFCRIME2LOCAL_README if dataset == 'ucfcrime2local' else constants.PATH_HOCKEY_README if not os.path.exists(os.path.join(folder, 'fold_1_train.txt')): # X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) for i, (train_idx, test_idx) in enumerate(kfold.split(X, y)): save_file( train_idx, os.path.join(folder, 'fold_{}_train.txt'.format(i + 1))) save_file( test_idx, os.path.join(folder, 'fold_{}_test.txt'.format(i + 1))) for i in range(n_splits): train_idx = read_file( os.path.join(folder, 'fold_{}_train.txt'.format(i + 1))) test_idx = read_file( os.path.join(folder, 'fold_{}_test.txt'.format(i + 1))) train_idx = list(map(int, train_idx)) test_idx = list(map(int, test_idx)) yield train_idx, test_idx elif dataset == 'vif': splitsLen = [] folder = os.path.join(constants.PATH_VIF_README) if not os.path.exists(os.path.join(folder, 'fold_1_train.txt')): if not os.path.exists(os.path.join(folder, 'lengths.txt')): for fold in range(n_splits): violence_path = os.path.join(constants.PATH_VIF_FRAMES, str(fold + 1), 'Violence') non_violence_path = os.path.join(constants.PATH_VIF_FRAMES, str(fold + 1), 'NonViolence') violence_videos = os.listdir(violence_path) non_violence_videos = os.listdir(non_violence_path) splitsLen.append( len(violence_videos) + len(non_violence_videos)) save_file(splitsLen, os.path.join(folder, 'lengths.txt')) else: splitsLen = read_file(os.path.join(folder, 'lengths.txt')) splitsLen = list(map(int, splitsLen)) for i, l in enumerate(splitsLen): end = np.sum(splitsLen[:(i + 1)]) start = end - splitsLen[i] test_idx = np.arange(start, end) train_idx = np.arange(0, start).tolist() + np.arange( end, len(X)).tolist() if shuffle: random.shuffle(train_idx) random.shuffle(test_idx) save_file( train_idx, os.path.join(folder, 'fold_{}_train.txt'.format(i + 1))) save_file( test_idx, os.path.join(folder, 'fold_{}_test.txt'.format(i + 1))) for i in range(n_splits): train_idx = read_file( os.path.join(folder, 'fold_{}_train.txt'.format(i + 1))) test_idx = read_file( os.path.join(folder, 'fold_{}_test.txt'.format(i + 1))) train_idx = list(map(int, train_idx)) test_idx = list(map(int, test_idx)) yield train_idx, test_idx elif dataset == 'rwf-2000': train_idx, test_idx = [], [] for i in range(1): yield train_idx, test_idx