radub23
commited on
Commit
·
b835b89
1
Parent(s):
35ce90a
Integrate FastAI model for warning lamp detection and update dependencies
Browse files- .gitignore +20 -0
- app.py +50 -27
- requirements.txt +4 -1
.gitignore
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Python
|
2 |
+
__pycache__/
|
3 |
+
*.py[cod]
|
4 |
+
*$py.class
|
5 |
+
|
6 |
+
# Jupyter Notebook
|
7 |
+
.ipynb_checkpoints
|
8 |
+
Inference_notebook_demo.ipynb
|
9 |
+
|
10 |
+
# Virtual Environment
|
11 |
+
venv/
|
12 |
+
env/
|
13 |
+
.env/
|
14 |
+
|
15 |
+
# IDE
|
16 |
+
.vscode/
|
17 |
+
.idea/
|
18 |
+
|
19 |
+
# Misc
|
20 |
+
.DS_Store
|
app.py
CHANGED
@@ -1,40 +1,56 @@
|
|
1 |
import gradio as gr
|
2 |
-
from
|
|
|
|
|
3 |
import os
|
4 |
|
5 |
"""
|
6 |
-
Warning Lamp Detector using
|
7 |
This application allows users to upload images of warning lamps and get classification results.
|
8 |
"""
|
9 |
|
10 |
-
#
|
11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
|
13 |
def detect_warning_lamp(image, history: list[tuple[str, str]], system_message):
|
14 |
"""
|
15 |
-
Process the uploaded image and return detection results
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
"""
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
|
|
|
|
38 |
|
39 |
# Create a custom interface with image upload
|
40 |
with gr.Blocks(title="Warning Lamp Detector", theme=gr.themes.Soft()) as demo:
|
@@ -46,8 +62,14 @@ with gr.Blocks(title="Warning Lamp Detector", theme=gr.themes.Soft()) as demo:
|
|
46 |
1. Upload a clear image of the warning lamp
|
47 |
2. Wait for the analysis
|
48 |
3. View the detailed classification results
|
|
|
|
|
49 |
""")
|
50 |
|
|
|
|
|
|
|
|
|
51 |
with gr.Row():
|
52 |
with gr.Column(scale=1):
|
53 |
image_input = gr.Image(
|
@@ -58,7 +80,8 @@ with gr.Blocks(title="Warning Lamp Detector", theme=gr.themes.Soft()) as demo:
|
|
58 |
system_message = gr.Textbox(
|
59 |
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.",
|
60 |
label="System Message",
|
61 |
-
lines=3
|
|
|
62 |
)
|
63 |
|
64 |
with gr.Column(scale=1):
|
|
|
1 |
import gradio as gr
|
2 |
+
from fastai.vision.all import *
|
3 |
+
from fastai.learner import load_learner
|
4 |
+
from pathlib import Path
|
5 |
import os
|
6 |
|
7 |
"""
|
8 |
+
Warning Lamp Detector using FastAI
|
9 |
This application allows users to upload images of warning lamps and get classification results.
|
10 |
"""
|
11 |
|
12 |
+
# Load the FastAI model
|
13 |
+
try:
|
14 |
+
model_path = Path("WarningLampClassifier.pkl")
|
15 |
+
learn_inf = load_learner(model_path)
|
16 |
+
print("Model loaded successfully")
|
17 |
+
except Exception as e:
|
18 |
+
print(f"Error loading model: {e}")
|
19 |
+
raise
|
20 |
|
21 |
def detect_warning_lamp(image, history: list[tuple[str, str]], system_message):
|
22 |
"""
|
23 |
+
Process the uploaded image and return detection results using FastAI model
|
24 |
+
Args:
|
25 |
+
image: PIL Image from Gradio
|
26 |
+
history: Chat history
|
27 |
+
system_message: System prompt
|
28 |
+
Returns:
|
29 |
+
Updated chat history with prediction results
|
30 |
"""
|
31 |
+
try:
|
32 |
+
# Convert PIL image to FastAI compatible format
|
33 |
+
img = PILImage(image)
|
34 |
+
|
35 |
+
# Get model prediction
|
36 |
+
pred_class, pred_idx, probs = learn_inf.predict(img)
|
37 |
+
|
38 |
+
# Format the prediction results
|
39 |
+
confidence = float(probs[pred_idx]) # Convert to float for better formatting
|
40 |
+
response = f"Detected Warning Lamp: {pred_class}\nConfidence: {confidence:.2%}"
|
41 |
+
|
42 |
+
# Add probabilities for all classes
|
43 |
+
response += "\n\nProbabilities for all classes:"
|
44 |
+
for i, (cls, prob) in enumerate(zip(learn_inf.dls.vocab, probs)):
|
45 |
+
response += f"\n- {cls}: {float(prob):.2%}"
|
46 |
+
|
47 |
+
# Update chat history
|
48 |
+
history.append((None, response))
|
49 |
+
return history
|
50 |
+
except Exception as e:
|
51 |
+
error_msg = f"Error processing image: {str(e)}"
|
52 |
+
history.append((None, error_msg))
|
53 |
+
return history
|
54 |
|
55 |
# Create a custom interface with image upload
|
56 |
with gr.Blocks(title="Warning Lamp Detector", theme=gr.themes.Soft()) as demo:
|
|
|
62 |
1. Upload a clear image of the warning lamp
|
63 |
2. Wait for the analysis
|
64 |
3. View the detailed classification results
|
65 |
+
|
66 |
+
### Supported Warning Lamps:
|
67 |
""")
|
68 |
|
69 |
+
# Display supported classes if available
|
70 |
+
if 'learn_inf' in locals():
|
71 |
+
gr.Markdown("\n".join([f"- {cls}" for cls in learn_inf.dls.vocab]))
|
72 |
+
|
73 |
with gr.Row():
|
74 |
with gr.Column(scale=1):
|
75 |
image_input = gr.Image(
|
|
|
80 |
system_message = gr.Textbox(
|
81 |
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.",
|
82 |
label="System Message",
|
83 |
+
lines=3,
|
84 |
+
visible=False # Hide this since we're using direct model inference
|
85 |
)
|
86 |
|
87 |
with gr.Column(scale=1):
|
requirements.txt
CHANGED
@@ -1,3 +1,6 @@
|
|
1 |
gradio>=4.19.2
|
2 |
huggingface-hub>=0.20.3
|
3 |
-
Pillow>=10.0.0 # Required for image processing
|
|
|
|
|
|
|
|
1 |
gradio>=4.19.2
|
2 |
huggingface-hub>=0.20.3
|
3 |
+
Pillow>=10.0.0 # Required for image processing
|
4 |
+
fastai>=2.7.13 # Required for model inference
|
5 |
+
torch>=2.2.0 # Required by FastAI
|
6 |
+
torchvision>=0.17.0 # Required by FastAI
|