Spaces:
Sleeping
Sleeping
| 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 = """<audio autoplay><source src="file/disease_alert.mp3" type="audio/mpeg"></audio>""" | |
| elif found_disease: | |
| disease_status = "π¨ Disease Detected" | |
| audio_html = """<audio autoplay><source src="file/disease_alert.mp3" type="audio/mpeg"></audio>""" | |
| 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(""" | |
| <h1 style="text-align:center; color:#2e7d32;">πΏ AgroScan</h1> | |
| <p style="text-align:center;"> | |
| Upload an image of a plant leaf. If a human or disease is detected, an alert will be triggered with sound π¨. | |
| </p> | |
| """) | |
| 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(""" | |
| # <h1 style="text-align:center; color:#2e7d32;">πΏ AgroScan</h1> | |
| # <p style="text-align:center;"> | |
| # Upload an image of a plant leaf. If a human or disease is detected, an alert will be triggered with sound π¨. | |
| # </p> | |
| # """) | |
| # 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(""" | |
| # <h1 style="text-align:center; color:#2e7d32;">πΏ AgroScan</h1> | |
| # <p style="text-align:center;"> | |
| # Upload an image of a plant leaf. If a human or disease is detected, an alert will be triggered with sound π¨. | |
| # </p> | |
| # """) | |
| # 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(""" | |
| # <div style="text-align: center;"> | |
| # <h1 style="color: #2e7d32;">πΏ AgroScan: Plant Disease Detector + Human Alert</h1> | |
| # <p style="font-size: 16px; color: #555;"> | |
| # Upload an image of a leaf or a human. If human is detected, an alert will be triggered. | |
| # </p> | |
| # </div> | |
| # """) | |
| # 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(""" | |
| # <div style="text-align: center;"> | |
| # <h1 style="color: #2e7d32;">πΏ AgroScan: Plant Disease Detector + Image Validator</h1> | |
| # <p style="font-size: 16px; color: #555;"> | |
| # Upload a plant leaf image π to check if it's real or fake and detect any diseases using YOLOv8. | |
| # </p> | |
| # </div> | |
| # """) | |
| # 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(""" | |
| # <div style="text-align: center;"> | |
| # <h1 style="color: #2e7d32;">πΏ AgroScan: Plant Disease Detector + Image Validator</h1> | |
| # <p style="font-size: 16px; color: #555;"> | |
| # Upload a plant leaf image π to check if it's real or fake and detect any diseases using YOLOv5. | |
| # </p> | |
| # </div> | |
| # """) | |
| # 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(""" | |
| # <div style="text-align: center;"> | |
| # <h1 style="color: #2e7d32;">πΏ AgroScan: Plant Disease Detector</h1> | |
| # <p style="font-size: 16px; color: #555;"> | |
| # Upload a high-quality image of a plant leaf π and detect possible diseases using AI-powered YOLOv5. | |
| # </p> | |
| # </div> | |
| # """) | |
| # 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() |