Spaces:
Sleeping
Sleeping
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()
|