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