Spaces:
Sleeping
Sleeping
import gradio as gr | |
from PIL import Image, ImageDraw, ImageFont | |
import os | |
from io import BytesIO | |
from roboflow import Roboflow | |
roboflow_key = os.getenv("roboflow") | |
rf = Roboflow(api_key=roboflow_key) | |
project = rf.workspace('yudi-pratama-putra-rwuep').project("corn-pest-detection-2") | |
model = project.version(3).model | |
def predict_image(image, confidence, overlap): | |
colors = [ | |
"Red", | |
"Green", | |
"Blue", | |
"Yellow", | |
"Cyan", | |
"Magenta", | |
"Orange", | |
"Purple", | |
"Brown", | |
"Pink", | |
"DarkRed", | |
"Black", | |
"White" | |
] | |
pest_class = ['aphids', 'army worm', 'black cutworm', 'corn borer', 'grub', 'large cutworm', 'mole cricket', 'peach borer', 'potosiabre vitarsis', 'red spider', 'white margined moth', 'wireworm', 'yellow cutworm'] | |
prediction = model.predict(image, confidence=confidence, overlap=overlap).json() | |
img = Image.open(image).convert("RGB") | |
resize_img = 1 | |
img = img.resize((img.width * resize_img, img.height * resize_img)) | |
draw = ImageDraw.Draw(img) | |
font = ImageFont.load_default(size=20) | |
for result in prediction['predictions']: | |
x0 = result['x'] - result['width'] / 2 | |
y0 = result['y'] - result['height'] / 2 | |
x1 = result['x'] + result['width'] / 2 | |
y1 = result['y'] + result['height'] / 2 | |
x0 *= resize_img | |
y0 *= resize_img | |
x1 *= resize_img | |
y1 *= resize_img | |
for i in range(len(pest_class)): | |
if result['class'] == pest_class[i]: | |
draw.rectangle([x0, y0, x1, y1], outline=colors[i], width=3) | |
label = f"{result['class']} ({result['confidence']*100:.2f}%)" | |
draw.text((x0, y0 - 25), label, fill=colors[i], font=font) | |
if prediction['predictions'] == []: | |
img = Image.open(image) | |
return img | |
inputs_image = [ | |
gr.Image(type='filepath', label='input image'), | |
gr.Slider(minimum=0, maximum=100, value=40, label='Confidence (%)'), | |
gr.Slider(minimum=0, maximum=100, value=30, label='Overlap (%)') | |
] | |
outputs_image = [ | |
gr.Image(type='numpy', label='output image') | |
] | |
interface_image = gr.Interface( | |
fn=predict_image, | |
inputs=inputs_image, | |
outputs=outputs_image, | |
title="Corn Pest Detection", | |
description=( | |
"Upload an image and the model will detect pests.\n\n" | |
"Model detected: aphids, army worm, black cutworm, corn borer, grub, large cutworm, mole cricket, peach borer, " | |
"potosiabre vitarsis, red spider, white margined moth, wireworm, yellow cutworm.\n\n" | |
"Confidence: The higher the confidence value, the more certain the model is about the detected object being correct. " | |
"For example, a higher confidence threshold will filter out less certain predictions.\n\n" | |
"Overlap: The higher the accepted overlap value, the more predictions are allowed, even if they overlap with each other. " | |
"A higher overlap value can help detect multiple objects that are close together." | |
) | |
) | |
interface_image.launch(share=True) |