from ultralytics import YOLO
import gradio as gr
import numpy as np
from PIL import Image
# Load YOLO model
model = YOLO("best.pt")
# Define what class names indicate a human
HUMAN_CLASSES = ["person", "human"]
# Predict Function
def predict(image):
image_status = "â
Real Image"
disease_status = "â
No Disease Detected"
details = ""
audio_html = "alert-1.mp3" # for autoplay sound
try:
results = model(image)
boxes = results[0].boxes
class_names = model.names
found_human = False
found_disease = False
if len(boxes) > 0:
for box in boxes:
class_id = int(box.cls[0])
class_name = class_names[class_id].lower()
confidence = float(box.conf[0])
details += f"đ {class_name} - {confidence*100:.2f}%\n"
if class_name in HUMAN_CLASSES:
found_human = True
else:
found_disease = True
if found_human:
disease_status = "đ¨ Human Detected (Invalid Input)"
audio_html = """"""
elif found_disease:
disease_status = "đ¨ Disease Detected"
audio_html = """"""
else:
disease_status = "â
No Disease Detected"
except Exception as e:
image_status = "â Error"
disease_status = "â ī¸ Detection Failed"
details = str(e)
return image_status, disease_status, details, audio_html
# Gradio Interface
with gr.Blocks(title="đ¨ AgroScan - Human Alert + Disease Detection") as demo:
gr.Markdown("""
đŋ AgroScan
Upload an image of a plant leaf. If a human or disease is detected, an alert will be triggered with sound đ¨.
""")
with gr.Row():
with gr.Column(scale=1):
image_input = gr.Image(type="pil", label="đˇ Upload Image")
submit_btn = gr.Button("đ Analyze")
with gr.Column(scale=1):
result1 = gr.Textbox(label="đŧī¸ Image Status")
result2 = gr.Textbox(label="đą Disease Status")
result3 = gr.Textbox(label="đ Detection Details", lines=5)
audio_out = gr.HTML(label="đ¨ Auto Alert") # autoplay sound (no controls)
submit_btn.click(fn=predict, inputs=image_input,
outputs=[result1, result2, result3, audio_out])
demo.launch()
# from ultralytics import YOLO
# import gradio as gr
# import numpy as np
# from PIL import Image
# # Load YOLO model
# model = YOLO("best.pt")
# # Define human classes
# HUMAN_CLASSES = ["person", "human"]
# # Prediction function
# def predict(image):
# image_status = "â
Real Image"
# disease_status = "â
No Disease Detected"
# details = ""
# alert_sound = "alert-1.mp3" # Will hold sound file path
# try:
# results = model(image)
# boxes = results[0].boxes
# class_names = model.names
# found_human = False
# found_disease = False
# if len(boxes) > 0:
# for box in boxes:
# class_id = int(box.cls[0])
# class_name = class_names[class_id].lower()
# confidence = float(box.conf[0])
# details += f"đ {class_name} - {confidence*100:.2f}%\n"
# if class_name in HUMAN_CLASSES:
# found_human = True
# else:
# found_disease = True
# if found_human:
# disease_status = "đ¨ Human Detected (Invalid Input)"
# alert_sound = "disease_alert.mp3"
# elif found_disease:
# disease_status = "đ¨ Disease Detected"
# alert_sound = "disease_alert.mp3"
# else:
# disease_status = "â
No Disease Detected"
# except Exception as e:
# image_status = "â Error"
# disease_status = "â ī¸ Detection Failed"
# details = str(e)
# return image_status, disease_status, details, alert_sound
# # Gradio Interface
# with gr.Blocks(title="đ¨ AgroScan - Human Alert + Disease Detection") as demo:
# gr.Markdown("""
# đŋ AgroScan
#
# Upload an image of a plant leaf. If a human or disease is detected, an alert will be triggered with sound đ¨.
#
# """)
# with gr.Row():
# with gr.Column(scale=1):
# image_input = gr.Image(type="pil", label="đˇ Upload Image")
# submit_btn = gr.Button("đ Analyze")
# with gr.Column(scale=1):
# result1 = gr.Textbox(label="đŧī¸ Image Status")
# result2 = gr.Textbox(label="đą Disease Status")
# result3 = gr.Textbox(label="đ Detection Details", lines=5)
# audio_out = gr.Audio(label="đ¨ Alert Sound", autoplay=True)
# submit_btn.click(fn=predict, inputs=image_input,
# outputs=[result1, result2, result3, audio_out])
# demo.launch()
# from ultralytics import YOLO
# import gradio as gr
# import numpy as np
# from PIL import Image
# # Load YOLO model
# model = YOLO("best.pt")
# # Define what class names indicate a human
# HUMAN_CLASSES = ["person", "human"]
# # Predict Function
# def predict(image):
# image_status = "â
Real Image"
# disease_status = "â
No Disease Detected"
# details = ""
# alert_sound = None # path to MP3 file
# try:
# results = model(image)
# boxes = results[0].boxes
# class_names = model.names
# found_human = False
# found_disease = False
# if len(boxes) > 0:
# for box in boxes:
# class_id = int(box.cls[0])
# class_name = class_names[class_id].lower()
# confidence = float(box.conf[0])
# details += f"đ {class_name} - {confidence*100:.2f}%\n"
# if class_name in HUMAN_CLASSES:
# found_human = True
# else:
# found_disease = True
# if found_human:
# disease_status = "đ¨ Human Detected (Invalid Input)"
# alert_sound = "disease_alert.mp3"
# elif found_disease:
# disease_status = "đ¨ Disease Detected"
# alert_sound = "disease_alert.mp3"
# else:
# disease_status = "â
No Disease Detected"
# except Exception as e:
# image_status = "â Error"
# disease_status = "â ī¸ Detection Failed"
# details = str(e)
# return image_status, disease_status, details, alert_sound
# # Gradio Interface
# with gr.Blocks(title="đ¨ AgroScan - Human Alert + Disease Detection") as demo:
# gr.Markdown("""
# đŋ AgroScan
#
# Upload an image of a plant leaf. If a human or disease is detected, an alert will be triggered with sound đ¨.
#
# """)
# with gr.Row():
# with gr.Column(scale=1):
# image_input = gr.Image(type="pil", label="đˇ Upload Image")
# submit_btn = gr.Button("đ Analyze")
# with gr.Column(scale=1):
# result1 = gr.Textbox(label="đŧī¸ Image Status")
# result2 = gr.Textbox(label="đą Disease Status")
# result3 = gr.Textbox(label="đ Detection Details", lines=5)
# audio_out = gr.Audio(label="đ¨ Alert Sound", autoplay=True)
# submit_btn.click(fn=predict, inputs=image_input,
# outputs=[result1, result2, result3, audio_out])
# demo.launch()
# from ultralytics import YOLO
# import gradio as gr
# import numpy as np
# from PIL import Image
# # Load the trained YOLOv8 model
# model = YOLO("best.pt")
# # Class name that represents "human" in your YOLO model
# HUMAN_CLASS_NAMES = ["person", "human"]
# # Prediction function with sound logic
# def predict(image):
# image_status = "â
Real Image"
# disease_status = "â
No Disease Detected"
# disease_details = ""
# play_alert = None # MP3 to be played
# try:
# results = model(image)
# boxes = results[0].boxes
# names = model.names
# found_human = False
# if len(boxes) > 0:
# for box in boxes:
# class_id = int(box.cls[0])
# class_name = names[class_id]
# confidence = float(box.conf[0])
# disease_details += f"đ {class_name} - {confidence*100:.2f}%\n"
# if class_name.lower() in HUMAN_CLASS_NAMES:
# found_human = True
# if found_human:
# disease_status = "đ¨ Disease Detected (Human Image)"
# play_alert = "disease_alert.mp3" # make sure this file exists
# elif len(boxes) == 0:
# disease_status = "â
No Disease Detected"
# else:
# disease_status = "đ¨ Disease Detected"
# play_alert = "disease_alert.mp3"
# except Exception as e:
# disease_status = "â Error during detection"
# disease_details = str(e)
# return image_status, disease_status, disease_details, play_alert
# # Gradio UI
# with gr.Blocks(title="AgroScan - Human Alert + Disease Detection") as demo:
# gr.Markdown("""
#
#
đŋ AgroScan: Plant Disease Detector + Human Alert
#
# Upload an image of a leaf or a human. If human is detected, an alert will be triggered.
#
#
# """)
# with gr.Row():
# with gr.Column(scale=1):
# image_input = gr.Image(type="pil", label="đˇ Upload Image")
# submit_btn = gr.Button("đ Analyze")
# with gr.Column(scale=1):
# image_result = gr.Textbox(label="đŧī¸ Image Authenticity", interactive=False)
# disease_result = gr.Textbox(label="đą Disease Status", interactive=False)
# detail = gr.Textbox(label="đ Details", lines=5, interactive=False)
# sound_output = gr.Audio(label="đ¨ Alert Sound", autoplay=True, interactive=False)
# submit_btn.click(fn=predict, inputs=image_input,
# outputs=[image_result, disease_result, detail, sound_output])
# demo.launch()
# from ultralytics import YOLO
# import gradio as gr
# import numpy as np
# from PIL import Image
# # Load the trained YOLOv8 model
# model = YOLO("best.pt") # Make sure 'best.pt' is in the same directory
# # Check if image is real (simple check using NumPy array and format)
# def is_real_image(image):
# try:
# if image is None:
# return False
# arr = np.array(image)
# if arr.ndim == 3 and arr.shape[2] in [3, 4]: # RGB or RGBA
# return True
# return False
# except Exception as e:
# print(f"Image check error: {e}")
# return False
# # Prediction function
# def predict(image):
# image_status = "â Fake Image"
# disease_status = "â ī¸ Unknown"
# disease_details = ""
# # Step 1: Image authenticity check
# if is_real_image(image):
# image_status = "â
Real Image"
# else:
# return image_status, "â ī¸ Cannot detect disease in a fake image.", ""
# # Step 2: YOLOv8 disease detection
# try:
# results = model(image)
# boxes = results[0].boxes
# names = model.names
# if len(boxes) == 0:
# disease_status = "â
No Disease Detected"
# else:
# disease_status = "đ¨ Disease Detected"
# for box in boxes:
# class_id = int(box.cls[0])
# class_name = names[class_id]
# confidence = float(box.conf[0])
# disease_details += f"đŦ {class_name} - Confidence: {confidence*100:.2f}%\n"
# except Exception as e:
# disease_status = "â Error during detection"
# disease_details = str(e)
# return image_status, disease_status, disease_details
# # Gradio UI
# with gr.Blocks(title="AgroScan - Plant Disease & Image Verifier") as demo:
# gr.Markdown("""
#
#
đŋ AgroScan: Plant Disease Detector + Image Validator
#
# Upload a plant leaf image đ to check if it's real or fake and detect any diseases using YOLOv8.
#
#
# """)
# with gr.Row():
# with gr.Column(scale=1):
# image_input = gr.Image(type="pil", label="đˇ Upload Leaf Image")
# submit_btn = gr.Button("đ Analyze")
# with gr.Column(scale=1):
# image_result = gr.Textbox(label="đŧī¸ Image Authenticity", interactive=False)
# disease_result = gr.Textbox(label="đą Disease Status", interactive=False)
# detail = gr.Textbox(label="đ Detailed Diagnosis", lines=5, interactive=False)
# with gr.Accordion("âšī¸ What is AgroScan?", open=False):
# gr.Markdown("""
# AgroScan is an AI-powered detector for identifying plant diseases from leaf images.
# It also verifies whether the image is genuine (real leaf image) or fake to avoid misdiagnosis.
# Designed to support farmers, agronomists, and researchers for better crop care.
# """)
# submit_btn.click(fn=predict, inputs=image_input,
# outputs=[image_result, disease_result, detail])
# demo.launch()
# from ultralytics import YOLO
# import gradio as gr
# from PIL import Image
# # Load YOLO model
# model = YOLO("best.pt") # Make sure 'best.pt' is in your directory
# # Function to check if image is real
# def is_real_image(img):
# try:
# return isinstance(img, Image.Image) and img.mode in ['RGB', 'RGBA'] and img.size[0] > 50 and img.size[1] > 50
# except:
# return False
# # Main prediction function with error handling
# def predict(image):
# try:
# if image is None:
# return "â No image provided", "â ī¸ Cannot check disease", "Upload a valid image first."
# # Step 1: Check image authenticity
# if is_real_image(image):
# image_status = "â
Real Image"
# else:
# return "â Fake Image", "â ī¸ Cannot check disease", "Image doesn't appear real. Try another image."
# # Step 2: Predict with YOLO model
# results = model(image)
# names = model.names
# boxes = results[0].boxes
# if len(boxes) == 0:
# return image_status, "â
No Disease Detected", "No signs of disease found."
# diagnosis = ""
# disease_found = False
# for box in boxes:
# conf = float(box.conf[0])
# if conf > 0.5:
# cls_id = int(box.cls[0])
# disease_name = names[cls_id]
# diagnosis += f"đŦ {disease_name} - Confidence: {conf*100:.2f}%\n"
# disease_found = True
# if disease_found:
# return image_status, "đ¨ Disease Detected", diagnosis
# else:
# return image_status, "â
No Disease Detected", "No confident detections."
# except Exception as e:
# # Handle unexpected errors gracefully
# return "â Error", "â Error", f"An error occurred: {str(e)}"
# # Gradio Interface
# with gr.Blocks(title="AgroScan - Plant Disease & Image Verifier") as demo:
# gr.Markdown("## đŋ AgroScan: Plant Disease Detector + Image Validator")
# with gr.Row():
# with gr.Column():
# image_input = gr.Image(type="pil", label="đˇ Upload Plant Leaf Image")
# submit_btn = gr.Button("đ Analyze")
# with gr.Column():
# image_result = gr.Textbox(label="đŧī¸ Image Authenticity", interactive=False)
# disease_result = gr.Textbox(label="đą Disease Status", interactive=False)
# detail = gr.Textbox(label="đ Detailed Diagnosis", lines=5, interactive=False)
# submit_btn.click(fn=predict, inputs=image_input, outputs=[image_result, disease_result, detail])
# demo.launch()
# from ultralytics import YOLO
# import gradio as gr
# from PIL import Image
# import imghdr
# import os
# # Load YOLOv5 model
# model = YOLO("best.pt") # Ensure your model file 'best.pt' is in the same directory
# # Check if image is real or fake (basic format check)
# def is_real_image(image):
# try:
# if image is None:
# return False
# format_check = imghdr.what(image.fp.name)
# return format_check in ['jpeg', 'png']
# except:
# return False
# # Prediction function
# def predict(image):
# image_status = "â Fake Image"
# disease_status = "â ī¸ Unknown"
# disease_details = ""
# # Step 1: Check if image is real
# if is_real_image(image):
# image_status = "â
Real Image"
# else:
# return image_status, "â ī¸ Cannot detect disease in a fake image.", ""
# # Step 2: Run disease detection
# results = model(image)
# boxes = results[0].boxes
# names = model.names
# if len(boxes) == 0:
# disease_status = "â
No Disease Detected"
# else:
# disease_status = "đ¨ Disease Detected"
# for box in boxes:
# class_id = int(box.cls[0])
# class_name = names[class_id]
# confidence = float(box.conf[0])
# disease_details += f"đŦ {class_name} - Confidence: {confidence*100:.2f}%\n"
# return image_status, disease_status, disease_details
# # UI using Gradio Blocks
# with gr.Blocks(title="AgroScan - Plant Disease & Image Verifier") as demo:
# gr.Markdown("""
#
#
đŋ AgroScan: Plant Disease Detector + Image Validator
#
# Upload a plant leaf image đ to check if it's real or fake and detect any diseases using YOLOv5.
#
#
# """)
# with gr.Row():
# with gr.Column(scale=1):
# image_input = gr.Image(type="pil", label="đˇ Upload Leaf Image")
# submit_btn = gr.Button("đ Analyze")
# with gr.Column(scale=1):
# image_result = gr.Textbox(label="đŧī¸ Image Authenticity", interactive=False)
# disease_result = gr.Textbox(label="đą Disease Status", interactive=False)
# detail = gr.Textbox(label="đ Detailed Diagnosis", lines=5, interactive=False)
# with gr.Accordion("âšī¸ What is AgroScan?", open=False):
# gr.Markdown("""
# AgroScan is an AI-powered detector for identifying plant diseases from leaf images.
# It also verifies whether the image is genuine (real leaf image) or fake to avoid misdiagnosis.
# Designed to support farmers, agronomists, and researchers for better crop care.
# """)
# submit_btn.click(fn=predict, inputs=image_input,
# outputs=[image_result, disease_result, detail])
# demo.launch()
# from ultralytics import YOLO
# import gradio as gr
# from PIL import Image
# # Load YOLOv5 model
# model = YOLO("best.pt") # Make sure this file exists in your Hugging Face Space
# # Prediction function
# def predict(image):
# results = model(image)
# boxes = results[0].boxes
# names = model.names
# output = ""
# if len(boxes) == 0:
# output = "â
Healthy: No disease detected!"
# else:
# for box in boxes:
# class_id = int(box.cls[0])
# class_name = names[class_id]
# confidence = float(box.conf[0])
# output += f"đ¨ Detected: {class_name} ({confidence*100:.2f}%)\n"
# return output
# # Gradio UI using Blocks
# with gr.Blocks(title="AgroScan - Plant Disease Detector") as demo:
# gr.Markdown("""
#
#
đŋ AgroScan: Plant Disease Detector
#
# Upload a high-quality image of a plant leaf đ and detect possible diseases using AI-powered YOLOv5.
#
#
# """)
# with gr.Row():
# with gr.Column(scale=1):
# image_input = gr.Image(type="pil", label="đˇ Upload Leaf Image")
# predict_button = gr.Button("đ Analyze Leaf", variant="primary")
# with gr.Column(scale=1):
# result_output = gr.Textbox(label="đŠē Diagnosis Result", lines=6)
# with gr.Accordion("âšī¸ About AgroScan", open=False):
# gr.Markdown("""
# **AgroScan** is an intelligent plant disease detector built with **YOLOv5** and trained on custom agricultural datasets.
# It helps farmers, researchers, and agriculturists in early detection of plant diseases to ensure timely treatment and improved crop yield. đą
# """)
# predict_button.click(fn=predict, inputs=image_input, outputs=result_output)
# demo.launch()
# from ultralytics import YOLO
# import gradio as gr
# from PIL import Image
# import torch
# # Load YOLOv5 model
# model = YOLO("best.pt") # assumes model is in the same directory
# # Prediction function
# def predict(image):
# results = model(image)
# boxes = results[0].boxes
# names = model.names
# output = ""
# if len(boxes) == 0:
# output = "â
Healthy: No disease detected!"
# else:
# for box in boxes:
# class_id = int(box.cls[0])
# class_name = names[class_id]
# confidence = float(box.conf[0])
# output += f"đ¨ Detected: {class_name} ({confidence*100:.2f}%)\n"
# return output
# # Gradio UI
# gr.Interface(
# fn=predict,
# inputs=gr.Image(type="pil"),
# outputs="text",
# title="đŋ AgroScan: Plant Disease Detector",
# description="Upload a plant leaf image to detect disease using a YOLOv5 model.",
# ).launch()