import numpy as np import matplotlib.pyplot as plt import cv2 import os import tensorflow as tf from PIL import Image from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report from tqdm import tqdm image_dir=r"C:\Users\shahi\Desktop\My Projects\DeepPredictorHub\CNN\tumordata" no_tumor_images=os.listdir(r"C:\Users\shahi\Desktop\My Projects\DeepPredictorHub\CNN\tumordata\no") yes_tumor_images=os.listdir(r"C:\Users\shahi\Desktop\My Projects\DeepPredictorHub\CNN\tumordata\yes") dataset=[] label=[] img_siz=(128,128) for i , image_name in tqdm(enumerate(no_tumor_images),desc="No Tumor"): if(image_name.split('.')[1]=='jpg'): image=cv2.imread(image_dir+'/no/'+image_name) image=Image.fromarray(image,'RGB') image=image.resize(img_siz) dataset.append(np.array(image)) label.append(0) for i ,image_name in tqdm(enumerate(yes_tumor_images),desc="Tumor"): if(image_name.split('.')[1]=='jpg'): image=cv2.imread(image_dir+'/yes/'+image_name) image=Image.fromarray(image,'RGB') image=image.resize(img_siz) dataset.append(np.array(image)) label.append(1) dataset=np.array(dataset) label = np.array(label) print("--------------------------------------\n") print('Dataset Length: ',len(dataset)) print('Label Length: ',len(label)) print("--------------------------------------\n") print("--------------------------------------\n") print("Train-Test Split") x_train,x_test,y_train,y_test=train_test_split(dataset,label,test_size=0.2,random_state=42) print("--------------------------------------\n") print("--------------------------------------\n") print("Normalaising the Dataset. \n") # x_train=x_train.astype('float')/255 # x_test=x_test.astype('float')/255 # Same step above is implemented using tensorflow functions. x_train=tf.keras.utils.normalize(x_train,axis=1) x_test=tf.keras.utils.normalize(x_test,axis=1) print("--------------------------------------\n") model=tf.keras.models.Sequential([ tf.keras.layers.Conv2D(32,(3,3),activation='relu',input_shape=(128,128,3)), tf.keras.layers.MaxPooling2D((2,2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(256,activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(512,activation='relu'), tf.keras.layers.Dense(1,activation='sigmoid') ]) print("--------------------------------------\n") model.summary() print("--------------------------------------\n") model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) print("--------------------------------------\n") print("Training Started.\n") history=model.fit(x_train,y_train,epochs=20,batch_size =128,validation_split=0.1) print("Training Finished.\n") print("--------------------------------------\n") print("--------------------------------------\n") print("Model Evalutaion Phase.\n") loss,accuracy=model.evaluate(x_test,y_test) print(f'Accuracy: {round(accuracy*100,2)}') print("--------------------------------------\n") y_pred=model.predict(x_test) y_pred = (y_pred > 0.5).astype(int) print('classification Report\n',classification_report(y_test,y_pred)) print("--------------------------------------\n") def make_prediction(img,model): img=cv2.imread(img) img=Image.fromarray(img) img=img.resize((128,128)) img=np.array(img) input_img = np.expand_dims(img, axis=0) res = model.predict(input_img) if res: print("Tumor Detected") else: print("No Tumor") model.save(r'C:\Users\shahi\Desktop\My Projects\DeepPredictorHub\CN.keras')