rbler's picture
Update app.py
ed5d96c verified
raw
history blame
3.4 kB
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()