radub23
Integrate FastAI model for warning lamp detection and update dependencies
b835b89
raw
history blame
3.52 kB
import gradio as gr
from fastai.vision.all import *
from fastai.learner import load_learner
from pathlib import Path
import os
"""
Warning Lamp Detector using FastAI
This application allows users to upload images of warning lamps and get classification results.
"""
# Load the FastAI model
try:
model_path = Path("WarningLampClassifier.pkl")
learn_inf = load_learner(model_path)
print("Model loaded successfully")
except Exception as e:
print(f"Error loading model: {e}")
raise
def detect_warning_lamp(image, history: list[tuple[str, str]], system_message):
"""
Process the uploaded image and return detection results using FastAI model
Args:
image: PIL Image from Gradio
history: Chat history
system_message: System prompt
Returns:
Updated chat history with prediction results
"""
try:
# Convert PIL image to FastAI compatible format
img = PILImage(image)
# Get model prediction
pred_class, pred_idx, probs = learn_inf.predict(img)
# Format the prediction results
confidence = float(probs[pred_idx]) # Convert to float for better formatting
response = f"Detected Warning Lamp: {pred_class}\nConfidence: {confidence:.2%}"
# Add probabilities for all classes
response += "\n\nProbabilities for all classes:"
for i, (cls, prob) in enumerate(zip(learn_inf.dls.vocab, probs)):
response += f"\n- {cls}: {float(prob):.2%}"
# Update chat history
history.append((None, response))
return history
except Exception as e:
error_msg = f"Error processing image: {str(e)}"
history.append((None, error_msg))
return history
# Create a custom interface with image upload
with gr.Blocks(title="Warning Lamp Detector", theme=gr.themes.Soft()) as demo:
gr.Markdown("""
# 🚨 Warning Lamp Detector
Upload an image of a warning lamp to get its classification.
### Instructions:
1. Upload a clear image of the warning lamp
2. Wait for the analysis
3. View the detailed classification results
### Supported Warning Lamps:
""")
# Display supported classes if available
if 'learn_inf' in locals():
gr.Markdown("\n".join([f"- {cls}" for cls in learn_inf.dls.vocab]))
with gr.Row():
with gr.Column(scale=1):
image_input = gr.Image(
label="Upload Warning Lamp Image",
type="pil",
sources="upload"
)
system_message = gr.Textbox(
value="You are an expert in warning lamp classification. Analyze the image and provide detailed information about the type, color, and status of the warning lamp.",
label="System Message",
lines=3,
visible=False # Hide this since we're using direct model inference
)
with gr.Column(scale=1):
chatbot = gr.Chatbot(
[],
elem_id="chatbot",
bubble_full_width=False,
avatar_images=(None, "🚨"),
height=400
)
# Add a submit button
submit_btn = gr.Button("Analyze Warning Lamp", variant="primary")
submit_btn.click(
detect_warning_lamp,
inputs=[image_input, chatbot, system_message],
outputs=chatbot
)
if __name__ == "__main__":
demo.launch()