foreversheikh's picture
Upload 3 files
08d114f verified
import streamlit as st
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import load_model
from PIL import Image
import cv2
# Load the model
model = tf.keras.models.load_model("model_n.keras")
# Define class names
class_names = [
'Bush Clock Vine', 'Common Lanthana', 'Datura', 'Hibiscus', 'Jatropha', 'Marigold',
'Nityakalyani', 'Rose', 'Yellow_Daisy', 'adathoda', 'banana', 'champaka', 'chitrak',
'crown flower', "four o'clock flower", 'honeysuckle', 'indian mallow', 'malabar melastome',
'nagapoovu', 'pinwheel flower', 'shankupushpam', 'spider lily', 'sunflower', 'thechi',
'thumba', 'touch me not', 'tridax procumbens', 'wild_potato_vine'
]
# Title
st.title("Flower Identifier")
# Choose mode
mode = st.radio("Choose input method:", ["Upload Image", "Real-Time Camera"])
if mode == "Upload Image":
st.markdown("### Upload an image of a flower")
img = st.file_uploader("Choose an image", type=["jpg", "jpeg", "png"])
if img is not None:
st.image(img, caption="Uploaded Image", use_column_width=True)
image = Image.open(img).convert("RGB")
image = tf.keras.preprocessing.image.img_to_array(image)
image = tf.cast(image, tf.float32)
image = tf.expand_dims(image, 0)
if st.button("Identify Flower"):
prediction = model.predict(image)
predicted_class = np.argmax(prediction[0])
confidence = round(100 * np.max(prediction[0]), 2)
flower_name = class_names[predicted_class]
st.success(f"Predicted Flower: **{flower_name}**")
st.info(f"Confidence: **{confidence}%**")
elif mode == "Real-Time Camera":
st.markdown("### Real-Time Flower Recognition")
run = st.checkbox('Start Camera')
FRAME_WINDOW = st.image([])
cap = None
if run:
cap = cv2.VideoCapture(0)
while run:
ret, frame = cap.read()
if not ret:
st.warning("Failed to access camera.")
break
img_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img_array = tf.keras.preprocessing.image.img_to_array(img_rgb)
img_array = tf.expand_dims(tf.cast(img_array, tf.float32), 0)
predictions = model.predict(img_array)
predicted_class = np.argmax(predictions[0])
confidence = round(100 * np.max(predictions[0]), 2)
flower_name = class_names[predicted_class]
# Annotate frame
cv2.putText(frame, f"{flower_name} ({confidence}%)", (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)
FRAME_WINDOW.image(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
if cap:
cap.release()