Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -1,38 +1,38 @@
|
|
1 |
-
|
|
|
2 |
|
3 |
-
#
|
4 |
data = [
|
5 |
-
{"蛛絲馬跡": 1, "嫌疑犯": "5冰淇淋師傅", "直接證據": "SAS", "間接證據": "RHS SSS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
6 |
-
{"蛛絲馬跡": 2, "嫌疑犯": "7候選人", "直接證據": "SSS", "間接證據": "SAS ASA AAS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
7 |
-
{"蛛絲馬跡": 3, "嫌疑犯": "8列車長", "直接證據": "SAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
8 |
-
{"蛛絲馬跡": 4, "嫌疑犯": "2農夫", "直接證據": "SSS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
9 |
-
{"蛛絲馬跡": 5, "嫌疑犯": "1漁夫", "直接證據": "RHS", "間接證據": "SAS SSS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
10 |
-
{"蛛絲馬跡": 6, "嫌疑犯": "4廚師", "直接證據": "ASA", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
11 |
-
{"蛛絲馬跡": 7, "嫌疑犯": "3女僕", "直接證據": "RHS", "間接證據": "SAS SSS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
12 |
-
{"蛛絲馬跡": 8, "嫌疑犯": "6棋士", "直接證據": "AAS", "間接證據": "ASA", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
13 |
-
{"蛛絲馬跡": 9, "嫌疑犯": "10芭蕾舞者", "直接證據": "SSS", "間接證據": "SAS AAS ASA", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
14 |
-
{"蛛絲馬跡": 10, "嫌疑犯": "9 DJ", "直接證據": "SAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
15 |
-
{"蛛絲馬跡": 11, "嫌疑犯": "16造型師", "直接證據": "RHS", "間接證據": "SSS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
16 |
-
{"蛛絲馬跡": 12, "嫌疑犯": "12教宗", "直接證據": "SSS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
17 |
-
{"蛛絲馬跡": 13, "嫌疑犯": "14音樂家", "直接證據": "ASA AAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
18 |
-
{"蛛絲馬跡": 14, "嫌疑犯": "13軍人", "直接證據": "ASA", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
19 |
-
{"蛛絲馬跡": 15, "嫌疑犯": "17和尚", "直接證據": "ASA AAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
20 |
-
{"蛛絲馬跡": 16, "嫌疑犯": "18歌手", "直接證據": "AAS", "間接證據": "ASA", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
21 |
-
{"蛛絲馬跡": 17, "嫌疑犯": "11醫生", "直接證據": "SAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
22 |
-
{"蛛絲馬跡": 18, "嫌疑犯": "15壽司師傅", "直接證據": "SAS", "間接證據": "AAS ASA SSS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
23 |
-
{"蛛絲馬跡": 19, "嫌疑犯": "21郵差", "直接證據": "RHS", "間接證據": "SAS SSS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
24 |
-
{"蛛絲馬跡": 20, "嫌疑犯": "19籃球員", "直接證據": "RHS", "間接證據": "SSS SAS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
25 |
-
{"蛛絲馬跡": 21, "嫌疑犯": "22法官", "直接證據": "ASA AAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
26 |
-
{"蛛絲馬跡": 22, "嫌疑犯": "20漫畫家", "直接證據": "ASA AAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
27 |
-
{"蛛絲馬跡": 23, "嫌疑犯": "25殺手", "直接證據": "ASA AAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
28 |
-
{"蛛絲馬跡": 24, "嫌疑犯": "28科學家", "直接證據": "ASA AAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
29 |
-
{"蛛絲馬跡": 25, "嫌疑犯": "27太空人", "直接證據": "SSS", "間接證據": "ASA AAS RHS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
30 |
-
{"蛛絲馬跡": 26, "嫌疑犯": "23酒保", "直接證據": "AAS", "間接證據": "ASA", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
31 |
-
{"蛛絲馬跡": 27, "嫌疑犯": "24魔術師", "直接證據": "ASA", "間接證據": "AAS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
32 |
-
{"蛛絲馬跡": 28, "嫌疑犯": "26保全", "直接證據": "ASA", "間接證據": "AAS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/
|
33 |
]
|
34 |
|
35 |
-
# To store the indirect evidence dynamically
|
36 |
indirect_evidence_store = ""
|
37 |
|
38 |
def query_data(clue_number):
|
@@ -43,13 +43,16 @@ def query_data(clue_number):
|
|
43 |
if row:
|
44 |
suspect = row['嫌疑犯']
|
45 |
direct_evidence = row['直接證據']
|
46 |
-
indirect_evidence_store = row['間接證據'] if row['間接證據'] else "無間接證據"
|
47 |
-
|
|
|
|
|
|
|
48 |
return (
|
49 |
f"嫌疑犯: {suspect}\n直接證據: {direct_evidence}",
|
50 |
gr.update(visible=True),
|
51 |
gr.update(value="", visible=False),
|
52 |
-
image_url
|
53 |
)
|
54 |
else:
|
55 |
return (
|
@@ -81,26 +84,24 @@ def reset_fields():
|
|
81 |
None
|
82 |
)
|
83 |
|
84 |
-
# Create the Gradio interface
|
85 |
with gr.Blocks() as demo:
|
86 |
gr.Markdown("<h1>嫌疑犯ABC的現身</h1>")
|
87 |
gr.Markdown("<h3>法官系統</h3>")
|
88 |
|
89 |
with gr.Row():
|
90 |
input_box = gr.Textbox(label="請輸入蛛絲馬跡號碼", placeholder="例如: 11", lines=1)
|
91 |
-
query_button = gr.Button("查詢")
|
92 |
|
93 |
with gr.Row():
|
94 |
with gr.Column(scale=1):
|
95 |
output_box = gr.Textbox(label="查詢結果", interactive=False)
|
96 |
with gr.Column(scale=1):
|
97 |
-
image_output = gr.Image(label="嫌疑犯圖片",
|
98 |
-
|
99 |
-
indirect_button = gr.Button("
|
100 |
indirect_output = gr.Textbox(label="間接證據內容", interactive=False, visible=False)
|
101 |
-
reset_button = gr.Button("重新查詢")
|
102 |
|
103 |
-
# Bind actions to functions
|
104 |
query_button.click(
|
105 |
query_data,
|
106 |
inputs=input_box,
|
@@ -117,13 +118,13 @@ with gr.Blocks() as demo:
|
|
117 |
outputs=[input_box, indirect_button, indirect_output, output_box, image_output]
|
118 |
)
|
119 |
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
|
|
127 |
|
128 |
-
# Launch the Gradio app
|
129 |
demo.launch()
|
|
|
1 |
+
iimport gradio as gr
|
2 |
+
import time # 新增 time 模組處理快取
|
3 |
|
4 |
+
# 使用正確的圖片路徑格式
|
5 |
data = [
|
6 |
+
{"蛛絲馬跡": 1, "嫌疑犯": "5冰淇淋師傅", "直接證據": "SAS", "間接證據": "RHS SSS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/5%E5%86%B0%E6%B7%87%E6%B7%8B%E5%B8%AB%E5%82%85.png"},
|
7 |
+
{"蛛絲馬跡": 2, "嫌疑犯": "7候選人", "直接證據": "SSS", "間接證據": "SAS ASA AAS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/7%E5%80%99%E9%81%B8%E4%BA%BA.png"},
|
8 |
+
{"蛛絲馬跡": 3, "嫌疑犯": "8列車長", "直接證據": "SAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/8%E5%88%97%E8%BB%8A%E9%95%B7.png"},
|
9 |
+
{"蛛絲馬跡": 4, "嫌疑犯": "2農夫", "直接證據": "SSS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/2%E8%BE%B2%E5%A4%AB.png"},
|
10 |
+
{"蛛絲馬跡": 5, "嫌疑犯": "1漁夫", "直接證據": "RHS", "間接證據": "SAS SSS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/1%E6%BC%81%E5%A4%AB.png"},
|
11 |
+
{"蛛絲馬跡": 6, "嫌疑犯": "4廚師", "直接證據": "ASA", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/4%E5%BB%9A%E5%B8%AB.png"},
|
12 |
+
{"蛛絲馬跡": 7, "嫌疑犯": "3女僕", "直接證據": "RHS", "間接證據": "SAS SSS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/3%E5%A5%B3%E5%83%95.png"},
|
13 |
+
{"蛛絲馬跡": 8, "嫌疑犯": "6棋士", "直接證據": "AAS", "間接證據": "ASA", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/6%E6%A3%8B%E5%A3%AB.png"},
|
14 |
+
{"蛛絲馬跡": 9, "嫌疑犯": "10芭蕾舞者", "直接證據": "SSS", "間接證據": "SAS AAS ASA", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/10%E8%8A%AD%E8%95%BE%E8%88%9E%E8%80%85.png"},
|
15 |
+
{"蛛絲馬跡": 10, "嫌疑犯": "9 DJ", "直接證據": "SAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/9_DJ.png"},
|
16 |
+
{"蛛絲馬跡": 11, "嫌疑犯": "16造型師", "直接證據": "RHS", "間接證據": "SSS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/16%E9%80%A0%E5%9E%8B%E5%B8%AB.png"},
|
17 |
+
{"蛛絲馬跡": 12, "嫌疑犯": "12教宗", "直接證據": "SSS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/12%E6%95%99%E5%AE%97.png"},
|
18 |
+
{"蛛絲馬跡": 13, "嫌疑犯": "14音樂家", "直接證據": "ASA AAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/14%E9%9F%B3%E6%A8%82%E5%AE%B6.png"},
|
19 |
+
{"蛛絲馬跡": 14, "嫌疑犯": "13軍人", "直接證據": "ASA", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/13%E8%BB%8D%E4%BA%BA.png"},
|
20 |
+
{"蛛絲馬跡": 15, "嫌疑犯": "17和尚", "直接證據": "ASA AAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/17%E5%92%8C%E5%B0%9A.png"},
|
21 |
+
{"蛛絲馬跡": 16, "嫌疑犯": "18歌手", "直接證據": "AAS", "間接證據": "ASA", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/18%E6%AD%8C%E6%89%8B.png"},
|
22 |
+
{"蛛絲馬跡": 17, "嫌疑犯": "11醫生", "直接證據": "SAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/11%E9%86%AB%E7%94%9F.png"},
|
23 |
+
{"蛛絲馬跡": 18, "嫌疑犯": "15壽司師傅", "直接證據": "SAS", "間接證據": "AAS ASA SSS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/15%E5%A3%BD%E5%8F%B8%E5%B8%AB%E5%82%85.png"},
|
24 |
+
{"蛛絲馬跡": 19, "嫌疑犯": "21郵差", "直接證據": "RHS", "間接證據": "SAS SSS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/21%E9%83%B5%E5%B7%AE.png"},
|
25 |
+
{"蛛絲馬跡": 20, "嫌疑犯": "19籃球員", "直接證據": "RHS", "間接證據": "SSS SAS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/19%E8%97%8D%E7%90%83%E5%93%A1.png"},
|
26 |
+
{"蛛絲馬跡": 21, "嫌疑犯": "22法官", "直接證據": "ASA AAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/22%E6%B3%95%E5%AE%98.png"},
|
27 |
+
{"蛛絲馬跡": 22, "嫌疑犯": "20漫畫家", "直接證據": "ASA AAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/20%E6%BC%AB%E7%95%AB%E5%AE%B6.png"},
|
28 |
+
{"蛛絲馬跡": 23, "嫌疑犯": "25殺手", "直接證據": "ASA AAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/25%E6%AE%BA%E6%89%8B.png"},
|
29 |
+
{"蛛絲馬跡": 24, "嫌疑犯": "28科學家", "直接證據": "ASA AAS", "間接證據": "無", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/28%E7%A7%91%E5%AD%B8%E5%AE%B6.png"},
|
30 |
+
{"蛛絲馬跡": 25, "嫌疑犯": "27太空人", "直接證據": "SSS", "間接證據": "ASA AAS RHS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/27%E5%A4%AA%E7%A9%BA%E4%BA%BA.png"},
|
31 |
+
{"蛛絲馬跡": 26, "嫌疑犯": "23酒保", "直接證據": "AAS", "間接證據": "ASA", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/23%E9%85%92%E4%BF%9D.png"},
|
32 |
+
{"蛛絲馬跡": 27, "嫌疑犯": "24魔術師", "直接證據": "ASA", "間接證據": "AAS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/24%E9%AD%94%E8%A1%93%E5%B8%AB.png"},
|
33 |
+
{"蛛絲馬跡": 28, "嫌疑犯": "26保全", "直接證據": "ASA", "間接證據": "AAS", "嫌疑犯圖片": "https://huggingface.co/spaces/Lashtw/Judge_system/resolve/main/26%E4%BF%9D%E5%85%A8.png"}
|
34 |
]
|
35 |
|
|
|
36 |
indirect_evidence_store = ""
|
37 |
|
38 |
def query_data(clue_number):
|
|
|
43 |
if row:
|
44 |
suspect = row['嫌疑犯']
|
45 |
direct_evidence = row['直接證據']
|
46 |
+
indirect_evidence_store = row['間接證據'] if row['間接證據'] != "無" else "無間接證據"
|
47 |
+
|
48 |
+
# 加入時間戳記處理快取問題
|
49 |
+
image_url = f"{row['嫌疑犯圖片']}?{int(time.time())}" if row['嫌疑犯圖片'] else None
|
50 |
+
|
51 |
return (
|
52 |
f"嫌疑犯: {suspect}\n直接證據: {direct_evidence}",
|
53 |
gr.update(visible=True),
|
54 |
gr.update(value="", visible=False),
|
55 |
+
image_url
|
56 |
)
|
57 |
else:
|
58 |
return (
|
|
|
84 |
None
|
85 |
)
|
86 |
|
|
|
87 |
with gr.Blocks() as demo:
|
88 |
gr.Markdown("<h1>嫌疑犯ABC的現身</h1>")
|
89 |
gr.Markdown("<h3>法官系統</h3>")
|
90 |
|
91 |
with gr.Row():
|
92 |
input_box = gr.Textbox(label="請輸入蛛絲馬跡號碼", placeholder="例如: 11", lines=1)
|
93 |
+
query_button = gr.Button("查詢", variant="primary")
|
94 |
|
95 |
with gr.Row():
|
96 |
with gr.Column(scale=1):
|
97 |
output_box = gr.Textbox(label="查詢結果", interactive=False)
|
98 |
with gr.Column(scale=1):
|
99 |
+
image_output = gr.Image(label="嫌疑犯圖片", elem_id="suspect-image", show_label=True)
|
100 |
+
|
101 |
+
indirect_button = gr.Button("顯示間接證據", visible=False)
|
102 |
indirect_output = gr.Textbox(label="間接證據內容", interactive=False, visible=False)
|
103 |
+
reset_button = gr.Button("重新查詢", variant="secondary")
|
104 |
|
|
|
105 |
query_button.click(
|
106 |
query_data,
|
107 |
inputs=input_box,
|
|
|
118 |
outputs=[input_box, indirect_button, indirect_output, output_box, image_output]
|
119 |
)
|
120 |
|
121 |
+
demo.css = """
|
122 |
+
#suspect-image {
|
123 |
+
max-width: 250px !important;
|
124 |
+
max-height: 250px !important;
|
125 |
+
border: 2px solid #e0e0e0;
|
126 |
+
border-radius: 8px;
|
127 |
+
}
|
128 |
+
"""
|
129 |
|
|
|
130 |
demo.launch()
|