-
Notifications
You must be signed in to change notification settings - Fork 1
/
Brain-tumor-detector.py
63 lines (52 loc) · 1.91 KB
/
Brain-tumor-detector.py
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
import os
import numpy as np
import cv2
from sklearn.model_selection import train_test_split
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.utils import to_categorical
# Define paths
data_dir_no = 'brain_tumor_dataset/no'
data_dir_yes = 'brain_tumor_dataset/yes'
# Load and preprocess the data
def load_images_from_folder(folder, label):
images = []
labels = []
for filename in os.listdir(folder):
img = cv2.imread(os.path.join(folder, filename))
if img is not None:
img = cv2.resize(img, (64, 64)) # Resize to a fixed size
images.append(img)
labels.append(label)
return images, labels
images_no, labels_no = load_images_from_folder(data_dir_no, 0)
images_yes, labels_yes = load_images_from_folder(data_dir_yes, 1)
images = np.array(images_no + images_yes)
labels = np.array(labels_no + labels_yes)
# Normalize the images
images = images / 255.0
# Split the dataset
X_train, X_test, y_train, y_test = train_test_split(images, labels, test_size=0.2, random_state=42)
# Convert labels to categorical
y_train = to_categorical(y_train, 2)
y_test = to_categorical(y_test, 2)
# Build the model
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3)),
MaxPooling2D((2, 2)),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D((2, 2)),
Conv2D(128, (3, 3), activation='relu'),
MaxPooling2D((2, 2)),
Flatten(),
Dense(128, activation='relu'),
Dense(2, activation='softmax')
])
# Compile the model
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# Train the model
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
# Evaluate the model
loss, accuracy = model.evaluate(X_test, y_test)
print(f'Test accuracy: {accuracy * 100:.2f}%')
model.save('brain_tumor_model.h5')