Spaces:
Build error
Build error
| """ | |
| IM 417 Classification | |
| """ | |
| import cv2 | |
| import numpy as np | |
| import os | |
| import streamlit as st | |
| import tempfile | |
| from streamlit_drawable_canvas import st_canvas | |
| from tensorflow import keras | |
| from huggingface_hub import from_pretrained_keras | |
| from transformers import AutoModel | |
| # Load the model (using a Streamlit caching mechanism for efficiency) | |
| #@st.cache(allow_output_mutation=True) # Allow model mutation for prediction | |
| def load_model(): | |
| try: | |
| model = from_pretrained_keras("tomeheya/IM-417-128x128-classification", force_download=True) | |
| #model = AutoModel.from_pretrained("tomeheya/IM-417-128x128-classification") | |
| print("Model loaded successfully!") | |
| return model | |
| except Exception as e: | |
| print(f"Error loading model: {e}") | |
| return None | |
| # Function to preprocess the input image | |
| def preprocess_image(image): | |
| image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| image = cv2.bitwise_not(image) | |
| image = np.expand_dims(image, axis=-1) # Add channel dimension | |
| image = image / 255.0 # Normalize pixel values | |
| return image | |
| # Function to perform inference | |
| def predict(image): | |
| model = load_model() | |
| if not model: | |
| return "Model couldn't be loaded !!!" | |
| preprocessed_image = preprocess_image(image) | |
| preprocessed_image = np.expand_dims(preprocessed_image, axis=0) # Add batch dimension | |
| prediction = model.predict(preprocessed_image) | |
| predicted_label = decode_prediction(prediction) | |
| return predicted_label | |
| # Function to decode the model prediction | |
| def decode_prediction(prediction): | |
| # Decode the prediction based on your model's output format | |
| # For example, if your model outputs class probabilities: | |
| class_idx = np.argmax(prediction) | |
| predicted_label = "IM-417 sign number :: " + str(class_idx + 1) | |
| return predicted_label | |
| # Initialize the canvas | |
| canvas_result = st_canvas( | |
| fill_color="rgba(255, 165, 0, 0.3)", | |
| stroke_width=3, | |
| stroke_color="rgba(0, 0, 0, 1)", | |
| background_color="rgba(255, 255, 255, 1)", | |
| height=128, | |
| width=128, | |
| update_streamlit=True, | |
| key="canvas" | |
| ) | |
| # Add a submit button | |
| if st.button("Submit"): | |
| if canvas_result.json_data: | |
| image_from_canvas = canvas_result.image_data | |
| st.text(f"Original data: {len(image_from_canvas)}") | |
| preprocessed_image = preprocess_image(image_from_canvas) | |
| predicted_label = predict(preprocessed_image) | |
| st.text(f"Predicted label: {predicted_label}") | |
| else: | |
| st.text("Please draw an image on the canvas before submitting.") | |
| # Streamlit app layout | |
| st.title("IM 417 Classification") | |