CNN MODEL
# Step 1: Import Required Libraries
import os
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
# Step 2: Define Paths to Data
crack_dir = '/content/crack'
# Directory containing crack images
without_crack_dir = '/content/without_crack'
# Directory containing images without cracks
# Step 3: Initialize Data and Labels
data = []
labels = []
# Step 4: Define Valid Extensions and Load Images Function
CNN MODEL
valid_extensions = ('.jpg', '.jpeg', '.png', '.bmp', '.tiff')
def load_images(folder_path, label):
"""Load images from the given folder path and assign the specified label."""
for root, _, files in os.walk(folder_path):
# Traverse all subdirectories
for img_name in files:
if img_name.lower().endswith(valid_extensions):
# Check for valid image files
img_path = os.path.join(root, img_name)
try:
img = tf.keras.utils.load_img(img_path, target_size=(128, 128))
# Resize image
img = tf.keras.utils.img_to_array(img) / 255.0
# Normalize pixel values
data.append(img)
labels.append(label)
except Exception as e:
print(f"Error loading image {img_path}: {e}")
# Step 5: Load Crack and Non-Crack Images
load_images(crack_dir, label=1)
# Label 1 for crack images
load_images(without_crack_dir, label=0)
CNN MODEL
# Label 0 for non-crack images
# Step 6: Convert Data and Labels to Numpy Arrays
data = np.array(data)
labels = np.array(labels)
print(f"Total images loaded: {len(data)}")
print(f"Labels distribution: {np.bincount(labels)}")
# Count of each label (0 and 1)
# Step 7: Split Data into Training and Testing Sets
X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2, random_state=4
print(f"Training set size: {len(X_train)}, Testing set size: {len(X_test)}")
# Step 8: Build the Convolutional Neural Network (CNN) Model
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(128, 128, 3)),
# First convolutional layer
MaxPooling2D((2, 2)),
# Max pooling
Conv2D(64, (3, 3), activation='relu'),
# Second convolutional layer
MaxPooling2D((2, 2)),
CNN MODEL
# Max pooling
Conv2D(128, (3, 3), activation='relu'),
# Third convolutional layer
MaxPooling2D((2, 2)),
# Max pooling
Flatten(),
# Flatten the output for the dense layer
Dense(128, activation='relu'),
# Fully connected dense layer
Dropout(0.5),
# Dropout to prevent overfitting
Dense(1, activation='sigmoid') # Output layer for binary classification
])
# Step 9: Compile the Model
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Step 10: Train the Model
history = model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=25, batch_size=3
# Step 11: Evaluate the Model on Test Data
test_loss, test_accuracy = model.evaluate(X_test, y_test)
CNN MODEL
print(f"Test Accuracy: {test_accuracy:.2f}")
# Step 12: Save the Model
model.save('/content/crack_detection_model.h5')
print("Model saved as 'crack_detection_model.h5'.")
# Step 13: Download the Model
from google.colab import files
files.download('/content/crack_detection_model.h5')
# Step 14: Plot Training Results
plt.plot(history.history['accuracy'], label='Train Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.show()