rbler commited on
Commit
1f61dfb
·
verified ·
1 Parent(s): 06757de

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -18
app.py CHANGED
@@ -1,17 +1,13 @@
1
  import gradio as gr
2
  from evaluate import run_evaluation
3
  import pandas as pd
4
- import os
5
- print(os.getenv('VG_DATA'))
6
- print(os.getenv('test'))
7
 
8
  LEADERBOARD_CSV = "leaderboard.csv"
9
- import pandas as pd
10
  import os
11
  from datetime import datetime, date
12
 
13
  SUBMIT_RECORD = "submissions.csv"
14
- MAX_SUBMIT_PER_DAY = 2
15
 
16
  def check_submission_limit(username):
17
  if not os.path.exists(SUBMIT_RECORD):
@@ -35,23 +31,52 @@ def record_submission(username):
35
  df = pd.DataFrame(columns=["username", "timestamp"])
36
  df.loc[len(df)] = {"username": username, "timestamp": now}
37
  df.to_csv(SUBMIT_RECORD, index=False)
 
 
 
 
 
38
 
39
- def evaluate_and_update(pred_file, username):
40
- if not check_submission_limit(username):
41
- return "⛔ Submission limit exceeded for today.", pd.read_csv(LEADERBOARD_CSV)
42
- score = run_evaluation(pred_file.name)
43
- if os.path.exists(LEADERBOARD_CSV):
44
- df = pd.read_csv(LEADERBOARD_CSV)
 
 
 
 
 
 
 
 
 
 
 
 
45
  else:
46
- df = pd.DataFrame(columns=["name", "score"])
47
- df.loc[len(df)] = {"name": username, "score": score}
48
- df = df.sort_values(by="score", ascending=False).reset_index(drop=True)
49
- df.to_csv(LEADERBOARD_CSV, index=False)
50
- return f"Your score: {score:.4f}", df
 
 
 
 
 
 
 
 
 
 
51
 
52
  with gr.Blocks() as demo:
53
  gr.Markdown("# 🧊 3D IoU Challenge")
54
- name = gr.Textbox(label="Username")
 
 
55
  upload = gr.File(label="Upload your prediction (.json)")
56
  score_text = gr.Textbox(label="Evaluation score")
57
  leaderboard = gr.Dataframe(headers=["Name", "Score"], interactive=False)
@@ -59,8 +84,10 @@ with gr.Blocks() as demo:
59
  submit_btn = gr.Button("Submit")
60
  submit_btn.click(
61
  fn=evaluate_and_update,
62
- inputs=[upload, name],
63
  outputs=[score_text, leaderboard]
64
  )
 
 
65
 
66
  demo.launch()
 
1
  import gradio as gr
2
  from evaluate import run_evaluation
3
  import pandas as pd
 
 
 
4
 
5
  LEADERBOARD_CSV = "leaderboard.csv"
 
6
  import os
7
  from datetime import datetime, date
8
 
9
  SUBMIT_RECORD = "submissions.csv"
10
+ MAX_SUBMIT_PER_DAY = 5
11
 
12
  def check_submission_limit(username):
13
  if not os.path.exists(SUBMIT_RECORD):
 
31
  df = pd.DataFrame(columns=["username", "timestamp"])
32
  df.loc[len(df)] = {"username": username, "timestamp": now}
33
  df.to_csv(SUBMIT_RECORD, index=False)
34
+ import json
35
+ def check_user_valid(username, password):
36
+ with open("users.json") as f:
37
+ users = json.load(f)
38
+ return username in users and users.get(username) == password
39
 
40
+ def update_leaderboard(username, score1, score2, score3):
41
+ # 追加记录到总提交记录
42
+ if os.path.exists("leaderboard.csv"):
43
+ sub_df = pd.read_csv("leaderboard.csv")
44
+ else:
45
+ sub_df = pd.DataFrame(columns=["username", "gtop-1@0.25", "AP@0.25", "AR@0.25"])
46
+ sub_df.loc[len(sub_df)] = [username, score1, score2, score3]
47
+ sub_df.to_csv("leaderboard.csv", index=False)
48
+
49
+ # 从所有提交中挑选每用户score1最高的记录
50
+ top_df = sub_df.sort_values("gtop-1@0.25", ascending=False).drop_duplicates("username", keep="first")
51
+ top_df = top_df.sort_values("gtop-1@0.25", ascending=False)
52
+ top_df.to_csv("leaderboard.csv", index=False)
53
+ return top_df
54
+
55
+ def show_lb():
56
+ if os.path.exists("leaderboard.csv"):
57
+ sub_df = pd.read_csv("leaderboard.csv")
58
  else:
59
+ sub_df = pd.DataFrame(columns=["username", "gtop-1@0.25", "AP@0.25", "AR@0.25"])
60
+ return sub_df
61
+ def evaluate_and_update(pred_file, username,password):
62
+
63
+ if not check_submission_limit(username):
64
+ return "⛔ Submission limit exceeded for today.", pd.DataFrame()
65
+ if not check_user_valid(username, password):
66
+ return "❌ Invalid username or password", pd.DataFrame()
67
+ score1, score2, score3 = run_evaluation(pred_file.name)
68
+ record_submission(username)
69
+ leaderboard_df = update_leaderboard(username, score1, score2, score3)
70
+
71
+ return f"✅ gtop-1@0.25: {score1:.4f}, AP@0.25: {score2:.4f}, AR@0.25: {score3:.4f}", leaderboard_df
72
+
73
+
74
 
75
  with gr.Blocks() as demo:
76
  gr.Markdown("# 🧊 3D IoU Challenge")
77
+ with gr.Row():
78
+ username = gr.Textbox(label="Username")
79
+ password = gr.Textbox(label="Password", type="password")
80
  upload = gr.File(label="Upload your prediction (.json)")
81
  score_text = gr.Textbox(label="Evaluation score")
82
  leaderboard = gr.Dataframe(headers=["Name", "Score"], interactive=False)
 
84
  submit_btn = gr.Button("Submit")
85
  submit_btn.click(
86
  fn=evaluate_and_update,
87
+ inputs=[upload, username,password],
88
  outputs=[score_text, leaderboard]
89
  )
90
+ show_btn = gr.Button("Show Leaderboard")
91
+ show_btn.click(fn=show_lb,inputs=[],outputs=[leaderboard])
92
 
93
  demo.launch()