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