Spaces:
Sleeping
Sleeping
import streamlit as st | |
import PIL.Image as Image | |
import numpy as np | |
import pandas as pd | |
import requests | |
from io import BytesIO | |
from fastai.vision.all import load_learner | |
# Initialize Streamlit app | |
st.title("White Blood Cell Classifier") | |
# Add a description or subtitle | |
st.markdown(""" | |
This app allows you to classify white blood cells from an uploaded image. | |
You can upload an image of a blood sample, and the app will predict the type of white blood cell present. | |
Choose from various cell types like eosinophil, lymphocyte, monocyte, and neutrophil. | |
Note: To get the best results, please make sure there is only one WBC in the image. This model has not been trained on basophils. | |
""") | |
# Load the FastAI model for WBC identification | |
fastai_model = load_learner('model1.pkl') | |
# File uploader for image input | |
uploaded_file = st.file_uploader("Upload an image for classification", type=["jpg", "png"]) | |
if uploaded_file: | |
# Open the uploaded image | |
image = Image.open(uploaded_file).convert('RGB') | |
# Display the uploaded image with a caption | |
st.image(image, caption="Reduced Size Image", use_column_width=False, width=150) # 150 pixels wide | |
# Perform inference with the FastAI model | |
pred, idx, probs = fastai_model.predict(image) | |
# Display a title for the results section | |
st.subheader("White Blood Cell Classification Results") | |
# Define categories for classification | |
categories = ('EOSINOPHIL', 'LYMPHOCYTE', 'MONOCYTE', 'NEUTROPHIL') | |
# Create a DataFrame with classification probabilities | |
results_df = pd.DataFrame( | |
{'Cell Type': categories, 'Probability': probs.tolist()} | |
) | |
# Highlight the most likely class | |
most_likely_class = categories[idx] | |
st.success(f"Predicted Class: {most_likely_class}") | |
# Additional information about the probabilities | |
st.write("Detailed Classification Results:") | |
st.table(results_df) | |
# Display the probabilities as a bar chart | |
st.bar_chart(results_df.set_index('Cell Type')) | |
else: | |
st.warning("Upload an image to start classification.") | |