File size: 2,371 Bytes
3c4d877
 
 
 
 
 
 
 
 
934e107
3c4d877
 
 
 
 
 
 
 
 
 
 
1db9a6e
 
 
 
f1bea19
a00b28d
 
 
 
e769983
 
ca99111
a00b28d
 
e769983
a00b28d
 
3c4d877
 
a00b28d
3c4d877
 
 
 
 
1db9a6e
cd196c7
3c4d877
 
 
 
 
 
 
 
 
 
 
1db9a6e
f1bea19
3c4d877
 
 
f1bea19
3c4d877
 
1db9a6e
 
890a9f7
1db9a6e
c496c70
 
 
 
ec81163
c496c70
890a9f7
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import streamlit as st
import gradio as gr
import cv2
import numpy as np
from tensorflow.keras.models import load_model
from tensorflow.keras.applications.vgg16 import preprocess_input
from tensorflow.keras.preprocessing import image

# Loading Models
braintumor_model = load_model('models/brain_tumor_binary.h5')

# Configuring Streamlit
st.set_page_config(page_title="Brain Tumor Prediction App", page_icon=":brain:")

def preprocess_imgs(set_name, img_size):
    set_new = []
    for img in set_name:
        img = cv2.resize(img, dsize=img_size, interpolation=cv2.INTER_CUBIC)
        set_new.append(preprocess_input(img))
    return np.array(set_new)

# Handle binary decision
def binary_decision(confidence):
    return 1 if confidence >= 0.5 else 0

def predict_braintumor(img):
    # If it's a NumPy array, use it directly
    if isinstance(img, np.ndarray):
        img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
    else:
        # Convert Gradio image data to bytes
        img_bytes = img.read()

        # Convert to NumPy array
        nparr = np.frombuffer(img_bytes, np.uint8)

        # Decode image
        img_gray = cv2.imdecode(nparr, cv2.IMREAD_GRAYSCALE)

    # Crop and preprocess the grayscale image
    img_processed = preprocess_imgs([img_gray], (224, 224))

    # Make prediction
    pred = braintumor_model.predict(img_processed)

    # Handle binary decision
    confidence = pred[0][0]
    return "Brain Tumor Not Found!" if binary_decision(confidence) == 1 else "Brain Tumor Found!"

def main():
    st.title("Brain Tumor Prediction App")

    uploaded_file = st.file_uploader("Choose an image...", type=["png", "jpg", "jpeg"])

    if uploaded_file is not None:
        st.image(uploaded_file, caption="Uploaded Image.", use_column_width=True)
        st.write("")
        st.write("Classifying...")

        # Make prediction
        result = predict_braintumor(uploaded_file)

        # Display prediction
        st.subheader("Prediction:")
        st.success(result)

if __name__ == "__main__":
    # Streamlit app
    main()

    # Gradio interface
    iface = gr.Interface(
        fn=predict_braintumor,
        inputs="image",
        outputs="text",
        examples=[["examples/1_no.jpeg"], ["examples/2_no.jpeg"], ["examples/3_no.jpg"], ["examples/Y1.jpg"], ["examples/Y2.jpg"], ["examples/Y3.jpg"]]
    )
    iface.launch()