import numpy as np from sklearn.preprocessing import LabelEncoder, LabelBinarizer from sklearn.model_selection import train_test_split from sidekick.io.hdf5_writer import Hdf5Writer from imutils import paths import cv2 import os import progressbar import json import argparse ap= argparse.ArgumentParser() ap.add_argument('--model_training', '-m', required=True, help='Flag to determine which model is trained. Choose from "angle" and "length".') ap.add_argument('--input_dir', '-i', required=True, help='Path to input dir for images') ap.add_argument('--train_output_file', '-to', required=True, help='Path to train output file. Must not exist by default.') ap.add_argument('--val_output_file', '-vo', required=True, help='Path to val output file. Must not exist by default.') ap.add_argument('--label_file', '-l', required=True, help='Path to input training labels.') args= vars(ap.parse_args()) model_flag= args['model_training'] data_path= args['input_dir'] hdf5_train= args['train_output_file'] hdf5_test= args['val_output_file'] label_file= args['label_file'] class_to_use= [] f= open(label_file, 'r') label_dict= json.loads(f.read()) train_paths= list(paths.list_images(data_path)) train_labels= [label_dict[t.split(os.path.sep)[-1]] for t in train_paths] if model_flag=='angle': le= LabelEncoder() train_labels= le.fit_transform(train_labels) print(le.classes_) print("Number of classes are: {}".format(len(le.classes_))) train_paths, test_paths, train_labels, test_labels= train_test_split(train_paths,train_labels, test_size=0.2) print(train_paths[10], train_labels[10], test_paths[10], test_labels[10]) files= [('train', train_paths, train_labels, hdf5_train), ('val', test_paths, test_labels, hdf5_test)] for optype, paths, labels, output_path in files: dat_writer= Hdf5Writer((len(paths), 224, 224), output_path) # Initializing the progress bar display display=["Building Dataset: ", progressbar.Percentage(), " ", progressbar.Bar(), " ", progressbar.ETA()] # Start the progress bar progress= progressbar.ProgressBar(maxval=len(paths), widgets=display).start() # Iterate through each img path for (i, (p, l)) in enumerate(zip(paths,labels)): img= cv2.imread(p) img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img = cv2.resize(img, (224, 224)) img= img.astype('float') / 255.0 dat_writer.add([img], [l]) progress.update(i) # Finish the progress for one type progress.finish() dat_writer.close()