Spaces:
Build error
Build error
File size: 3,825 Bytes
4b775e2 ea650af 4b775e2 1fdf243 4b775e2 1fdf243 4b775e2 1fdf243 4b775e2 ea650af 1fdf243 4b775e2 ea650af 1fdf243 ea650af 4b775e2 1fdf243 4b775e2 1fdf243 4b775e2 1fdf243 4b775e2 1fdf243 4b775e2 1fdf243 4b775e2 1fdf243 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | import pathlib
import time
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
import streamlit as st
from fastai.vision.all import load_learner
from PIL import Image
@st.cache_resource
def load_model():
return load_learner("model/export.pkl")
@st.cache_resource
def load_picture(img_path):
print(img_path)
return Image.open(img_path)
model = load_model()
if "selected_image_path" not in st.session_state:
st.session_state.selected_image_path = None
if "uploader_key" not in st.session_state:
st.session_state.uploader_key = 0
st.title("Image Upload with Drag-and-Drop")
uploaded_file = st.file_uploader(
"Drag and drop an image file here, or click to select",
type=["jpg", "jpeg", "png"],
key=f"uploader_{st.session_state.uploader_key}",
)
if uploaded_file is not None:
st.session_state.selected_image_path = uploaded_file
# image = Image.open(uploaded_file)
image = load_picture(st.session_state.selected_image_path)
st.image(image, caption="Uploaded Image", width=200)
st.write("Image uploaded successfully!")
def get_predictions(image, model):
labels = [
"apple",
"banana",
"beetroot",
"bell pepper",
"cabbage",
"capsicum",
"carrot",
"cauliflower",
"chilli pepper",
"corn",
"cucumber",
"eggplant",
"garlic",
"ginger",
"grapes",
"jalepeno",
"kiwi",
"lemon",
"lettuce",
"mango",
"onion",
"orange",
"paprika",
"pear",
"peas",
"pineapple",
"pomegranate",
"potato",
"raddish",
"soy beans",
"spinach",
"sweetcorn",
"sweetpotato",
"tomato",
"turnip",
"watermelon",
]
prediction = model.predict(image)
results = pd.DataFrame(
{"labels": labels, "predictions": prediction[2].numpy().round(6)}
).sort_values(by="predictions", ascending=False)
return results, prediction[0]
st.title("Image Classification")
preselected_images = {
"Apple": "data/apple_Image_1.jpg",
"Banana": "data/banana_Image_1.jpg",
"Carrot": "data/carrot_Image_1.jpg",
"Tomato": "data/tomato_Image_1.jpg",
"Corn": "data/corn_Image_1.jpg",
}
st.subheader("Try Classifying These Images")
st.write("Select an image")
columns = st.columns(len(preselected_images))
def update_key():
st.session_state.uploader_key += 1
for i, (label, img_path) in enumerate(preselected_images.items()):
with columns[i]:
# presel_image = Image.open(img_path)
presel_image = load_picture(img_path)
presel_image = presel_image.resize((150, 150))
st.image(presel_image, caption=label, use_container_width=True)
if st.button(f"Select {label}", on_click=update_key):
st.session_state.selected_image_path = img_path
st.write(f"Selected image: {label}")
# image = Image.open(img_path)
image = load_picture(img_path)
st.image(image, caption="Uploaded Image", width=200)
st.write("Click the button below to classify the uploaded image.")
if st.button("Submit"):
if st.session_state.selected_image_path:
# image = Image.open(st.session_state.selected_image_path)
image = load_picture(st.session_state.selected_image_path)
st.image(image, caption="Selected Image", width=200)
results, prediction = get_predictions(image, model)
st.write(f"Prediction: {prediction}")
fig, ax = plt.subplots(figsize=(8, 5))
ax = sns.barplot(
data=results.iloc[:5],
x="predictions",
y="labels",
orient="h",
)
st.pyplot(fig) |