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()