File size: 2,439 Bytes
8bbbd5a
 
 
 
773114d
8bbbd5a
773114d
43946d5
8bbbd5a
 
 
 
 
 
773114d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8bbbd5a
773114d
8bbbd5a
 
 
 
773114d
8bbbd5a
 
 
 
 
 
 
 
afbbb72
 
acbd088
773114d
 
8bbbd5a
 
 
773114d
43946d5
773114d
 
 
 
 
 
 
 
 
92648cd
8bbbd5a
 
773114d
8bbbd5a
 
 
 
 
 
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
import gradio as gr
import pandas as pd
import requests
import io
from datetime import datetime

# csv file
CSV_URL = "https://docs.google.com/spreadsheets/d/e/2PACX-1vSFclK2ikmy-v5gdrSPR20mOU_CUEO2QOnkYMvuxTx8wyP0VHxP_29JYHhnRvJbg_SWgkwnOHolRPPh/pub?output=csv"
# fetch data from google sheets
def fetch_leaderboard_data():
    try:
        response = requests.get(CSV_URL)
        response.raise_for_status()
        data = pd.read_csv(io.StringIO(response.text))

        # Normalize column names (lowercase & strip spaces)
        data.columns = data.columns.str.strip().str.lower()

        # Ensure "Rank" is treated as a number for sorting
        if 'rank' in data.columns:
            data['rank'] = pd.to_numeric(data['rank'], errors='coerce')

        # Handle date parsing (optional)
        if 'date and time' in data.columns:
            data['date and time'] = pd.to_datetime(data['date and time'], errors='coerce')

        # Sort by rank (ascending order)
        data = data.sort_values(by='rank', ascending=True)

        # Capitalize column names before returning
        data.columns = data.columns.str.title()

        return data

    except Exception as e:
        print(f"Error fetching data: {e}")
        return pd.DataFrame({"Error": ["Unable to fetch data"]})


# title for the leaderboard
title = """
<center>
<h1> IEEE Low-Power Computer Vision Challenge </h1>
<b> 2025 CVPR WORKSHOP </b>
</center>
"""

description = """ 
<p><b>Important:</b> The leaderboard only shows results from <b>registered teams</b>. Only the <b>last submission</b> from each team in the <b>previous day</b> will be evaluated.</p>
<p>Can't find your submission? Check <a href="https://szz1-failed-jobs.hf.space">Failed Jobs</a>.</p>
"""

# gradio app
def create_gradio_app():
    with gr.Blocks(theme="gradio/soft") as app:
        # gr.HTML(title) 
        # gr.HTML(description)

        with gr.Column():
            refresh_button = gr.Button("Refresh Leaderboard")
            leaderboard = gr.DataFrame(
                value=fetch_leaderboard_data(),
                interactive=False,
                label="Leaderboard",
            )

        refresh_button.click(lambda: fetch_leaderboard_data(), outputs=leaderboard)
    return app

# launch gradio app
def run_gradio_app():
    app = create_gradio_app()
    app.launch(server_name="0.0.0.0", server_port=7860, share=True)

if __name__ == "__main__":
    run_gradio_app()