Spaces:
Sleeping
Sleeping
File size: 3,470 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 79fe4cb dc8d315 79fe4cb 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 98 |
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", "gtop-1@0.25", "AP@0.25", "gtop-3@0.25"])
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("gtop-1@0.25", ascending=False).drop_duplicates("username", keep="first")
top_df = top_df.sort_values("gtop-1@0.25", 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", "gtop-1@0.25", "AP@0.25", "gtop-3@0.25"])
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"✅ gtop-1@0.25: {score1:.4f}, AP@0.25: {score2:.4f}, gtop-3@0.25: {score3:.4f}", leaderboard_df
with open("gradio_show.md", "r", encoding="utf-8") as f:
readme_content = f.read()
with gr.Blocks() as demo:
gr.Markdown(readme_content)
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() |