Spaces:
Runtime error
Runtime error
Download app.py from rangerrRed/Prediction: direct link, hf CLI and curl.
- Browser
- Download file 5.83 kB
-
https://huggingface.co/spaces/rangerrRed/Prediction/resolve/main/app.py
- Command line
-
hf download hf://spaces/rangerrRed/Prediction/app.py
-
curl -L -o app.py https://huggingface.co/spaces/rangerrRed/Prediction/resolve/main/app.py
5.83 kB
| import streamlit as st | |
| from PIL import Image | |
| from chest_utils import predict_chest, condition_questions | |
| from heart_utils import predict_heart | |
| st.set_page_config(page_title="π©Ί Disease Prediction App", layout="centered") | |
| # Initialize session state | |
| if "page" not in st.session_state: | |
| st.session_state.page = "heart" | |
| st.title("π©Ί Disease Prediction App") | |
| st.markdown("Follow the steps to assess your Heart, Chest, and Combined Health Risk.") | |
| # Custom styled result display | |
| def styled_result(label, result, icon, disease_detected): | |
| if disease_detected: | |
| bg = "#f8d7da" # light red | |
| color = "#a94442" | |
| else: | |
| bg = "#d4edda" # light green | |
| color = "#155724" | |
| st.markdown( | |
| f''' | |
| <div style="background-color:{bg}; padding:10px; border-radius:5px; color:{color};"> | |
| {icon} <strong>{label}: {result}</strong> | |
| </div> | |
| ''', | |
| unsafe_allow_html=True | |
| ) | |
| # βββββββββββββ Step 1: Heart Disease Prediction βββββββββββββ # | |
| if st.session_state.page == "heart": | |
| # Common Inputs | |
| st.session_state.age = st.slider("Age", 1, 100, 30) | |
| gender = st.selectbox("Gender", ["Male", "Female"]) | |
| st.session_state.gender = gender | |
| st.session_state.sex = 1 if gender == "Male" else 0 | |
| st.header("β€οΈ Step 1: Heart Disease Prediction") | |
| # Heart-related Inputs | |
| st.session_state.cp = st.selectbox("Chest Pain Type", [0, 1, 2, 3]) | |
| st.session_state.trestbps = st.number_input("Resting Blood Pressure", min_value=80, max_value=200, value=120) | |
| st.session_state.chol = st.number_input("Serum Cholesterol (mg/dl)", min_value=100, max_value=600, value=200) | |
| st.session_state.fbs = st.selectbox("Fasting Blood Sugar > 120 mg/dl", [1, 0]) | |
| st.session_state.restecg = st.selectbox("Resting ECG", [0, 1, 2]) | |
| st.session_state.thalach = st.number_input("Max Heart Rate Achieved", min_value=60, max_value=220, value=150) | |
| st.session_state.exang = st.selectbox("Exercise Induced Angina", [1, 0]) | |
| st.session_state.oldpeak = st.number_input("ST Depression", min_value=0.0, max_value=6.0, value=1.0) | |
| st.session_state.slope = st.selectbox("Slope of ST Segment", [0, 1, 2]) | |
| st.session_state.ca = st.selectbox("Number of Major Vessels", [0, 1, 2, 3]) | |
| st.session_state.thal = st.selectbox("Thalassemia", [1, 2, 3]) | |
| if st.button("Next β Chest Symptoms"): | |
| st.session_state.heart_result = predict_heart( | |
| st.session_state.age, st.session_state.sex, st.session_state.cp, st.session_state.trestbps, | |
| st.session_state.chol, st.session_state.fbs, st.session_state.restecg, st.session_state.thalach, | |
| st.session_state.exang, st.session_state.oldpeak, st.session_state.slope, | |
| st.session_state.ca, st.session_state.thal | |
| ) | |
| # Show heart prediction immediately before proceeding | |
| styled_result("Heart Disease Prediction", st.session_state.heart_result, "β€οΈ", st.session_state.heart_result == "Heart Disease Detected") | |
| st.session_state.page = "chest" | |
| st.rerun() | |
| # βββββββββββββ Step 2: Chest Disease Symptoms βββββββββββββ # | |
| elif st.session_state.page == "chest": | |
| st.header("π« Step 2: Chest Disease Symptoms") | |
| st.markdown(f"βΉοΈ Using Age:β―**{st.session_state.age}**, Gender:β―**{st.session_state.gender}**") | |
| st.session_state.position = st.selectbox("View Position", ["PA", "AP"]) | |
| uploaded_file = st.file_uploader("Upload Chest X-ray", type=["jpg", "jpeg", "png"]) | |
| if uploaded_file: | |
| st.session_state.image = Image.open(uploaded_file) | |
| st.image(st.session_state.image, caption="Uploaded Chest X-ray", use_container_width=True) | |
| st.subheader("Answer the following clinical questions:") | |
| st.session_state.conditions = [] | |
| for question in condition_questions: | |
| st.session_state.conditions.append(1 if st.checkbox(question) else 0) | |
| if st.button("Next β Combined Prediction"): | |
| if uploaded_file: | |
| st.session_state.page = "combined" | |
| st.rerun() | |
| else: | |
| st.warning("β οΈ Please upload a chest X-ray to continue.") | |
| # βββββββββββββ Step 3: Combined Prediction Results βββββββββββββ # | |
| elif st.session_state.page == "combined": | |
| st.header("π Step 3: Combined Prediction Results") | |
| chest_result = predict_chest( | |
| st.session_state.age, | |
| st.session_state.gender, | |
| st.session_state.position, | |
| st.session_state.conditions | |
| ) | |
| heart_result = st.session_state.heart_result | |
| st.image(st.session_state.image, caption="Uploaded Chest X-ray", use_container_width=True) | |
| styled_result("Chest Disease Prediction", chest_result, "π«", chest_result == "Chest Disease Detected") | |
| styled_result("Heart Disease Prediction", heart_result, "β€οΈ", heart_result == "Heart Disease Detected") | |
| # Combined risk display | |
| if "Detected" in chest_result or "Detected" in heart_result: | |
| st.markdown( | |
| ''' | |
| <div style="background-color:#f8d7da; padding:10px; border-radius:5px; color:#a94442;"> | |
| β οΈ <strong>Combined Risk: High</strong> β Immediate attention recommended. | |
| </div> | |
| ''', | |
| unsafe_allow_html=True | |
| ) | |
| else: | |
| st.markdown( | |
| ''' | |
| <div style="background-color:#d4edda; padding:10px; border-radius:5px; color:#155724;"> | |
| β <strong>Combined Risk: Low</strong> β You seem to be in good health.4 | |
| </div> | |
| ''', | |
| unsafe_allow_html=True | |
| ) | |
| if st.button("π Start Over"): | |
| st.session_state.clear() | |
| st.rerun() |