sofiiafolv's picture
minor
1f6fcb2
import gradio as gr
import supervision as sv
from rfdetr import RFDETRBase
models = {
"GC10-DET": "gc10-det.pth",
"NEU-DET": "neu-det.pth"
}
def predict(model_name, img, conf, iou):
model_path = models[model_name]
model = RFDETRBase(pretrain_weights=model_path)
model.optimize_for_inference()
results = model.predict(img, threshold=conf)
results = results.with_nmm(threshold=iou)
labels = [f"defect {confidence:.2f}" for confidence in results.confidence]
annotated_image = img.copy()
annotated_image = sv.BoxAnnotator().annotate(annotated_image, results)
annotated_image = sv.LabelAnnotator().annotate(annotated_image, results, labels)
return annotated_image
base_conf, base_iou = 0.25, 0.5
title = "Detection with RF-DETR trained on NEU-DET and GC10-DET"
des = """
**Instructions:**
1. Choose a model:
\- **GC10-DET** - for images from the GC10 dataset (10 defect types, steel surface images)
\- **NEU-DET** - for images from the NEU dataset (6 defect types, steel strip images)
2. Upload Image.
3. Adjust thresholds
4. Click the **Submit** button. Wait while predictions are generated.
"""
interface = gr.Interface(
fn=predict,
inputs=[
gr.Dropdown(list(models.keys()), label="Select Model"),
'image',
gr.Slider(maximum=1, minimum=0, value=base_conf, label="Confidence Threshold"),
gr.Slider(maximum=1, minimum=0, value=base_iou, label="NMM IoU Threshold")
],
outputs=["image"],
title=title,
description=des,
examples=[
["GC10-DET", "example1.jpg", base_conf, base_iou],
["GC10-DET", "example2.jpg", base_conf, base_iou],
["NEU-DET", "example3.jpg", base_conf, base_iou]
]
)
interface.launch()