Spaces:
Sleeping
Sleeping
| 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() |