|
|
import streamlit as st |
|
|
import numpy as np |
|
|
import joblib |
|
|
from tensorflow.keras.applications.vgg16 import VGG16 |
|
|
from tensorflow.keras.preprocessing import image |
|
|
from tensorflow.keras.applications.vgg16 import preprocess_input |
|
|
from sklearn.svm import SVC |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@st.cache_resource |
|
|
def load_model(): |
|
|
|
|
|
vgg16_base = VGG16(weights='vgg16_weights.h5', include_top=False, input_shape=(224, 224, 3)) |
|
|
|
|
|
|
|
|
svm_vgg16 = joblib.load('svm_model_vgg16.joblib') |
|
|
return vgg16_base, svm_vgg16 |
|
|
|
|
|
|
|
|
def extract_features(model, img): |
|
|
img = np.expand_dims(img, axis=0) |
|
|
img = preprocess_input(img) |
|
|
features = model.predict(img) |
|
|
features = features.flatten() |
|
|
return features |
|
|
|
|
|
|
|
|
def predict_label(model, svm, img): |
|
|
features = extract_features(model, img) |
|
|
prediction = svm.predict([features]) |
|
|
labels = ['Mild_Demented', 'Moderate_Demented', 'Non_Demented', 'Very_Mild_Demented'] |
|
|
return labels[int(prediction[0])] |
|
|
|
|
|
|
|
|
st.title('Dementia Severity Prediction') |
|
|
st.write('Upload an MRI scan image to predict the dementia severity.') |
|
|
|
|
|
|
|
|
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "png"]) |
|
|
|
|
|
if uploaded_file is not None: |
|
|
|
|
|
img = np.array(image.load_img(uploaded_file, target_size=(224, 224))) |
|
|
|
|
|
|
|
|
vgg16_base, svm_vgg16 = load_model() |
|
|
|
|
|
|
|
|
prediction = predict_label(vgg16_base, svm_vgg16, img) |
|
|
|
|
|
|
|
|
st.image(uploaded_file, caption='Uploaded Image', use_column_width=True) |
|
|
st.write(f"Prediction: {prediction}") |