{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n\n%matplotlib inline\n\nimport os.path\nimport zipfile\nimport cv2","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_path_labels = '../input/aptos2019-blindness-detection/train.csv'\ntest_path_labels = '../input/aptos2019-blindness-detection/test.csv'\ntrain_images = '../input/aptos2019-blindness-detection/train_images.zip'\ntest_images = '../input/aptos2019-blindness-detection/test_images.zip'\n\n\n\ntrain_labels = pd.read_csv(train_path_labels)\ntest_labels = pd.read_csv(test_path_labels)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_labels.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"## Reading some images and compare \n\nfig=plt.figure(figsize=(10, 2))\n\nwith zipfile.ZipFile(train_images, 'r') as zfile:\n    data1 = zfile.read('005b95c28852.png')\n    data2 = zfile.read('001639a390f0.png')\n\nimg1 = cv2.imdecode(np.frombuffer(data1, np.uint8), 5)\nimg2 = cv2.imdecode(np.frombuffer(data2, np.uint8), 5)\n\nimg1 = cv2.resize(img1, (960, 540)) \nimg2 = cv2.resize(img2, (960, 540))\n\ngray1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)\ngray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)\n\ncv2.imshow('Healthy',gray1)\ncv2.imshow('Number4',gray2)\ncv2.waitKey(0)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"hist = np.histogram(gray2.flatten(),256,[0,256])[0]","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"hist","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from os import listdir,makedirs\nfrom os.path import isfile,join\n\npath_train = r'Train_Images' # Source Folder\npath_train_gray = r'Gray_Images' # Destination Folder\n\n\nfiles = [f for f in listdir(path_train) if isfile(join(path_train,f))] \n\nfor image in files:\n    img = cv2.imread(os.path.join(path_train,image))\n    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)\n    dstPath = join(path_train_gray,image)\n    cv2.imwrite(dstPath,gray)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"files = [f for f in listdir(path_train_gray) if isfile(join(path_train_gray,f))] \n\nfor images in files:\n    img = cv2.imread(os.path.join(path_train_gray,image))\n    resized_image = cv2.resize(img, (128, 128))\n    same_path = join(path_train_gray,images)\n    cv2.imwrite(same_path, resized_image)\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def image_processing(original_path, new_path):\n    files = [f for f in listdir(original_path) if isfile(join(original_path,f))] \n    for image in files:\n        img = cv2.imread(os.path.join(original_path,image))\n        gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)\n        #Check image entrance do CNN model\n        resized_image = cv2.resize(gray, (128, 128))\n        different_path = join(new_path,image)\n        cv2.imwrite(different_path,resized_image)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"original_path_train = r'Train_Images' # Source Folder\nnew_path_train = r'Gray_Images' # Destination Folder\n\nimage_processing(original_path_train, new_path_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nimport os\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mplimg\nfrom matplotlib.pyplot import imshow\n\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.preprocessing import OneHotEncoder\n\nfrom keras import layers\nfrom keras.preprocessing import image\nfrom keras.applications.imagenet_utils import preprocess_input\nfrom keras.layers import Input, Dense, Activation, BatchNormalization, Flatten, Conv2D\nfrom keras.layers import AveragePooling2D, MaxPooling2D, Dropout\nfrom keras.models import Model\n\nimport keras.backend as K\nfrom keras.models import Sequential\n\nimport warnings","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def prepareImages(data, m, dataset):\n    print(\"Preparing images\")\n    X_train = np.zeros((m, 100, 100, 3))\n    count = 0\n    \n    for fig in data['id_code']:\n        #load images into images of size 100x100x3\n        img = image.load_img(dataset+\"/\"+fig, target_size=(100, 100, 3))\n        x = image.img_to_array(img)\n        x = preprocess_input(x)\n\n        X_train[count] = x\n        if (count%500 == 0):\n            print(\"Processing image: \", count+1, \", \", fig)\n        count += 1\n    \n    return X_train","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def prepare_labels(y):\n    values = np.array(y)\n    label_encoder = LabelEncoder()\n    integer_encoded = label_encoder.fit_transform(values)\n    # print(integer_encoded)\n\n    onehot_encoder = OneHotEncoder(sparse=False)\n    integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)\n    onehot_encoded = onehot_encoder.fit_transform(integer_encoded)\n    # print(onehot_encoded)\n\n    y = onehot_encoded\n    # print(y.shape)\n    return y, label_encode","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_csv = pd.read_csv(train_path_labels)\n\n\nX = prepareImages(train_labels, train_labels.shape[0], 'Train_Images')\nX /= 255","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"code","source":"y, label_encoder = prepare_labels(train_labels['id_code'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential()\nmodel.add(Conv2D(32, (7,7), input_shape = X.shape[1:])\nmodel.add(Activation('relu'))\nmodel.add(MaxPooling2D(pool_size = (2,2)))\n\n\nmodel.add(Conv2D(64, (3,3), input_shape = X.shape[1:])\nmodel.add(Activation('relu'))\nmodel.add(MaxPooling2D(pool_size = (2,2)))\n\n\nmodel.add(Conv2D(64, (3,3))\nmodel.add(Activation('relu'))\nmodel.add(MaxPooling2D(pool_size = (2,2)))\n\n\nmodel.add(Flatten())\nmodel.add(Dense(64))\n\nmodel.add(Dense(1))\nmodel.add(Activation('sigmoid'))\n\nmodel.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])\n\n\nmodel.fit(X,y, batch_size = 32,epochs = 3,  validation_split = 0.1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit(X, y, epochs=100, batch_size=100, verbose=1)\ngc.collect()","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.8"}},"nbformat":4,"nbformat_minor":1}