jarif's picture
Update app.py
5f86926 verified
import numpy as np
import gradio as gr
import tensorflow as tf
from PIL import Image, ImageDraw, ImageFont
# Function to load the modified model without recompiling
def load_modified_model(model_path):
return tf.keras.models.load_model(model_path)
# Load the trained model
print("Loading model...")
model = load_modified_model('food_model_1.h5')
print("Model loaded successfully.")
# Function to classify food vs. non-food image using the loaded model
def classify_food_vs_nonfood(image):
try:
# Convert image to PIL Image object if it's not already
if not isinstance(image, Image.Image):
image = Image.fromarray(image)
# Convert image to RGB mode if it's not already
if image.mode != "RGB":
image = image.convert("RGB")
# Preprocess image
image_size = (224, 224)
image_resized = image.resize(image_size)
image_np = np.array(image_resized) / 255.0
image_np_expanded = np.expand_dims(image_np, axis=0)
# Make prediction
prediction = model.predict(image_np_expanded)
final_prediction = np.argmax(prediction[0])
# Display result
results = {0: 'Food', 1: 'Non Food'}
label = results[final_prediction]
# Create a draw object
draw = ImageDraw.Draw(image)
# Determine label color and font size based on prediction
if final_prediction == 0:
label_color = (255, 0, 0) # Red for "Food"
text_font = ImageFont.truetype("Hack-Regular.ttf", 24) # Font size for "Food"
text_bbox = draw.textbbox((0, 0), label, font=text_font)
text_size = (text_bbox[2] - text_bbox[0], text_bbox[3] - text_bbox[1])
text_position = ((image_size[0] - text_size[0]) // 2, 10)
else:
label_color = (0, 255, 0) # Green for "Non Food"
text_font = ImageFont.truetype("Hack-Regular.ttf", 48) # Increased font size for "Non Food"
text_bbox = draw.textbbox((0, 0), label, font=text_font)
text_size = (text_bbox[2] - text_bbox[0], text_bbox[3] - text_bbox[1])
text_position = ((image_size[0] - text_size[0]) // 2, (image_size[1] - text_size[1]) // 2)
# Add text to the image
draw.text(text_position, label, fill=label_color, font=text_font)
# Return modified image as a PIL Image object
return image
except Exception as e:
print("Error processing image:", e)
# Return a blank white image
return Image.new("RGB", (224, 224), (255, 255, 255))
# Define input component
image_input = "image"
# Define example images as file paths
ex_image_paths = ['image_1.jpeg', 'image_2.jpeg', 'image_3.jpeg', 'image_4.jpg', 'image_5.jpg']
# Launch Gradio interface with example images
food_vs_nonfood_interface = gr.Interface(classify_food_vs_nonfood,
inputs=image_input,
outputs="image",
title="Food vs NonFood Classifier",
description="Upload an image to classify whether it's food or non-food.",
examples=ex_image_paths)
food_vs_nonfood_interface.launch(inline=False)