Spaces:
Runtime error
Runtime error
File size: 3,671 Bytes
db29847 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
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') |