James Gadoury
Feature: Improve classifiers
9483559
import streamlit as st
from fastai.vision.all import *
class Pipeline:
IS_IT_A_SINK_CLASSIFIER = load_learner("is_it_a_sink_classifier_11:34_11:26:2022.pkl")
DIRTY_OR_CLEAN_SINK_CLASSIFIER = load_learner("dirty_or_clean_classifier_11:33_11:26:2022.pkl")
def __init__(self):
pass
def classify(self, image):
classification, class_idx, prediction_probs = Pipeline.IS_IT_A_SINK_CLASSIFIER.predict(image)
if classification == "not_a_sink":
return classification, class_idx, prediction_probs
return Pipeline.DIRTY_OR_CLEAN_SINK_CLASSIFIER.predict(image)
st.title("Clean sink? Or dirty sink?")
file_name = st.file_uploader("Upload a picture of a sink")
classification_pipeline = Pipeline()
classification_statements = {
"not_a_sink": "This isn't a sink silly.",
"dirty_sink": "This is a dirty sink.",
"clean_sink": "This is a clean sink."
}
probability_modifier = lambda prob : col2.write("Though I might be wrong...") if prob < 0.8 else None
if file_name is not None:
col1, col2 = st.columns(2)
image = Image.open(file_name)
col1.image(image, use_column_width=True)
classification, class_idx, prediction_probs = classification_pipeline.classify(PILImage.create(file_name))
print(f"classification={classification}")
print(f"class_idx={class_idx}")
print(f"prediction_probs={prediction_probs}")
col2.header("Classification")
col2.subheader(classification_statements[classification])
probability_modifier(prediction_probs[class_idx].numpy())