def valid_generator(sample_per_batch, batch_number): """ Generating validation data """ valid_image_file = [] directory = '../EgoGesture Dataset/' folder_name = [ 'SingleOneValid', 'SingleTwoValid', 'SingleThreeValid', 'SingleFourValid', 'SingleFiveValid', 'SingleSixValid', 'SingleSevenValid', 'SingleEightValid' ] for folder in folder_name: valid_image_file = valid_image_file + os.listdir(directory + folder + '/') # print(len(valid_image_file)) while True: for i in range(0, batch_number - 1): start = i * sample_per_batch end = (i + 1) * sample_per_batch x_batch = [] y_batch_prob = [] y_batch_pos = [] for n in range(start, end): image_name = valid_image_file[n] try: image, probability, position = label_generator( directory=directory, image_name=image_name, type='Valid') except cv2.error: print(image_name) continue # 1.0 Original image x_batch.append(image) y_batch_prob.append(probability) pos = np.array([ position, ] * 10) y_batch_pos.append(pos) x_batch = np.asarray(x_batch) x_batch = x_batch.astype('float32') x_batch = x_batch / 255. y_batch_prob = np.asarray(y_batch_prob) y_batch_pos = np.asarray(y_batch_pos) y_batch_pos = y_batch_pos.astype('float32') y_batch_pos = y_batch_pos / 128. y_batch = [y_batch_prob, y_batch_pos] yield (x_batch, y_batch)
def valid_generator(sample_per_batch, batch_number): """ Generating validation data """ valid_image_files = os.listdir(valid_directory) for i in range(0, 10): random.shuffle(valid_image_files) while True: for i in range(0, batch_number - 1): start = i * sample_per_batch end = (i + 1) * sample_per_batch x_batch = [] y_batch_key = [] for n in range(start, end): image_name = valid_image_files[n] # image: ndarray keypoints: ndarray but not normalized if 'TI1K' in image_name.split('_'): image, keypoints = my_label_gen( image_directory=valid_directory, label_directory=label_directory, image_name=image_name) else: image, keypoints = label_generator( image_directory=valid_directory, label_directory=label_directory, image_name=image_name) x_batch.append(image) y_batch_key.append(keypoints) im_flip, k_flip = flip_horizontal(image, keypoints) x_batch.append(im_flip) y_batch_key.append(k_flip) x_batch = np.asarray(x_batch) x_batch = x_batch.astype('float32') x_batch = x_batch / 255. y_batch_key = np.asarray(y_batch_key) y_batch_key = y_batch_key.astype('float32') y_batch_key = y_batch_key / 128. yield (x_batch, y_batch_key)
] index = 0 for i in range(0, len(prob)): output[index] = output[index] * prob[i] output[index + 1] = output[index + 1] * prob[i] index = index + 2 output = np.array(output) return image_aug, output if __name__ == '__main__': directory = '../../EgoGesture Dataset/' image_name = 'ChuangyeguBusstop_Single_Five_color_1.jpg' image, probability, position = label_generator(directory=directory, image_name=image_name, type='') """ augmentation """ image, position = rotation(image, probability, position) # image, position = translate(image, probability, position) # image, position = crop(image, probability, position) # image, position = flip_horizontal(image, probability, position) # image, position = flip_vertical(image, probability, position) # image, position = noise(image, probability, position) # image, position = salt(image, probability, position) print(probability) print(position) # draw augmented keypoints index = 0 color = [(120, 20, 240), (240, 55, 210), (240, 55, 140), (240, 75, 55),
keys_aug = np.asarray(keys_aug) return image_aug, keys_aug if __name__ == '__main__': folder_directory = '../../Dataset/Train/' label_directory = '../../Dataset/label/' image_name = 'EastLake_Single_Eight_color_4.jpg' if 'TI1K' in image_name.split('_'): image, keys = my_label_gen(image_directory=folder_directory, label_directory=label_directory, image_name=image_name) else: image, keys = label_generator(image_directory=folder_directory, label_directory=label_directory, image_name=image_name) image, k = rotation(image, keys) # image, k = translate(image, keys) # image, k = crop(image, keys) # image, k = flip_horizontal(image, keys) # image, k = flip_vertical(image, keys) # image, k = noise(image, keys) # image, k = salt(image, keys) image = cv2.circle(image, (int(k[0]), int(k[1])), 5, (0, 0, 255), -1) image = cv2.circle(image, (int(k[2]), int(k[3])), 5, (0, 255, 0), -1) cv2.imshow('', image) while True:
import cv2 from preprocess.datagen import label_generator, my_label_gen def visualize(image, keys): """ visualizing the image and the output data """ image = cv2.circle(image, (int(keys[0]), int(keys[1])), 5, (0, 0, 255), -1) image = cv2.circle(image, (int(keys[2]), int(keys[3])), 5, (0, 255, 0), -1) cv2.imshow('visual output', image) cv2.waitKey(0) if __name__ == '__main__': image_directory = '../Dataset/Train/' label_directory = '../Dataset/label/' image_name = 'TI1K_IMAGE_0212.jpg' if 'TI1K' in image_name.split('_'): image, keypoints = my_label_gen(image_directory=image_directory, label_directory=label_directory, image_name=image_name) else: image, keypoints = label_generator(image_directory=image_directory, label_directory=label_directory, image_name=image_name) visualize(image, keypoints)
def train_generator(sample_per_batch, batch_number): """ Generating training data """ train_image_file = [] directory = '../EgoGesture Dataset/' folder_name = [ 'SingleOne', 'SingleTwo', 'SingleThree', 'SingleFour', 'SingleFive', 'SingleSix', 'SingleSeven', 'SingleEight' ] for folder in folder_name: train_image_file = train_image_file + os.listdir(directory + folder + '/') for i in range(0, 10): random.shuffle(train_image_file) print('Training Dataset Size: {0}'.format(len(train_image_file))) while True: for i in range(0, batch_number - 1): start = i * sample_per_batch end = (i + 1) * sample_per_batch x_batch = [] y_batch_prob = [] y_batch_pos = [] for n in range(start, end): image_name = train_image_file[n] try: image, probability, position = label_generator( directory=directory, image_name=image_name, type='') except cv2.error: print(image_name) continue # 1.0 Original image x_batch.append(image) y_batch_prob.append(probability) pos = np.array([ position, ] * 10) y_batch_pos.append(pos) # visualize(image, probability, pos[0]) """ Augmentation """ # 2.0 Original + translate im, pos = translate(image, probability, position) x_batch.append(im) y_batch_prob.append(probability) pos = np.array([ pos, ] * 10) y_batch_pos.append(pos) # visualize(im, probability, pos[0]) # 3.0 Original + rotation im, pos = rotation(image, probability, position) x_batch.append(im) y_batch_prob.append(probability) pos = np.array([ pos, ] * 10) y_batch_pos.append(pos) # visualize(im, probability, pos[0]) # 4.0 Original + salt im, pos = salt(image, probability, position) x_batch.append(im) y_batch_prob.append(probability) pos = np.array([ pos, ] * 10) y_batch_pos.append(pos) # visualize(im, probability, pos[0]) # 5.0 Original + crop im, pos = crop(image, probability, position) x_batch.append(im) y_batch_prob.append(probability) pos = np.array([ pos, ] * 10) y_batch_pos.append(pos) # visualize(im, probability, pos) # 6.0 Original + noise im, pos = noise(image, probability, position) x_batch.append(im) y_batch_prob.append(probability) pos = np.array([ pos, ] * 10) y_batch_pos.append(pos) # visualize(im, probability, pos[0]) # 7.0 Original + rotate + translate im, pos = rotation(image, probability, position) im, pos = translate(im, probability, pos) x_batch.append(im) y_batch_prob.append(probability) pos = np.array([ pos, ] * 10) y_batch_pos.append(pos) # visualize(im, probability, pos) # 8.0 Original + rotate + crop im, pos = rotation(image, probability, position) im, pos = crop(im, probability, pos) x_batch.append(im) y_batch_prob.append(probability) pos = np.array([ pos, ] * 10) y_batch_pos.append(pos) # visualize(im, probability, pos[0]) x_batch = np.asarray(x_batch) x_batch = x_batch.astype('float32') x_batch = x_batch / 255. y_batch_prob = np.asarray(y_batch_prob) y_batch_pos = np.asarray(y_batch_pos) y_batch_pos = y_batch_pos.astype('float32') y_batch_pos = y_batch_pos / 128. y_batch = [y_batch_prob, y_batch_pos] yield (x_batch, y_batch)
import cv2 from preprocess.datagen import label_generator def visualize(image, prob, key): index = 0 color = [(15, 15, 240), (15, 240, 155), (240, 155, 15), (240, 15, 155), (240, 15, 240)] for c, p in enumerate(prob): if p > 0.5: image = cv2.circle(image, (int(key[index]), int(key[index + 1])), radius=5, color=color[c], thickness=-2) index = index + 2 cv2.imshow('Visualize', image) cv2.waitKey(0) if __name__ == '__main__': image_name = 'ChuangyeguFirstfloor_Single_Five_color_514.jpg' image, probability, position = label_generator(image_name=image_name, type='Test') visualize(image, probability, position)
def train_generator(sample_per_batch, batch_number): """ Generating training data """ train_image_file = [] image_files = os.listdir(train_directory) train_image_file = train_image_file + image_files print('Training Dataset Size: ' + str(len(train_image_file))) for i in range(0, 10): random.shuffle(train_image_file) while True: for i in range(0, batch_number - 1): start = i * sample_per_batch end = (i + 1) * sample_per_batch x_batch = [] y_batch_key = [] for n in range(start, end): image_name = train_image_file[n] # image: ndarray keypoints: ndarray but not normalized if 'TI1K' in image_name.split('_'): image, keypoints = my_label_gen( image_directory=train_directory, label_directory=label_directory, image_name=image_name) else: image, keypoints = label_generator( image_directory=train_directory, label_directory=label_directory, image_name=image_name) # 1.0 Original Image x_batch.append(image) y_batch_key.append(keypoints) # visualize(image, keypoints) """ Augmentation """ # 2.0 Flip im_flip, k_flip = flip_horizontal(image, keypoints) x_batch.append(im_flip) y_batch_key.append(k_flip) # visualize(im_flip, k_flip) # 3.0 Original + rotation im, k = rotation(image, keypoints) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 4.0 Flip + rotation im, k = rotation(im_flip, k_flip) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 5.0 Original + translate im, k = translate(image, keypoints) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 6.0 Flip + translate im, k = translate(im_flip, k_flip) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 7.0 Original + crop im, k = crop(image, keypoints) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 8.0 Flip + crop im, k = crop(im_flip, k_flip) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 9.0 Original + noise im, k = noise(image, keypoints) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 10.0 Flip + noise im, k = noise(im_flip, k_flip) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 11.0 Original + salt im, k = salt(image, keypoints) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 12.0 Flip + salt im, k = salt(im_flip, k_flip) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 13.0 Original + flip vertical im, k = flip_vertical(image, keypoints) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 14.0 Flip + flip vertical im, k = flip_vertical(im_flip, k_flip) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 15.0 Original + rotate + translate im, k = rotation(image, keypoints) im, k = translate(im, k) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 16.0 Flip + rotate + translate im, k = rotation(im_flip, k_flip) im, k = translate(im, k) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 17.0 Original + noise + translate im, k = noise(image, keypoints) im, k = translate(im, k) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 18.0 Flip + noise + translate im, k = noise(im_flip, k_flip) im, k = translate(im, k) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 19.0 Original + crop + translate im, k = crop(image, keypoints) im, k = translate(im, k) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) # 20.0 Flip + crop + translate im, k = crop(im_flip, k_flip) im, k = translate(im, k) x_batch.append(im) y_batch_key.append(k) # visualize(im, k) x_batch = np.asarray(x_batch) x_batch = x_batch.astype('float32') x_batch = x_batch / 255. y_batch_key = np.asarray(y_batch_key) y_batch_key = y_batch_key.astype('float32') y_batch_key = y_batch_key / 128. yield (x_batch, y_batch_key)
import cv2 from preprocess.datagen import label_generator def visualize(image, prob, key): index = 0 color = [(15, 15, 240), (15, 240, 155), (240, 155, 15), (240, 15, 155), (240, 15, 240)] for c, p in enumerate(prob): if p > 0.5: image = cv2.circle(image, (int(key[index]), int(key[index + 1])), radius=5, color=color[c], thickness=-2) index = index + 2 cv2.imshow('Unified Gesture & Fingertips Detection', image) cv2.waitKey(0) if __name__ == '__main__': img_name = 'ChuangyeguFirstfloor_Single_Four_color_335.jpg' dir = '../EgoGesture Dataset/' img, prob, keys = label_generator(directory=dir, image_name=img_name, type='Test') visualize(img, prob, keys)