File size: 4,353 Bytes
cb1fbea
 
 
c030bd6
1c082c8
636a182
0472215
cb1fbea
 
 
 
1c082c8
 
 
 
 
b29d408
1c082c8
 
cb1fbea
 
 
 
 
55d4b6f
cb1fbea
 
 
 
6f78ed1
0472215
 
 
cb1fbea
 
 
 
64a71dd
cb1fbea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f075fbc
cb1fbea
 
 
 
 
 
 
 
 
 
09ecbb9
cb1fbea
 
 
 
 
 
09ecbb9
cb1fbea
 
 
 
 
 
 
 
 
f075fbc
cb1fbea
 
f075fbc
cb1fbea
 
 
 
 
 
 
 
 
 
 
f075fbc
cb1fbea
 
 
 
f34ddb6
cb1fbea
09ecbb9
cb1fbea
 
 
 
 
f34ddb6
cb1fbea
09ecbb9
cb1fbea
 
 
 
f34ddb6
cb1fbea
09ecbb9
cb1fbea
 
 
 
 
 
 
 
 
 
 
 
f34ddb6
cb1fbea
f075fbc
cb1fbea
 
 
 
 
 
 
 
 
 
 
36e4f2e
99a64f4
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import spaces
import supervision as sv
import PIL.Image as Image
from ultralytics import YOLO
from huggingface_hub import hf_hub_download, HfApi
import gradio as gr
import torch
global repo_id

repo_id = "atalaydenknalbant/asl-yolo-models"

def get_model_filenames(repo_id):
    api = HfApi()
    files = api.list_repo_files(repo_id)
    model_filenames = [file for file in files if file.endswith('.pt')]
    return model_filenames


model_filenames = get_model_filenames(repo_id)

def download_models(repo_id, model_id):
    # Download the selected model
    hf_hub_download(repo_id, filename=model_id, local_dir=f"./")
    return f"./{model_id}"

box_annotator = sv.BoxAnnotator()
category_dict = {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E', 5: 'F', 6: 'G', 7: 'H', 8: 'I',
                 9: 'J', 10: 'K', 11: 'L', 12: 'M', 13: 'N', 14: 'O', 15: 'P', 16: 'Q',
                 17: 'R', 18: 'S', 19: 'T', 20: 'U', 21: 'V', 22: 'W', 23: 'X', 24: 'Y', 25: 'Z'}



@spaces.GPU
def yolo_inference(image, model_id, conf_threshold, iou_threshold, max_detection):
    # Download models
    model_path = download_models(repo_id, model_id)
    
    model = YOLO(model_path)
    results = model(source=image, imgsz=640, iou=iou_threshold, conf=conf_threshold, verbose=False, max_det=max_detection)[0]
    detections = sv.Detections.from_ultralytics(results)
    
    labels = [
        f"{category_dict[class_id]} {confidence:.2f}"
        for class_id, confidence in zip(detections.class_id, detections.confidence)
    ]
    annotated_image = box_annotator.annotate(image, detections=detections, labels=labels)

    return annotated_image

def app():
    with gr.Blocks():
        with gr.Row():
            with gr.Column():
                image = gr.Image(type="pil", label="Image", interactive=True)
    
                model_id = gr.Dropdown(
                    label="Model",
                    choices=model_filenames,
                    value=model_filenames[0] if model_filenames else "",
                )
                conf_threshold = gr.Slider(
                    label="Confidence Threshold",
                    minimum=0.1,
                    maximum=1.0,
                    step=0.1,
                    value=0.45,
                )
                iou_threshold = gr.Slider(
                    label="IoU Threshold",
                    minimum=0.1,
                    maximum=1.0,
                    step=0.1,
                    value=0.7,
                )
                
                max_detection = gr.Slider(
                    label="Max Detection",
                    minimum=1,
                    step=1,
                    value=1,
                )
                yolov_infer = gr.Button(value="Detect Objects")

            with gr.Column():
                output_image = gr.Image(type="pil", label="Annotated Image", interactive=False)

        yolov_infer.click(
            fn=yolo_inference,
            inputs=[
                image,
                model_id,
                conf_threshold,
                iou_threshold,
                max_detection,
            ],
            outputs=[output_image],
        )

        gr.Examples(
            examples=[
                [
                    "b.jpg",
                    "yolo11x.pt",
                    0.45,
                    0.7,
                    1,
                ],
                
                [
                    "a.jpg",
                    "yolo11s.pt",
                    0.45,
                    0.7,
                    1,
                ],
                [
                    "y.jpg",
                    "yolo11m.pt",
                    0.45,
                    0.7,
                    1,
                ],
            ],
            fn=yolo_inference,
            inputs=[
                image,
                model_id,
                conf_threshold,
                iou_threshold,
                max_detection,
            ],
            outputs=[output_image],
            cache_examples=True,
        )

gradio_app = gr.Blocks()
with gradio_app:
    gr.HTML(
        """
    <h1 style='text-align: center'>
    YOLO Powered ASL(American Sign Language) Letter Detector PSA: It can't detect J or Z
    </h1>
        """)
    with gr.Row():
        with gr.Column():
            app()

gradio_app.launch()