| import gradio as gr |
| import requests |
|
|
| |
| WEBHOOK_URL = "https://script.google.com/macros/s/AKfycby_67Zh_ELOMcD9mLxf-nZYi_nNdsGb_C7E66uYdK924JKx2eps6nn8TizLYdtzqQvCAw/exec" |
|
|
| |
| def submit_response(choice, feedback): |
| if choice is None: |
| return "β 'Q1' μ§λ¬Έμ μλ΅ν΄μ£ΌμΈμ." |
|
|
| payload = { |
| "choice": choice, |
| "feedback": feedback |
| } |
|
|
| try: |
| response = requests.post(WEBHOOK_URL, json=payload) |
| if response.status_code == 200: |
| completion_code = "XAI2025" |
| return ( |
| f"β
μ€λ¬Έ μλ£!\n" |
| f"μ ν: {choice}\n" |
| f"μ견: {feedback if feedback else '(μ견 μμ)'}\n\n" |
| f"π§Ύ MTurkμ λ€μ μ½λλ₯Ό μ μΆνμΈμ: **{completion_code}**" |
| ) |
| else: |
| return f"β οΈ μ μ‘ μ€ν¨! μλ΅ μ½λ: {response.status_code}\nλ΄μ©: {response.text}" |
| except Exception as e: |
| return f"β μ€λ₯ λ°μ: {e}" |
|
|
| |
| with gr.Blocks() as demo: |
| gr.Markdown("## π₯ Explainable Action Recognition: μ¬μ©μ νκ°") |
| gr.Markdown("λΉλμ€μ λ κ°μ μ€λͺ
μ νμΈνκ³ , μ΄λ€ μ€λͺ
μ΄ λ μ§κ΄μ μΈμ§ μ νν΄ μ£ΌμΈμ.") |
|
|
| with gr.Row(): |
| gr.Video("assets/640320_video.mp4", label="π¬ μ
λ ₯ λΉλμ€") |
|
|
| with gr.Row(): |
| with gr.Column(): |
| gr.Image("assets/ex2.png", label="π
°οΈ μ€λͺ
A: UCF101 μμ± κΈ°λ°") |
| with gr.Column(): |
| gr.Image("assets/ex1.png", label="π
±οΈ μ€λͺ
B: Pose κ°λ
κΈ°λ°") |
|
|
| gr.Markdown("### β Q1. μ΄λ€ μ€λͺ
μ΄ λ μ§κ΄μ μ΄μλμ?") |
| choice = gr.Radio( |
| ["μ€λͺ
A (UCF μμ± κΈ°λ°)", "μ€λͺ
B (Pose κ°λ
κΈ°λ°)"], |
| label="λΉμ μ μ ν" |
| ) |
|
|
| gr.Markdown("### π¬ Q2. μΆκ° μκ²¬μ΄ μλ€λ©΄ μμ λ‘κ² μμ±ν΄ μ£ΌμΈμ.") |
| feedback = gr.Textbox( |
| placeholder="μ: μ€λͺ
Aλ λ ꡬ체μ μ΄μμ΄μ", |
| lines=2, |
| label="μ견 (μ νμ¬ν)" |
| ) |
|
|
| submit_btn = gr.Button("μ μΆ") |
| output = gr.Textbox(label="κ²°κ³Ό νμΈ") |
|
|
| submit_btn.click(fn=submit_response, inputs=[choice, feedback], outputs=output) |
|
|
| |
| demo.launch() |