WBCClassifier / app.py
elsoori's picture
Update app.py
62b8c0c verified
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.")