Spaces:
Build error
Build error
| import streamlit as st | |
| import tensorflow as tf | |
| import numpy as np | |
| from PIL import Image | |
| from huggingface_hub import hf_hub_download | |
| import os | |
| # Suppress warnings | |
| import warnings | |
| warnings.filterwarnings("ignore") | |
| # Set page configuration | |
| st.set_page_config( | |
| page_title="ChestAI - Pneumonia Detection", | |
| page_icon="🫁", | |
| initial_sidebar_state="auto", | |
| ) | |
| # Hide Streamlit style | |
| hide_streamlit_style = """ | |
| <style> | |
| #MainMenu {visibility: hidden;} | |
| footer {visibility: hidden;} | |
| </style> | |
| """ | |
| st.markdown(hide_streamlit_style, unsafe_allow_html=True) | |
| # Function to load the model | |
| def load_model(): | |
| try: | |
| # Download the model directory | |
| model_dir = hf_hub_download(repo_id="ryefoxlime/PneumoniaDetection", repo_type="model", library="tf", cache_dir="/home/user/.cache/huggingface/hub") | |
| # Load the model using tf.saved_model.load | |
| model = tf.saved_model.load(model_dir) | |
| return model | |
| except Exception as e: | |
| st.error(f"Error loading model: {str(e)}") | |
| return None | |
| # Load the model | |
| with st.spinner("Model is being loaded..."): | |
| model = load_model() | |
| if model is None: | |
| st.error("Failed to load model. Please try again.") | |
| st.stop() | |
| # Sidebar for app information | |
| with st.sidebar: | |
| st.title("ChestAI") | |
| st.markdown(""" | |
| ### About | |
| ChestAI uses advanced deep learning to detect pneumonia in chest X-rays. | |
| ### How to use | |
| 1. Upload a chest X-ray image (JPG/PNG) | |
| 2. Wait for the analysis | |
| 3. View the results and confidence score | |
| ### Note | |
| This tool is for educational purposes only. Always consult healthcare professionals for medical advice. | |
| """) | |
| st.set_option("deprecation.showfileUploaderEncoding", False) | |
| # File uploader for image input | |
| file = st.file_uploader("Upload a chest X-ray image", type=["jpg", "png"]) | |
| def import_and_predict(image_data, model): | |
| img_array = tf.keras.preprocessing.image.img_to_array(image_data) | |
| img_array = np.expand_dims(img_array, axis=0) # Add batch dimension | |
| img_array = img_array / 255.0 # Normalize the image | |
| # Perform prediction | |
| predictions = model(img_array) # Call the model for prediction | |
| return predictions | |
| # Class names for prediction results | |
| class_names = ["Normal", "PNEUMONIA"] | |
| if file is None: | |
| st.text("Please upload an image file") | |
| else: | |
| try: | |
| image = tf.keras.preprocessing.image.load_img(file, target_size=(224, 224), color_mode='rgb') | |
| st.image(image, caption="Uploaded Image.", use_column_width=True) | |
| predictions = import_and_predict(image, model) | |
| predicted_class = np.argmax(predictions) # Get the index of the highest prediction | |
| confidence = float(predictions[0][predicted_class] * 100) # Confidence percentage | |
| # Display the results | |
| st.info(f"Confidence: {confidence:.2f}%") | |
| if class_names[predicted_class] == "Normal": | |
| st.balloons() | |
| st.success(f"Result: {class_names[predicted_class]}") | |
| else: | |
| st.warning(f"Result: {class_names[predicted_class]}") | |
| except Exception as e: | |
| st.error(f"Error processing image: {str(e)}") | |