leaf-disease / app.py
SarowarSaurav's picture
Update app.py
86886cf verified
import gradio as gr
from azure.ai.inference import ChatCompletionsClient
from azure.ai.inference.models import (
SystemMessage,
UserMessage,
TextContentItem,
ImageContentItem,
ImageUrl,
ImageDetailLevel,
)
from azure.core.credentials import AzureKeyCredential
# Azure API credentials
token = "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"
endpoint = "https://models.inference.ai.azure.com"
model_name = "gpt-4o"
# Initialize the ChatCompletionsClient
client = ChatCompletionsClient(
endpoint=endpoint,
credential=AzureKeyCredential(token),
)
# Define the function to handle the image and get predictions
def analyze_leaf_disease(image_path, leaf_type):
try:
# Prepare and send the request to the Azure API
response = client.complete(
messages=[
SystemMessage(
content=f"You are a subject matter expert that describes leaf disease in detail for {leaf_type} leaves."
),
UserMessage(
content=[
TextContentItem(text="What's the name of the leaf disease in this image and what is the confidence score? What is the probable reason? What are the medicine or stops to prevent the disease"),
ImageContentItem(
image_url=ImageUrl.load(
image_file=image_path,
image_format="jpg",
detail=ImageDetailLevel.LOW,
)
),
],
),
],
model=model_name,
)
# Extract and return the response content
return response.choices[0].message.content
except Exception as e:
return f"An error occurred: {e}"
# Define the Gradio interface
def handle_proceed(image_path, leaf_type):
# Display detecting status
detecting_status = "Detecting..."
result = analyze_leaf_disease(image_path, leaf_type)
# Clear detecting status after processing
return "", result
with gr.Blocks() as interface:
with gr.Row():
gr.Markdown("""
# Leaf Disease Detector
Upload a leaf image, select the leaf type, and let the AI analyze the disease.
""")
with gr.Row():
image_input = gr.Image(type="filepath", label="Upload an Image or Take a Photo")
leaf_type = gr.Dropdown(
choices=["Tomato", "Tobacco", "Corn", "Paddy", "Maze", "Potato", "Wheat"],
label="Select Leaf Type",
)
proceed_button = gr.Button("Proceed")
with gr.Row():
detecting_label = gr.Label("Detecting...", visible=False)
output_box = gr.Textbox(label="Results", placeholder="Results will appear here.")
# Update the detecting_label and result in outputs
proceed_button.click(handle_proceed, inputs=[image_input, leaf_type], outputs=[detecting_label, output_box])
if __name__ == "__main__":
interface.launch()