import gradio as gr import os import json with open('results.json', 'r') as f: results_data = json.load(f) with open('sarcasm_data.json', 'r') as f: sarcasm_data = json.load(f) def get_dialogues_and_result(id): pred = next((item for item in results_data if item['id'] == id), None) if not pred: return f"ID {id} not found in results.json" sarcasm_info = sarcasm_data.get(id) if not sarcasm_info: return f"ID {id} not found in sarcasm_data.json" utterance = f"{sarcasm_info['speaker']}: {sarcasm_info['utterance']}" context = "\n".join( f"{speaker}: {line}" for speaker, line in zip(sarcasm_info['context_speakers'], sarcasm_info['context']) ) output = { "id": id, "utterance": utterance, "context": context, "ground_truth": int(sarcasm_info['sarcasm']), "pred": pred['sarcasm'] } return output def analyze_videos(utterance_filename): utterance_id = os.path.splitext(os.path.basename(utterance_filename))[0] output = get_dialogues_and_result(utterance_id) return ( output["context"], output["utterance"], output["ground_truth"], output["pred"] ) def custom_css(): return """ .gradio-heading { text-align: center; color: #0056b3; font-size: 28px; font-weight: bold; margin-bottom: 20px; } """ css_style = custom_css() with gr.Blocks(css=css_style) as interface: gr.Markdown("
Sarcasm Detection
") with gr.Row(): with gr.Column(scale=1): context_video_input = gr.Video(label="Upload Context Video") punchline_video_input = gr.Video(label="Upload Punchline Video") with gr.Column(scale=2): context_dialogue_output = gr.Textbox(label="Context Dialogues") punchline_dialogue_output = gr.Textbox(label="Punchline Dialogue") with gr.Column(): punchline_sarcasm_true = gr.Label(label="Ground Truth") punchline_sarcasm_pred = gr.Label(label="Sarcasm Detected") submit_button = gr.Button("Submit") submit_button.click( fn=analyze_videos, inputs=[punchline_video_input], outputs=[ context_dialogue_output, punchline_dialogue_output, punchline_sarcasm_true, punchline_sarcasm_pred ] ) if __name__ == "__main__": interface.launch()