|
|
|
"""Untitled20.ipynb |
|
|
|
Automatically generated by Colaboratory. |
|
|
|
Original file is located at |
|
https://colab.research.google.com/drive/1O_tHcmidNGKAgxAiG7Su44auJSRFR1xA |
|
""" |
|
|
|
import tensorflow as tf |
|
from tensorflow.keras.models import Sequential |
|
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout |
|
from tensorflow.keras.preprocessing.image import ImageDataGenerator |
|
|
|
image_size = (128, 128) |
|
batch_size = 32 |
|
train_datagen = ImageDataGenerator( |
|
rescale=1./255, |
|
shear_range=0.2, |
|
zoom_range=0.2, |
|
horizontal_flip=True |
|
) |
|
|
|
test_datagen = ImageDataGenerator(rescale=1./255) |
|
|
|
train_generator = train_datagen.flow_from_directory( |
|
'/content/drive/MyDrive/training', |
|
target_size=image_size, |
|
batch_size=batch_size, |
|
class_mode='binary' |
|
) |
|
|
|
test_generator = test_datagen.flow_from_directory( |
|
'/content/drive/MyDrive/testing', |
|
target_size=image_size, |
|
batch_size=batch_size, |
|
class_mode='binary' |
|
) |
|
|
|
from tensorflow.keras.models import Sequential |
|
|
|
model = Sequential() |
|
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(image_size[0], image_size[1], 3))) |
|
model.add(MaxPooling2D(pool_size=(2, 2))) |
|
model.add(Conv2D(64, (3, 3), activation='relu')) |
|
model.add(MaxPooling2D(pool_size=(2, 2))) |
|
model.add(Conv2D(128, (3, 3), activation='relu')) |
|
model.add(MaxPooling2D(pool_size=(2, 2))) |
|
model.add(Flatten()) |
|
model.add(Dense(128, activation='relu')) |
|
model.add(Dropout(0.5)) |
|
model.add(Dense(1, activation='sigmoid')) |
|
|
|
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) |
|
model.fit(train_generator, epochs=10, validation_data=test_generator) |
|
evaluation = model.evaluate(test_generator) |
|
print(f"Test Accuracy: {evaluation[1] * 100:.2f}%") |
|
|
|
predictions = model.predict(test_generator) |
|
predicted_labels = (predictions > 0.5).astype(int) |
|
|
|
from sklearn.metrics import confusion_matrix, classification_report |
|
true_labels = test_generator.classes |
|
conf_matrix = confusion_matrix(true_labels, predicted_labels) |
|
print("Confusion Matrix:") |
|
print(conf_matrix) |
|
class_report = classification_report(true_labels, predicted_labels, target_names=['not_fractured', 'fractured']) |
|
print("Classification Report:") |
|
print(class_report) |
|
|
|
import matplotlib.pyplot as plt |
|
import random |
|
test_images, true_labels = next(test_generator) |
|
predicted_labels = (model.predict(test_images) > 0.5).astype(int) |
|
plt.figure(figsize=(12, 8)) |
|
for i in range(10): |
|
plt.subplot(2, 5, i+1) |
|
plt.imshow(test_images[i]) |
|
plt.title(f"True: {true_labels[i]}, Predicted: {predicted_labels[i]}") |
|
plt.axis('off') |
|
plt.show() |
|
|
|
import cv2 |
|
|
|
image = cv2.imread('/content/drive/MyDrive/testing/fractured/1-rotated1-rotated1-rotated2.jpg') |
|
|
|
plt.imshow(image) |
|
|
|
image.shape |
|
|
|
image = cv2.resize(image,(256,256)) |
|
|
|
test_input = image.reshape((1,256,256,3)) |
|
|
|
image.shape |
|
|
|
plt.imshow(image) |
|
|
|
test_input = image.reshape((1,256,256,3)) |
|
|
|
!pip install keras |
|
import keras |
|
model = keras.Sequential([ |
|
keras.layers.Dense(128, activation="relu"), |
|
keras.layers.Dense(64, activation="relu"), |
|
keras.layers.Dense(10, activation="softmax") |
|
]) |
|
|
|
!ls -l model |
|
|
|
!stat model |
|
|
|
!file model |
|
|
|
!pip show tensorflow |
|
|
|
model.predict(test_input) |
|
|
|
|