Spaces:
Runtime error
Runtime error
File size: 4,879 Bytes
b8a7acb a26ac7e 8505717 b8a7acb 3670697 c114fac 119b8cd c114fac 3670697 c114fac 4855721 c114fac 75ea1cc c114fac 26a111a c114fac e77657a c114fac f9f3cf4 26a111a fd65dfa 4494730 2f5d69d fd65dfa 875db1b 2f5d69d 875db1b 119b8cd 875db1b e77657a 2f5d69d 4c637de 1e7c569 2078afe 336fe2c 6062e5c f6b2216 6062e5c 2f5d69d 95ee51a 2f5d69d 6062e5c 2f5d69d f6b2216 336fe2c 2f5d69d 6bbaa62 f6b2216 336fe2c 1641d0b e541f17 2f5d69d 3ed67f0 e541f17 466cd11 9ba8687 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
import gradio as gr
from llm_loader import load_model
from processing import process_input
from transcription_diarization import diarize_audio
from visualization import create_charts
import time
from config import openai_api_key
# Load the model
llm = load_model(openai_api_key)
def analyze_video(video_path, progress=gr.Progress()):
start_time = time.time()
if not video_path:
return [None] * 29 # Return None for all outputs
progress(0, desc="Starting analysis...")
progress(0.2, desc="Starting transcription and diarization")
transcription = diarize_audio(video_path)
progress(0.5, desc="Transcription and diarization complete.")
progress(0.6, desc="Processing transcription")
results = process_input(transcription, llm)
progress(0.7, desc="Transcription processing complete.")
progress(0.9, desc="Generating charts")
charts, explanations, general_impressions = create_charts(results)
progress(1.0, desc="Charts generation complete.")
end_time = time.time()
execution_time = end_time - start_time
output_components = [transcription] # transcript
for i, (speaker_id, speaker_charts) in enumerate(charts.items(), start=1):
speaker_explanations = explanations[speaker_id]
speaker_general_impression = general_impressions[speaker_id]
speaker_section = [
gr.Markdown(f"# {speaker_id}", visible=True),
gr.Textbox(value=speaker_general_impression, label="General Impression",
visible=True),
gr.Plot(value=speaker_charts.get("attachment", None), visible=True),
gr.Plot(value=speaker_charts.get("dimensions", None), visible=True),
gr.Textbox(value=speaker_explanations.get("attachment", ""), label="Attachment Styles Explanation",
visible=True),
gr.Plot(value=speaker_charts.get("bigfive", None), visible=True),
gr.Textbox(value=speaker_explanations.get("bigfive", ""), label="Big Five Traits Explanation",
visible=True),
gr.Plot(value=speaker_charts.get("personality", None), visible=True),
gr.Textbox(value=speaker_explanations.get("personality", ""), label="Personality Disorders Explanation",
visible=True),
]
output_components.extend(speaker_section)
# Pad with None for any missing speakers
while len(output_components) < 28:
output_components.extend([gr.update(visible=False)] * 9)
output_components.append(f"Completed in {int(execution_time)} seconds.") # execution info
return output_components
def update_output(*args):
return [gr.update(value=arg, visible=arg is not None) for arg in args]
def use_example():
return "examples/Scenes.From.A.Marriage.US.mp4"
with gr.Blocks() as iface:
gr.Markdown("# AI Personality Detection")
with gr.Row():
with gr.Column(scale=3):
gr.Markdown("Upload a video")
video_input = gr.Video(label="Upload Video")
analyze_button = gr.Button("Analyze")
with gr.Column(scale=1):
gr.Markdown("Example Video")
example_video = gr.Video("examples/Scenes.From.A.Marriage.US.mp4", label="Example Video")
use_example_button = gr.Button("Use Example Video")
# Create output components
output_components = []
# Add transcript output near the top
execution_info_box = gr.Textbox(label="Transcript", value="N/A", lines=1)
output_components.append(execution_info_box)
with gr.Row():
for i in range(3): # Assuming maximum of 3 speakers
output_components.extend([
gr.Markdown(visible=False),
gr.Textbox(label="General Impression", visible=False),
gr.Plot(visible=False),
gr.Plot(visible=False),
gr.Textbox(label="Attachment Styles Explanation", visible=False),
gr.Plot(visible=False),
gr.Textbox(label="Big Five Traits Explanation", visible=False),
gr.Plot(visible=False),
gr.Textbox(label="Personality Disorders Explanation", visible=False),
])
# Add execution info component
transcript_output = gr.Textbox(label="Transcript", lines=10, visible=False)
output_components.append(transcript_output)
analyze_button.click(
fn=analyze_video,
inputs=[video_input],
outputs=output_components,
show_progress=True
)
use_example_button.click(
fn=use_example,
inputs=[],
outputs=[video_input],
).then(fn=analyze_video,
inputs=[video_input],
outputs=output_components,
show_progress=True
)
if __name__ == "__main__":
iface.launch() |