File size: 5,495 Bytes
7c6c8b9
f054618
7c6c8b9
 
f054618
 
7c6c8b9
f054618
7c6c8b9
f054618
 
7c6c8b9
 
 
 
 
 
 
a44e524
 
 
 
 
 
7c6c8b9
f054618
 
 
 
a44e524
f054618
a44e524
 
 
 
 
 
f054618
7c6c8b9
f054618
 
 
 
 
 
 
a44e524
 
 
 
 
 
 
 
f054618
 
 
a44e524
f054618
a44e524
f054618
 
 
 
 
 
a44e524
f054618
 
 
 
 
 
a44e524
f054618
 
a44e524
f054618
 
a44e524
f054618
 
 
 
 
 
 
7c6c8b9
 
f054618
 
 
 
 
a44e524
 
f054618
 
a44e524
f054618
7c6c8b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f054618
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
import os
import gradio as gr
import streamlit as st
from groq import Groq
import numpy as np
from PIL import Image
from tensorflow.keras.models import load_model

# Load Pneumonia Detection Model
model = load_model('xray_image_classifier_model.keras')

# Set up Groq API Key
GROQ_API_KEY = "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"
os.environ["GROQ_API_KEY"] = GROQ_API_KEY

# Initialize the Groq client
client = Groq(api_key=GROQ_API_KEY)

# Define solutions
solutions = {
    "Pneumonia": "Consult a doctor immediately. Follow prescribed antibiotics if given, rest well, and stay hydrated.",
    "Normal": "Your X-ray appears normal. However, if you experience symptoms, consult a doctor for further evaluation."
}

# Prediction Function
def predict(image):
    img = image.resize((150, 150))
    img_array = np.array(img) / 255.0
    img_array = np.expand_dims(img_array, axis=0)
    
    prediction = model.predict(img_array)
    predicted_class = "Pneumonia" if prediction > 0.5 else "Normal"
    
    # Get the corresponding solution
    solution = solutions.get(predicted_class, "No specific advice available.")
    
    return predicted_class, solution

# CSS Styling for Gradio
css = """
    .gradio-container {
        background-color: #f5f5f5;
        font-family: Arial, sans-serif;
    }
    
    .gr-button {
        background-color:#007bff;
        color: white; 
        border: none;
        border-radius: 5px;
        font-size: 16px;
        padding: 10px 20px;
        cursor: pointer;
        transition: background-color 0.3s ease;
    }

    .gr-button:hover {
        background-color: #0056b3;
    }

    .gr-textbox, .gr-image {
        border: 2px dashed #007bff;
        padding: 20px;
        border-radius: 10px;
        background-color: #ffffff;
    }

    .gr-box-text {
        color: #007bff;
        font-size: 22px;
        font-weight: bold;
        text-align: center;
    }

    h1 {
        font-size: 36px;
        color: #007bff;
        text-align: center;
    }

    p {
        font-size: 20px;
        color: #333;
        text-align: center;
    }
"""

# Gradio UI for Pneumonia Detection
with gr.Blocks(css=css) as gradio_interface:
    gr.Markdown("<h1>Automated Pneumonia Detection via Chest X-ray Classification</h1>")
    gr.Markdown("<p>Submit a chest X-ray image below.</p>")
    
    with gr.Row():
        image_input = gr.Image(label="Drop Image Here", type="pil", elem_classes=["gr-image", "gr-box-text"])
        output_prediction = gr.Textbox(label="Model Analysis Output", elem_classes=["gr-textbox", "gr-box-text"])
        output_solution = gr.Textbox(label="Recommended Solution", elem_classes=["gr-textbox", "gr-box-text"])

    submit_btn = gr.Button("Initiate Diagnostic Analysis", elem_classes=["gr-button"])
    submit_btn.click(fn=predict, inputs=image_input, outputs=[output_prediction, output_solution])
    
    gr.Markdown("<h3>Note:</h3> <p>The AI model provides an initial assessment. Always consult a doctor for final diagnosis.</p>")

# Streamlit UI for Disease Chatbot
st.set_page_config(page_title="AI Health Assistant", page_icon="🩺", layout="wide")
st.title("🩺 AI Health Assistant")
st.write("Welcome! Upload an X-ray for pneumonia detection or ask the chatbot about diseases.")

# Sidebar Theme Settings
st.sidebar.header("⚙️ Settings")
chat_theme = st.sidebar.radio("Choose a theme:", ["Light", "Dark", "Blue", "Green"])

if chat_theme == "Dark":
    st.markdown("""
        <style>
            body {background-color: #1e1e1e; color: white;}
            .stButton>button {background-color: #4CAF50; color: white;}
            .chat-bubble {background-color: #2c2c2c; border-radius: 10px; padding: 10px;}
        </style>
    """, unsafe_allow_html=True)
elif chat_theme == "Blue":
    st.markdown("""
        <style>
            body {background-color: #e3f2fd; color: black;}
            .stButton>button {background-color: #2196F3; color: white;}
            .chat-bubble {background-color: #bbdefb; border-radius: 10px; padding: 10px;}
        </style>
    """, unsafe_allow_html=True)
elif chat_theme == "Green":
    st.markdown("""
        <style>
            body {background-color: #e8f5e9; color: black;}
            .stButton>button {background-color: #4CAF50; color: white;}
            .chat-bubble {background-color: #c8e6c9; border-radius: 10px; padding: 10px;}
        </style>
    """, unsafe_allow_html=True)

# Chatbot Function
def generate_chatbot_response(user_message):
    if "who created you" in user_message.lower():
        return "I was created by Abdel Basit. 😊"
    
    prompt = f"You are a helpful AI chatbot for medical guidance. The user is asking: {user_message}. Provide a detailed, professional response."
    
    chat_completion = client.chat.completions.create(
        messages=[{"role": "user", "content": prompt}],
        model="llama3-8b-8192",
    )
    
    return chat_completion.choices[0].message.content

# Chatbot Interface
st.markdown("### 💬 Chat with the AI Health Assistant")
user_input = st.chat_input("Ask me a health-related question:")

if user_input:
    chatbot_response = generate_chatbot_response(user_input)
    st.markdown(f"**You:** {user_input}")
    st.markdown(f"**AI:** {chatbot_response}")

# Launch Gradio Interface in Streamlit
st.markdown("---")
st.markdown("## 🔬 Pneumonia Detection System")
with st.expander("Click here to open the AI Pneumonia Detection System"):
    gradio_interface.launch()