Spaces:
Runtime error
Runtime error
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') |