AgroSense / src /ui /tabs /leaf_tab.py
ItzRoBeerT's picture
Added example images for farm and leaves tabs
54cc866
"""
Leaf Disease Detection Tab
===========================
UI component for analyzing individual leaves.
"""
import gradio as gr
from src.utils.leaf_classifier import predict as classify_image
def analyze_leaf(image):
"""
Analyze a leaf image to detect diseases.
Args:
image: PIL.Image from gr.Image component
Returns:
str: Result formatted as Markdown
"""
if image is None:
return "⚠️ Please upload an image of a leaf."
# Call classifier
result = classify_image(image)
# Handle error
if not result["success"]:
return f"❌ Error: {result['error']}"
# Format result as Markdown
emoji = "βœ…" if result["is_healthy"] else "⚠️"
status = "🌿 Healthy Plant" if result["is_healthy"] else "🦠 Disease Detected"
output = f"""
## πŸ”¬ Analysis Result
### Main Diagnosis
- **Prediction:** {emoji} {result["prediction"]}
- **Confidence:** {result["confidence"]}%
- **Status:** {status}
### Details
- **Plant:** {result["plant"]}
- **Condition:** {result["disease"]}
### Other Possibilities
"""
# Add top-k alternatives (skip first one, it's the main prediction)
for i, alt in enumerate(result["top_k"][1:], start=2):
output += f"{i}. {alt['plant']} - {alt['disease']} ({alt['confidence']}%)\n"
return output
def create_leaf_tab():
"""Create the leaf disease detection tab."""
with gr.Tab("πŸƒ Leaves Disease Detection"):
gr.Markdown("Analyze an individual leaf to detect diseases.")
with gr.Row():
with gr.Column():
leaf_image = gr.Image(
label="πŸ“· Upload a photo of the leaf",
type="pil",
height=300
)
leaf_btn = gr.Button("πŸ” Analyze", variant="primary")
with gr.Column():
leaf_output = gr.Markdown(label="Result")
# Example images
gr.Markdown("### πŸ“Έ Try with example images:")
gr.Examples(
examples=[
["src/ui/pictures/leaves/185161-004-EAF28842.jpg"],
["src/ui/pictures/leaves/healthy.jpg"]
],
inputs=[leaf_image],
label="Example Leaves"
)
# Connect button
leaf_btn.click(
fn=analyze_leaf,
inputs=[leaf_image],
outputs=[leaf_output]
)