|
import os |
|
os.environ["TF_USE_LEGACY_KERAS"] = "1" |
|
|
|
from keras.models import load_model |
|
import streamlit as st |
|
import numpy as np |
|
from io import BytesIO |
|
from PIL import Image |
|
import tensorflow as tf |
|
|
|
st.markdown( |
|
""" |
|
<style> |
|
.reportview-container { |
|
background: url('./bg.jpg'); |
|
background-size: cover; |
|
} |
|
</style> |
|
""", |
|
unsafe_allow_html=True |
|
) |
|
|
|
st.markdown("# Bananas Maturity Classification ") |
|
st.sidebar.markdown("# Main Page") |
|
|
|
MODEL = load_model("./1") |
|
|
|
CLASS_NAMES = ["Banana_G1", "Banana_G2", "Rotten"] |
|
|
|
|
|
def read_file_as_image(data) -> np.ndarray: |
|
image = np.array(Image.open(BytesIO(data))) |
|
return image |
|
|
|
|
|
def predict( |
|
file, |
|
): |
|
image = read_file_as_image(file.read()) |
|
shape = image.shape |
|
img_batch = np.expand_dims(image, 0) |
|
|
|
img_batch = tf.image.resize(img_batch, (256, 256)) |
|
prediction = MODEL.predict(img_batch) |
|
predicted_class = CLASS_NAMES[np.argmax(prediction[0])] |
|
confidence = np.max(prediction[0]) |
|
if predicted_class == "Banana_G2": |
|
predicted_class = "Green Banana- not ripen" |
|
elif predicted_class == "Banana_G1": |
|
predicted_class = "Mature Banana -ripen" |
|
else: |
|
predicted_class = "Rotten Banana" |
|
return { |
|
'class': predicted_class, |
|
'confidence': float(confidence) |
|
} |
|
|
|
|
|
st.write("Upload an image or capture one with your camera") |
|
|
|
option = st.selectbox("Choose an option", ["Upload Image", "Capture Image"]) |
|
|
|
if option == "Upload Image": |
|
uploaded_file = st.file_uploader("Choose an image", type=["jpg", "jpeg", "png"]) |
|
if uploaded_file is not None: |
|
result = predict(uploaded_file) |
|
predicted_class = result['class'] |
|
confidence = result['confidence'] |
|
if predicted_class == "Green Banana- not ripen": |
|
color = 'green' |
|
elif predicted_class == "Mature Banana -ripen": |
|
color = 'yellow' |
|
else: |
|
color = 'red' |
|
st.markdown( |
|
f'<p style="color:{color}; font-size:24px;">Predicted class: {predicted_class}, Confidence: {confidence:.2f}</p>', |
|
unsafe_allow_html=True) |
|
|