Spaces:
Sleeping
Sleeping
| 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() | |