File size: 4,205 Bytes
094752c 377e9f4 094752c e317241 094752c 377e9f4 e317241 377e9f4 094752c e317241 094752c e317241 094752c e317241 377e9f4 094752c 377e9f4 e317241 377e9f4 094752c 377e9f4 e317241 377e9f4 094752c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
import gradio as gr
import supervision as sv
from rfdetr import RFDETRBase, RFDETRLarge
from rfdetr.util.coco_classes import COCO_CLASSES
from utils.video import create_directory
MARKDOWN = """
# RF-DETR 🔥
<div style="display: flex; align-items: center; gap: 8px;">
<a href="https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/how-to-finetune-rf-detr-on-detection-dataset.ipynb">
<img src="https://colab.research.google.com/assets/colab-badge.svg" alt="colab" />
</a>
<a href="https://blog.roboflow.com/rf-detr">
<img src="https://raw.githubusercontent.com/roboflow-ai/notebooks/main/assets/badges/roboflow-blogpost.svg" alt="roboflow" />
</a>
<a href="https://github.com/roboflow/rf-detr">
<img src="https://badges.aleen42.com/src/github.svg" alt="roboflow" />
</a>
</div>
RF-DETR is a real-time, transformer-based object detection model architecture developed
by [Roboflow](https://roboflow.com/) and released under the Apache 2.0 license.
"""
IMAGE_EXAMPLES = [
['https://media.roboflow.com/supervision/image-examples/people-walking.png', 0.3, 728, "large"],
['https://media.roboflow.com/supervision/image-examples/vehicles.png', 0.3, 728, "large"],
['https://media.roboflow.com/notebooks/examples/dog-2.jpeg', 0.5, 560, "base"],
]
COLOR = sv.ColorPalette.from_hex([
"#ffff00", "#ff9b00", "#ff8080", "#ff66b2", "#ff66ff", "#b266ff",
"#9999ff", "#3399ff", "#66ffff", "#33ff99", "#66ff66", "#99ff00"
])
VIDEO_SCALE_FACTOR = 0.5
VIDEO_TARGET_DIRECTORY = "tmp"
create_directory(directory_path=VIDEO_TARGET_DIRECTORY)
def inference(image, confidence: float, resolution: int, checkpoint: str):
model_class = RFDETRBase if checkpoint == "base" else RFDETRLarge
model = model_class(resolution=resolution)
detections = model.predict(image, threshold=confidence)
text_scale = sv.calculate_optimal_text_scale(resolution_wh=image.size)
thickness = sv.calculate_optimal_line_thickness(resolution_wh=image.size)
bbox_annotator = sv.BoxAnnotator(color=COLOR, thickness=thickness)
label_annotator = sv.LabelAnnotator(
color=COLOR,
text_color=sv.Color.BLACK,
text_scale=text_scale,
smart_position=True
)
labels = [
f"{COCO_CLASSES[class_id]} {confidence:.2f}"
for class_id, confidence
in zip(detections.class_id, detections.confidence)
]
annotated_image = image.copy()
annotated_image = bbox_annotator.annotate(annotated_image, detections)
annotated_image = label_annotator.annotate(annotated_image, detections, labels)
return annotated_image
with gr.Blocks() as demo:
gr.Markdown(MARKDOWN)
with gr.Row():
with gr.Column():
input_image = gr.Image(
label="Input Image",
image_mode='RGB',
type='pil',
height=600
)
confidence_slider = gr.Slider(
label="Confidence",
minimum=0.0,
maximum=1.0,
step=0.05,
value=0.5,
)
resolution_slider = gr.Slider(
label="Inference resolution",
minimum=560,
maximum=1120,
step=56,
value=728,
)
with gr.Row():
checkpoint_dropdown = gr.Dropdown(
label="Checkpoint",
choices=["base", "large"],
value="base"
)
submit_button = gr.Button("Submit")
with gr.Column():
output_image = gr.Image(
label="Input Image",
image_mode='RGB',
type='pil',
height=600
)
gr.Examples(
fn=inference,
examples=IMAGE_EXAMPLES,
inputs=[input_image, confidence_slider, resolution_slider, checkpoint_dropdown],
outputs=output_image
)
submit_button.click(
inference,
inputs=[input_image, confidence_slider, resolution_slider, checkpoint_dropdown],
outputs=output_image
)
demo.launch(debug=False, show_error=True)
|