From f01a71a6ad5c3d9eb12248486dcb47413c71057b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gro=CC=88ger?= Date: Wed, 8 May 2019 17:11:57 +0200 Subject: [PATCH] refactoring :hammer: --- {data_extractor => DataExtractor}/__init__.py | 0 .../extract_data.py | 2 +- {data_extractor => DataExtractor}/extractor.py | 10 +++++----- {isolator => Isolator}/__init__.py | 0 {isolator => Isolator}/isolator.py | 16 ++++++++-------- {isolator => Isolator}/isolator_constants.py | 0 .../isolator_constants_320_240.py | 2 +- .../isolator_constants_640_480.py | 2 +- ReadMe.md | 2 +- {tester => Tester}/__init__.py | 0 {tester => Tester}/test_model.py | 12 +++++++----- {tester => Tester}/tester.py | 6 ++---- {trainer => Trainer/Models}/__init__.py | 0 {trainer/models => Trainer/Models}/model.py | 2 +- .../models => Trainer/Models}/model_gnet_deep.py | 2 +- .../Models}/model_gnet_light.py | 2 +- .../Models}/model_gnet_light_v2.py | 2 +- {trainer/models => Trainer/Utils}/__init__.py | 0 .../Utils}/tensorboard_filter_visualisation.py | 0 {trainer/utils => Trainer}/__init__.py | 0 {trainer => Trainer}/train_model.py | 7 ++++--- constants.py | 2 +- 22 files changed, 35 insertions(+), 34 deletions(-) rename {data_extractor => DataExtractor}/__init__.py (100%) rename {data_extractor => DataExtractor}/extract_data.py (95%) rename {data_extractor => DataExtractor}/extractor.py (98%) rename {isolator => Isolator}/__init__.py (100%) rename {isolator => Isolator}/isolator.py (95%) rename {isolator => Isolator}/isolator_constants.py (100%) rename {isolator => Isolator}/isolator_constants_320_240.py (84%) rename {isolator => Isolator}/isolator_constants_640_480.py (90%) rename {tester => Tester}/__init__.py (100%) rename {tester => Tester}/test_model.py (56%) rename {tester => Tester}/tester.py (96%) rename {trainer => Trainer/Models}/__init__.py (100%) rename {trainer/models => Trainer/Models}/model.py (98%) rename {trainer/models => Trainer/Models}/model_gnet_deep.py (98%) rename {trainer/models => Trainer/Models}/model_gnet_light.py (97%) rename {trainer/models => Trainer/Models}/model_gnet_light_v2.py (97%) rename {trainer/models => Trainer/Utils}/__init__.py (100%) rename {trainer/utils => Trainer/Utils}/tensorboard_filter_visualisation.py (100%) rename {trainer/utils => Trainer}/__init__.py (100%) rename {trainer => Trainer}/train_model.py (91%) diff --git a/data_extractor/__init__.py b/DataExtractor/__init__.py similarity index 100% rename from data_extractor/__init__.py rename to DataExtractor/__init__.py diff --git a/data_extractor/extract_data.py b/DataExtractor/extract_data.py similarity index 95% rename from data_extractor/extract_data.py rename to DataExtractor/extract_data.py index 9ec89e1..6aa46a7 100644 --- a/data_extractor/extract_data.py +++ b/DataExtractor/extract_data.py @@ -1,4 +1,4 @@ -from data_extractor.extractor import Extractor +from DataExtractor.extractor import Extractor def main(): diff --git a/data_extractor/extractor.py b/DataExtractor/extractor.py similarity index 98% rename from data_extractor/extractor.py rename to DataExtractor/extractor.py index 9a17f89..9d3b570 100644 --- a/data_extractor/extractor.py +++ b/DataExtractor/extractor.py @@ -8,8 +8,8 @@ from natsort import natsorted from tqdm import tqdm -from isolator.isolator import Isolator -from trainer.models.model_gnet_light import ModelGNetLight +from Isolator.isolator import Isolator +from Trainer.Models.model_gnet_light import ModelGNetLight from tensorflow.python.keras.preprocessing.image import ImageDataGenerator from tensorflow.python.keras.preprocessing.image import array_to_img, img_to_array, load_img @@ -131,7 +131,7 @@ def create_random_images(self, category, count): category_dir = os.path.join(self.current_working_dir, constants.OUTPUT_DATA_DIR, category) for index in tqdm(range(count)): - if constants.USE_GRAYSCALE: + if constants.USE_GRAY_SCALE: image_rand = np.random.randint(0, 255, size=(constants.IMG_SIZE, constants.IMG_SIZE), dtype=np.uint8) else: image_rand = np.random.randint(0, 255, @@ -157,7 +157,7 @@ def create_training_data(self): img_array = cv2.imread(os.path.join(category_dir, img)) if img_array is not None: # convert image to grayscale if parameter is set in constants file - if constants.USE_GRAYSCALE: + if constants.USE_GRAY_SCALE: img_array = cv2.cvtColor(img_array, cv2.COLOR_BGR2GRAY) # resize to normalize data size new_array = cv2.resize(img_array, (constants.IMG_SIZE, constants.IMG_SIZE)) @@ -210,7 +210,7 @@ def categorize_with_trained_model(self): image_path = os.path.join(extracted_data_dir, img) img_array = cv2.imread(image_path) if img_array is not None: - if constants.USE_GRAYSCALE: + if constants.USE_GRAY_SCALE: image_array = cv2.cvtColor(img_array, cv2.COLOR_RGB2GRAY) resized_image_array = cv2.resize(image_array, (constants.IMG_SIZE, constants.IMG_SIZE)) reshaped_image = resized_image_array.reshape(-1, constants.IMG_SIZE, constants.IMG_SIZE, diff --git a/isolator/__init__.py b/Isolator/__init__.py similarity index 100% rename from isolator/__init__.py rename to Isolator/__init__.py diff --git a/isolator/isolator.py b/Isolator/isolator.py similarity index 95% rename from isolator/isolator.py rename to Isolator/isolator.py index 556db94..e3e89cf 100644 --- a/isolator/isolator.py +++ b/Isolator/isolator.py @@ -1,9 +1,9 @@ import cv2 import constants import numpy as np -from isolator.isolator_constants import IsolatorConstants -from isolator.isolator_constants_320_240 import IsolatorConstants320240 -from isolator.isolator_constants_640_480 import IsolatorConstants640480 +from Isolator.isolator_constants import IsolatorConstants +from Isolator.isolator_constants_320_240 import IsolatorConstants320240 +from Isolator.isolator_constants_640_480 import IsolatorConstants640480 class Isolator: @@ -16,7 +16,7 @@ def get_regions_of_interest(self, image): # 0: roi, 1: type regions_of_interest = [] - if constants.USE_GRAYSCALE: + if constants.USE_GRAY_SCALE: image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) if self.CONSTANTS is None: @@ -40,7 +40,7 @@ def get_contours_and_rois(self, image): # 0: roi, 1: type contours_signal_type = [] - if constants.USE_GRAYSCALE: + if constants.USE_GRAY_SCALE: image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) if self.CLASS_CONSTANTS is not None: @@ -64,7 +64,7 @@ def get_contours_and_rois(self, image): return contours_signal_type def __set_constants(self, image): - if constants.USE_GRAYSCALE: + if constants.USE_GRAY_SCALE: image_height, image_width = image.shape else: image_height, image_width, _ = image.shape @@ -84,7 +84,7 @@ def __crop(self, image): width_start = self.CONSTANTS.CROP_WIDTH_START width_end = self.CONSTANTS.CROP_WIDTH_END - if constants.USE_GRAYSCALE: + if constants.USE_GRAY_SCALE: image_info = image[info_start:info_end, width_start:width_end] image_stop = image[stop_start:stop_end, width_start:width_end] else: @@ -102,7 +102,7 @@ def __detect_edges(self, channel): return sobel def __preprocess(self, image): - if constants.USE_GRAYSCALE: + if constants.USE_GRAY_SCALE: # create gradient image from gray scale image # for better performance (only 1 channel) image = self.__detect_edges(image) diff --git a/isolator/isolator_constants.py b/Isolator/isolator_constants.py similarity index 100% rename from isolator/isolator_constants.py rename to Isolator/isolator_constants.py diff --git a/isolator/isolator_constants_320_240.py b/Isolator/isolator_constants_320_240.py similarity index 84% rename from isolator/isolator_constants_320_240.py rename to Isolator/isolator_constants_320_240.py index 3d7330e..87e8732 100644 --- a/isolator/isolator_constants_320_240.py +++ b/Isolator/isolator_constants_320_240.py @@ -1,4 +1,4 @@ -from isolator.isolator_constants import IsolatorConstants +from Isolator.isolator_constants import IsolatorConstants class IsolatorConstants320240(IsolatorConstants): diff --git a/isolator/isolator_constants_640_480.py b/Isolator/isolator_constants_640_480.py similarity index 90% rename from isolator/isolator_constants_640_480.py rename to Isolator/isolator_constants_640_480.py index 1de1948..c3b466c 100644 --- a/isolator/isolator_constants_640_480.py +++ b/Isolator/isolator_constants_640_480.py @@ -1,4 +1,4 @@ -from isolator.isolator_constants import IsolatorConstants +from Isolator.isolator_constants import IsolatorConstants class IsolatorConstants640480(IsolatorConstants): diff --git a/ReadMe.md b/ReadMe.md index 6ed9ece..e5fcd55 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -12,9 +12,9 @@ and a category for 'not numbers'. ### Includes - DataExtractor (to extract data for the dataset) +- Isolator (to find the numbers inside an image) - Trainer (to train the model) - Tester (to test the model on custom images) -- Utils (test, simulate the isolator on images) ## Install diff --git a/tester/__init__.py b/Tester/__init__.py similarity index 100% rename from tester/__init__.py rename to Tester/__init__.py diff --git a/tester/test_model.py b/Tester/test_model.py similarity index 56% rename from tester/test_model.py rename to Tester/test_model.py index 9520c0d..902bed0 100644 --- a/tester/test_model.py +++ b/Tester/test_model.py @@ -1,20 +1,22 @@ import numpy as np -from tester import Tester +from Tester.tester import Tester +from Trainer.Models.model_gnet_light import ModelGNetLight +from Trainer.Models.model_gnet_deep import ModelGNetDeep def main(): - tester = Tester() + tester = Tester(ModelGNetDeep('GNet')) # test the model with a given image - # tester.test_model_with_image('frame_overlaying_cnt_2.jpg') + # Tester.test_model_with_image('frame_overlaying_cnt_2.jpg') # test the model with a random color array # image_random_color = np.random.randint(0, 255, size=(28, 28, 3), dtype=np.uint8) - # tester.test_model_with_array(image_random_color) + # Tester.test_model_with_array(image_random_color) # test the model with a random gray scale array # image_random_gray = np.random.randint(0, 255, size=(28, 28), dtype=np.uint8) - # tester.test_model_with_array(image_random_gray) + # Tester.test_model_with_array(image_random_gray) # test the model with a folder of images tester.test_model_with_folder('continuous') diff --git a/tester/tester.py b/Tester/tester.py similarity index 96% rename from tester/tester.py rename to Tester/tester.py index 160f1c0..91bee7e 100644 --- a/tester/tester.py +++ b/Tester/tester.py @@ -4,15 +4,13 @@ import shutil import numpy as np from tqdm import tqdm -from isolator.isolator import Isolator -from trainer.models.model_gnet_light import ModelGNetLight +from Isolator.isolator import Isolator class Tester: - def __init__(self): + def __init__(self, model_obj): model_path = "{}.h5".format(constants.MODEL_DIR) - model_obj = ModelGNetLight('GNet') model_obj.create_model(weights_path=model_path) self.model = model_obj.model self.model.summary() diff --git a/trainer/__init__.py b/Trainer/Models/__init__.py similarity index 100% rename from trainer/__init__.py rename to Trainer/Models/__init__.py diff --git a/trainer/models/model.py b/Trainer/Models/model.py similarity index 98% rename from trainer/models/model.py rename to Trainer/Models/model.py index 628d866..e74a8ae 100644 --- a/trainer/models/model.py +++ b/Trainer/Models/model.py @@ -10,7 +10,7 @@ from tensorflow.python.keras.optimizers import Adam from tensorflow.python.framework.graph_util import convert_variables_to_constants from tensorflow.python.keras.callbacks import TensorBoard -from trainer.utils.tensorboard_filter_visualisation import TensorBoardFilterVisualisation +from Trainer.Utils.tensorboard_filter_visualisation import TensorBoardFilterVisualisation # only show tensorflow errors tf.logging.set_verbosity(tf.logging.ERROR) diff --git a/trainer/models/model_gnet_deep.py b/Trainer/Models/model_gnet_deep.py similarity index 98% rename from trainer/models/model_gnet_deep.py rename to Trainer/Models/model_gnet_deep.py index 9d1a6c9..b754b51 100644 --- a/trainer/models/model_gnet_deep.py +++ b/Trainer/Models/model_gnet_deep.py @@ -1,5 +1,5 @@ import constants -from trainer.models.model import Model +from Trainer.Models.model import Model from tensorflow.python.keras.models import Sequential from tensorflow.python.keras.layers import Dense, Dropout, Activation, Flatten from tensorflow.python.keras.layers import Conv2D, MaxPooling2D diff --git a/trainer/models/model_gnet_light.py b/Trainer/Models/model_gnet_light.py similarity index 97% rename from trainer/models/model_gnet_light.py rename to Trainer/Models/model_gnet_light.py index 86ac9a1..4069ec1 100644 --- a/trainer/models/model_gnet_light.py +++ b/Trainer/Models/model_gnet_light.py @@ -1,5 +1,5 @@ import constants -from trainer.models.model import Model +from Trainer.Models.model import Model from tensorflow.python.keras.models import Sequential from tensorflow.python.keras.layers import Dense, Dropout, Activation, Flatten from tensorflow.python.keras.layers import Conv2D, MaxPooling2D diff --git a/trainer/models/model_gnet_light_v2.py b/Trainer/Models/model_gnet_light_v2.py similarity index 97% rename from trainer/models/model_gnet_light_v2.py rename to Trainer/Models/model_gnet_light_v2.py index a80b42c..7448a69 100644 --- a/trainer/models/model_gnet_light_v2.py +++ b/Trainer/Models/model_gnet_light_v2.py @@ -1,5 +1,5 @@ import constants -from trainer.models.model import Model +from Trainer.Models.model import Model from tensorflow.python.keras.models import Sequential from tensorflow.python.keras.layers import Dense, Dropout, Activation, Flatten from tensorflow.python.keras.layers import Conv2D diff --git a/trainer/models/__init__.py b/Trainer/Utils/__init__.py similarity index 100% rename from trainer/models/__init__.py rename to Trainer/Utils/__init__.py diff --git a/trainer/utils/tensorboard_filter_visualisation.py b/Trainer/Utils/tensorboard_filter_visualisation.py similarity index 100% rename from trainer/utils/tensorboard_filter_visualisation.py rename to Trainer/Utils/tensorboard_filter_visualisation.py diff --git a/trainer/utils/__init__.py b/Trainer/__init__.py similarity index 100% rename from trainer/utils/__init__.py rename to Trainer/__init__.py diff --git a/trainer/train_model.py b/Trainer/train_model.py similarity index 91% rename from trainer/train_model.py rename to Trainer/train_model.py index a79c18f..a292728 100644 --- a/trainer/train_model.py +++ b/Trainer/train_model.py @@ -1,14 +1,15 @@ import time import constants -from trainer.models.model_gnet_light import ModelGNetLight -from trainer.models.model import Model +from Trainer.Models.model_gnet_light import ModelGNetLight +from Trainer.Models.model_gnet_deep import ModelGNetDeep +from Trainer.Models.model import Model from tensorflow.python.keras.models import Sequential from tensorflow.python.keras.layers import Dense, Activation, Flatten from tensorflow.python.keras.layers import Conv2D, MaxPooling2D def main(): - model = ModelGNetLight('new-without-duplicates-aug-batch-16-epoch-10-test') + model = ModelGNetDeep('new-without-duplicates-aug-batch-16-epoch-10-test') model.create_model() model.train_model() model.save_model() diff --git a/constants.py b/constants.py index 9c70b77..385e3b3 100644 --- a/constants.py +++ b/constants.py @@ -5,7 +5,7 @@ MODEL_DIR = "../number_detection_model" IMG_SIZE = 28 -USE_GRAYSCALE = True +USE_GRAY_SCALE = True DIMENSION = 1 SIGNAL_TYPES = ["info", "stop"]