Diff of /Projects/NCS1/Data.py [000000] .. [acd362]

Switch to side-by-side view

--- a
+++ b/Projects/NCS1/Data.py
@@ -0,0 +1,86 @@
+############################################################################################
+#
+# Project:       Peter Moss Acute Myeloid & Lymphoblastic Leukemia AI Research Project
+# Repository:    ALL Detection System 2019
+# Project:       Facial Authentication Server
+#
+# Author:        Adam Milton-Barker (AdamMiltonBarker.com)
+# Contributors:
+# Title:         Training Data Class
+# Description:   Training Data class for the ALL Detection System 2019 NCS1 Classifier.
+# License:       MIT License
+# Last Modified: 2020-07-16
+#
+############################################################################################
+
+import os, random, sys
+
+from Classes.Helpers import Helpers
+from Classes.Data import Data as DataProcess
+
+
+class Data():
+    """ Trainer Data Class
+
+    Sorts the ALL Detection System 2019 NCS1 Classifier training data.
+    """
+
+    def __init__(self):
+        """ Initializes the Data Class """
+
+        self.Helpers = Helpers("Data")
+        self.confs = self.Helpers.confs
+
+        self.DataProcess = DataProcess()
+        self.labelsToName = {}
+
+        self.Helpers.logger.info("Data class initialization complete.")
+
+    def sortData(self):
+        """ Sorts the training data """
+
+        humanStart, clockStart = self.Helpers.timerStart()
+
+        self.Helpers.logger.info("Loading & preparing training data.")
+
+        dataPaths, classes = self.DataProcess.processFilesAndClasses()
+
+        classId = [int(i) for i in classes]
+        classNamesToIds = dict(zip(classes, classId))
+
+        # Divide the training datasets into train and test
+        numValidation = int(
+            self.confs["Classifier"]["ValidationSize"] * len(dataPaths))
+        self.Helpers.logger.info("Number of classes: " + str(classes))
+        self.Helpers.logger.info("Validation data size: " + str(numValidation))
+        random.seed(self.confs["Classifier"]["RandomSeed"])
+        random.shuffle(dataPaths)
+        trainingFiles = dataPaths[numValidation:]
+        validationFiles = dataPaths[:numValidation]
+
+        # Convert the training and validation sets
+        self.DataProcess.convertToTFRecord(
+            'train', trainingFiles, classNamesToIds)
+        self.DataProcess.convertToTFRecord(
+            'validation', validationFiles, classNamesToIds)
+
+        # Write the labels to file
+        labelsToClassNames = dict(zip(classId, classes))
+        self.DataProcess.writeLabels(labelsToClassNames)
+
+        self.Helpers.logger.info(
+            "Loading & preparing training data completed.")
+
+    def cropTestData(self):
+        """ Crops the testing data """
+        
+        self.DataProcess.cropTestDataset()
+
+        self.Helpers.logger.info(
+            "Testing data resized.")
+
+
+if __name__ == "__main__":
+
+    ProcessData = Data()
+    ProcessData.sortData()