Spaces:
Sleeping
Sleeping
File size: 3,399 Bytes
50a8af6 dc8d315 50a8af6 9f90348 dc8d315 88ad01d 98b0ec0 1996ce2 98b0ec0 88ad01d 1f61dfb 88ad01d 1f61dfb 98b0ec0 1f61dfb dc8d315 1f61dfb ed5d96c 1f61dfb dc8d315 ed5d96c 1f61dfb ed5d96c 1f61dfb dc8d315 5d2f363 1f61dfb 88ad01d dc8d315 1f61dfb dc8d315 50a8af6 1f61dfb 50a8af6 dc8d315 |
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 |
import gradio as gr
from evaluate import run_evaluation
import pandas as pd
LEADERBOARD_CSV = "leaderboard.csv"
import os
from datetime import datetime, date
from datasets import load_dataset
dataset = load_dataset(os.getenv('VG_user'))
aaa = dataset['train'].to_dict()
for i in aaa:
aaa[i] = aaa[i][0]
users =aaa
SUBMIT_RECORD = "submissions.csv"
MAX_SUBMIT_PER_DAY = 5
def check_submission_limit(username):
if not os.path.exists(SUBMIT_RECORD):
return True # 没有人提交过
df = pd.read_csv(SUBMIT_RECORD)
today = date.today()
user_today_subs = df[
(df["username"] == username) &
(pd.to_datetime(df["timestamp"]).dt.date == today)
]
return len(user_today_subs) < MAX_SUBMIT_PER_DAY
def record_submission(username):
now = datetime.now().isoformat()
if os.path.exists(SUBMIT_RECORD):
df = pd.read_csv(SUBMIT_RECORD)
else:
df = pd.DataFrame(columns=["username", "timestamp"])
df.loc[len(df)] = {"username": username, "timestamp": now}
df.to_csv(SUBMIT_RECORD, index=False)
import json
def check_user_valid(username, password):
return username in users and users.get(username) == password
def update_leaderboard(username, score1, score2, score3):
# 追加记录到总提交记录
if os.path.exists("leaderboard.csv"):
sub_df = pd.read_csv("leaderboard.csv")
else:
sub_df = pd.DataFrame(columns=["username", "[email protected]", "[email protected]", "[email protected]"])
sub_df.loc[len(sub_df)] = [username, score1, score2, score3]
sub_df.to_csv("leaderboard.csv", index=False)
# 从所有提交中挑选每用户score1最高的记录
top_df = sub_df.sort_values("[email protected]", ascending=False).drop_duplicates("username", keep="first")
top_df = top_df.sort_values("[email protected]", ascending=False)
top_df.to_csv("leaderboard.csv", index=False)
return top_df
def show_lb():
if os.path.exists("leaderboard.csv"):
sub_df = pd.read_csv("leaderboard.csv")
else:
sub_df = pd.DataFrame(columns=["username", "[email protected]", "[email protected]", "[email protected]"])
return sub_df
def evaluate_and_update(pred_file, username,password):
if not check_submission_limit(username):
return "⛔ Submission limit exceeded for today.", pd.DataFrame()
if not check_user_valid(username, password):
return "❌ Invalid username or password", pd.DataFrame()
score1, score2, score3 = run_evaluation(pred_file.name)
record_submission(username)
leaderboard_df = update_leaderboard(username, score1, score2, score3)
return f"✅ [email protected]: {score1:.4f}, [email protected]: {score2:.4f}, [email protected]: {score3:.4f}", leaderboard_df
with gr.Blocks() as demo:
gr.Markdown("# 🧊 MMScan HVG Challenge")
with gr.Row():
username = gr.Textbox(label="Username")
password = gr.Textbox(label="Password", type="password")
upload = gr.File(label="Upload your prediction (.json)")
score_text = gr.Textbox(label="Evaluation score")
leaderboard = gr.Dataframe(headers=["Name", "Score"], interactive=False)
submit_btn = gr.Button("Submit")
submit_btn.click(
fn=evaluate_and_update,
inputs=[upload, username,password],
outputs=[score_text, leaderboard]
)
show_btn = gr.Button("Show Leaderboard")
show_btn.click(fn=show_lb,inputs=[],outputs=[leaderboard])
demo.launch() |