Spaces:
Runtime error
Runtime error
| import tensorflow as tf | |
| import numpy as np | |
| from PIL import Image | |
| import gradio as gr | |
| import os | |
| # Load Keras model | |
| model = tf.keras.models.load_model("car_brand_classifier_final.h5") | |
| # Define the path to the dataset containing car brand folders | |
| DATASET_PATH = "Car_Sales_vision_ai_project" | |
| # Get the list of car brands (folder names) in the dataset | |
| CAR_BRANDS = sorted(os.listdir(DATASET_PATH)) | |
| # Ensure the CAR_BRANDS list contains only valid directories | |
| CAR_BRANDS = [brand for brand in CAR_BRANDS if os.path.isdir(os.path.join(DATASET_PATH, brand))] | |
| # Print the list of car brands for debugging | |
| print("Car brands:", CAR_BRANDS) | |
| # Define the preprocessing function | |
| def preprocess_image(image): | |
| """ | |
| Preprocess the input image for the model. | |
| """ | |
| if isinstance(image, np.ndarray): # If Gradio gives a NumPy array, convert it to PIL Image | |
| image = Image.fromarray(image) | |
| # Check if the image is valid | |
| if image is None or image.size == 0: | |
| raise ValueError("Invalid or blank image uploaded.") | |
| image = image.convert("RGB") # Ensure it's in RGB mode | |
| image = image.resize((299, 299)) # Resize to match model input size | |
| image = np.array(image) / 255.0 # Normalize pixel values | |
| image = np.expand_dims(image, axis=0) # Add batch dimension | |
| return image | |
| # Define the prediction function | |
| def predict(image): | |
| """ | |
| Predict the car brand and return the predicted brand and sample images. | |
| """ | |
| try: | |
| # Preprocess the image | |
| processed_image = preprocess_image(image) | |
| # Make a prediction | |
| predictions = model.predict(processed_image) | |
| predicted_class_index = np.argmax(predictions, axis=1)[0] | |
| predicted_brand = CAR_BRANDS[predicted_class_index] | |
| # Debugging: Print the predicted brand | |
| print(f"Predicted brand: {predicted_brand}") | |
| # Get sample images from the predicted brand folder | |
| brand_folder = os.path.join(DATASET_PATH, predicted_brand) | |
| print(f"Predicted brand folder: {brand_folder}") | |
| sample_images = [] | |
| if os.path.exists(brand_folder): | |
| print(f"Found {len(os.listdir(brand_folder))} files in the folder.") | |
| for filename in os.listdir(brand_folder)[:5]: # Limit to 5 sample images | |
| img_path = os.path.join(brand_folder, filename) | |
| if os.path.isfile(img_path): | |
| sample_images.append(Image.open(img_path).resize((200, 200))) # Resize for consistency | |
| else: | |
| print("Brand folder does not exist.") | |
| # Return the predicted brand and sample images as separate outputs | |
| return predicted_brand, sample_images or ["No images found for this brand."] | |
| except Exception as e: | |
| print(f"Error during prediction: {e}") | |
| return "Error", ["An error occurred during prediction."] | |
| # Create the Gradio interface | |
| iface = gr.Interface( | |
| fn=predict, | |
| inputs=gr.Image(type="numpy"), # Ensure Gradio passes a NumPy array | |
| outputs=[ | |
| gr.Textbox(label="Predicted Brand"), | |
| gr.Gallery(label="Sample Images") # Display images in a gallery | |
| ], | |
| title="Car Vision", | |
| description="Upload an image of a car to classify its brand and view sample images." | |
| ) | |
| # Launch the app | |
| iface.launch(share=True) |