File size: 4,551 Bytes
c79c7e9
 
b81e5e4
e50f601
b81e5e4
 
c79c7e9
 
 
d722369
c79c7e9
 
 
 
 
 
 
 
 
 
 
 
b81e5e4
e50f601
 
 
 
 
 
 
 
c79c7e9
e50f601
 
 
 
c79c7e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b81e5e4
c79c7e9
b81e5e4
c79c7e9
1855600
c79c7e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f34ddd2
c79c7e9
3bb85ff
d722369
c79c7e9
d722369
 
c79c7e9
 
3bb85ff
c79c7e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import os
import spaces
import yolov9

from huggingface_hub import hf_hub_download


@spaces.GPU
def yolov9_inference(img_path, model_id='YOLOv9-S_X_LOCO-converted.pt', img_size=640, conf_thres=0.3, iou_thres=0.7):
    """
    Load a YOLOv9 model, configure it, perform inference on an image, and optionally adjust 
    the input size and apply test time augmentation.
    
    :param model_path: Path to the YOLOv9 model file.
    :param conf_threshold: Confidence threshold for NMS.
    :param iou_threshold: IoU threshold for NMS.
    :param img_path: Path to the image file.
    :param size: Optional, input size for inference.
    :return: A tuple containing the detections (boxes, scores, categories) and the results object for further actions like displaying.
    """
    
    model_path = download_models(model_id)
    model = yolov9.load(model_path)
    
    # Set model parameters
    model.conf = conf_thres
    model.iou = iou_thres
    
    # Perform inference
    results = model(img_path, size=img_size)

    # Optionally, show detection bounding boxes on image
    output = results.render()
    
    return output[0]

def download_models(model_id):
    hf_hub_download("KoniHD/LOCO-Detection", filename=f"{model_id}", local_dir=f"./",
                    token=os.getenv("HF_TOKEN"))
    return f"./{model_id}"


def app():
    with gr.Blocks():
        with gr.Row():
            with gr.Column():
                img_path = gr.Image(type="filepath", label="Image")
                model_path = gr.Dropdown(
                    label="Model",
                    choices=[
                        "YOLOv9-S_X_LOCO-converted.pt",
                        "YOLOv9-S_X_LOCO.pt",
                        "YOLOv9-E_X_LOCO-converted.pt",
                        "YOLOv9-E_X_LOCO.pt",
                    ],
                    value="YOLOv9-E_X_LOCO-converted.pt",
                )
                image_size = gr.Slider(
                    label="Image Size",
                    minimum=320,
                    maximum=1280,
                    step=32,
                    value=640,
                )
                conf_threshold = gr.Slider(
                    label="Confidence Threshold",
                    minimum=0.1,
                    maximum=1.0,
                    step=0.1,
                    value=0.4,
                )
                iou_threshold = gr.Slider(
                    label="IoU Threshold",
                    minimum=0.1,
                    maximum=1.0,
                    step=0.1,
                    value=0.5,
                )
                yolov9_infer = gr.Button(value="Inference")

            with gr.Column():
                output_numpy = gr.Image(type="numpy",label="Output")

        yolov9_infer.click(
            fn=yolov9_inference,
            inputs=[
                img_path,
                model_path,
                image_size,
                conf_threshold,
                iou_threshold,
            ],
            outputs=[output_numpy],
        )
        
        gr.Examples(
            examples=[
                [
                    "data/forklift.jpg",
                    "YOLOv9-S_X_LOCO-converted.pt",
                    640,
                    0.3,
                    0.7,
                ],
                [
                    "data/hall.jpg",
                    "YOLOv9-E_X_LOCO-converted.pt",
                    640,
                    0.4,
                    0.5,
                ],
            ],
            fn=yolov9_inference,
            inputs=[
                img_path,
                model_path,
                image_size,
                conf_threshold,
                iou_threshold,
            ],
            outputs=[output_numpy],
            cache_examples=True,
        )


gradio_app = gr.Blocks()
with gradio_app:
    gr.HTML(
        """
    <h1 style='text-align: center'>
    YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information
    </h1>
    """)
    gr.HTML(
        """
        <h3 style='text-align: center'>
        Follow me for more!
        <a href='https://twitter.com/konihd_7' target='_blank'>Twitter</a> | <a href='https://github.com/KoniHD' target='_blank'>Github</a> | <a href='https://www.linkedin.com/in/konstantin-zeck/' target='_blank'>Linkedin</a>  | <a href='https://www.huggingface.co/KoniHD/' target='_blank'>HuggingFace</a>
        </h3>
        """)
    with gr.Row():
        with gr.Column():
            app()

gradio_app.launch(debug=True)