Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| import os | |
| import PIL | |
| import tensorflow as tf | |
| from tensorflow import keras | |
| from tensorflow.keras import layers | |
| from tensorflow.keras.models import Sequential | |
| from PIL import Image | |
| import gdown | |
| import zipfile | |
| import pathlib | |
| # Define the Google Drive shareable link | |
| gdrive_url = 'https://drive.google.com/file/d/1HjHYlQyRz5oWt8kehkt1TiOGRRlKFsv8/view?usp=drive_link' | |
| # Extract the file ID from the URL | |
| file_id = gdrive_url.split('/d/')[1].split('/view')[0] | |
| direct_download_url = f'https://drive.google.com/uc?id={file_id}' | |
| # Define the local filename to save the ZIP file | |
| local_zip_file = 'file.zip' | |
| # Download the ZIP file | |
| gdown.download(direct_download_url, local_zip_file, quiet=False) | |
| # Directory to extract files | |
| extracted_path = 'extracted_files' | |
| # Verify if the downloaded file is a ZIP file and extract it | |
| try: | |
| with zipfile.ZipFile(local_zip_file, 'r') as zip_ref: | |
| zip_ref.extractall(extracted_path) | |
| print("Extraction successful!") | |
| except zipfile.BadZipFile: | |
| print("Error: The downloaded file is not a valid ZIP file.") | |
| # Optionally, you can delete the ZIP file after extraction | |
| os.remove(local_zip_file) | |
| # Convert the extracted directory path to a pathlib.Path object | |
| data_dir = pathlib.Path(extracted_path) | |
| # Print the directory structure to debug | |
| for root, dirs, files in os.walk(extracted_path): | |
| level = root.replace(extracted_path, '').count(os.sep) | |
| indent = ' ' * 4 * (level) | |
| print(f"{indent}{os.path.basename(root)}/") | |
| subindent = ' ' * 4 * (level + 1) | |
| for f in files: | |
| print(f"{subindent}{f}") | |
| # Path to the dataset directory | |
| import pathlib | |
| # Path to the dataset directory | |
| data_dir = pathlib.Path('extracted_files/Pest_Dataset') | |
| data_dir = pathlib.Path(data_dir) | |
| bees = list(data_dir.glob('bees/*')) | |
| print(bees[0]) | |
| PIL.Image.open(str(bees[0])) | |
| img_height,img_width=180,180 | |
| batch_size=32 | |
| train_ds = tf.keras.preprocessing.image_dataset_from_directory( | |
| data_dir, | |
| validation_split=0.2, | |
| subset="training", | |
| seed=123, | |
| image_size=(img_height, img_width), | |
| batch_size=batch_size) | |
| val_ds = tf.keras.preprocessing.image_dataset_from_directory( | |
| data_dir, | |
| validation_split=0.2, | |
| subset="validation", | |
| seed=123, | |
| image_size=(img_height, img_width), | |
| batch_size=batch_size) | |
| class_names = train_ds.class_names | |
| print(class_names) | |
| import matplotlib.pyplot as plt | |
| plt.figure(figsize=(10, 10)) | |
| for images, labels in train_ds.take(1): | |
| for i in range(9): | |
| ax = plt.subplot(3, 3, i + 1) | |
| plt.imshow(images[i].numpy().astype("uint8")) | |
| plt.title(class_names[labels[i]]) | |
| plt.axis("off") | |
| num_classes = 12 | |
| model = Sequential([ | |
| layers.experimental.preprocessing.Rescaling(1./255, input_shape=(img_height, img_width, 3)), | |
| layers.Conv2D(16, 3, padding='same', activation='relu'), | |
| layers.MaxPooling2D(), | |
| layers.Conv2D(32, 3, padding='same', activation='relu'), | |
| layers.MaxPooling2D(), | |
| layers.Conv2D(64, 3, padding='same', activation='relu'), | |
| layers.MaxPooling2D(), | |
| layers.Flatten(), | |
| layers.Dense(128, activation='relu'), | |
| layers.Dense(num_classes,activation='softmax') | |
| ]) | |
| model.compile(optimizer='adam', | |
| loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), | |
| metrics=['accuracy']) | |
| epochs=10 | |
| history = model.fit( | |
| train_ds, | |
| validation_data=val_ds, | |
| epochs=epochs | |
| ) | |
| import gradio as gr | |
| import numpy as np | |
| import tensorflow as tf | |
| def predict_image(img): | |
| img = np.array(img) | |
| img_resized = tf.image.resize(img, (180, 180)) | |
| img_4d = tf.expand_dims(img_resized, axis=0) | |
| prediction = model.predict(img_4d)[0] | |
| return {class_names[i]: float(prediction[i]) for i in range(len(class_names))} | |
| image = gr.Image() | |
| label = gr.Label(num_top_classes=5) | |
| # Define custom CSS for background image | |
| custom_css = """ | |
| body { | |
| background-image: url('\extracted_files\Pest_Dataset\bees\bees (444).jpg'); | |
| background-size: cover; | |
| background-repeat: no-repeat; | |
| background-attachment: fixed; | |
| color: white; | |
| } | |
| """ | |
| gr.Interface( | |
| fn=predict_image, | |
| inputs=image, | |
| outputs=label, | |
| title="Pest Classification", | |
| description="Upload an image of a pest to classify it into one of the predefined categories.", | |
| css=custom_css | |
| ).launch(debug=True) |