reab5555's picture
Update app.py
127d580 verified
raw
history blame
4.17 kB
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, max_speakers, progress=gr.Progress()):
start_time = time.time()
if not video_path:
return [gr.Markdown("Please upload a video file.")] + [gr.update(visible=False)] * 49 + [
"Analysis not started."]
progress(0, desc="Starting analysis...")
progress(0.2, desc="Starting transcription and diarization")
transcription = diarize_audio(video_path, max_speakers)
print("Transcription:", transcription) # Debug print
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 = create_charts(results)
progress(1.0, desc="Charts generation complete.")
end_time = time.time()
execution_time = end_time - start_time
output_components = []
# Add transcript near the beginning
output_components.append(gr.Textbox(value=transcription, label="Transcript", lines=10, visible=True))
for speaker_id, speaker_charts in charts.items():
speaker_explanations = explanations[speaker_id]
speaker_section = [
gr.Markdown(f"## {speaker_id}", visible=True),
gr.Plot(value=speaker_charts.get("attachment", None), visible=True),
gr.Textbox(value=speaker_explanations.get("attachment", ""), label="Attachment Styles Explanation",
visible=True),
gr.Plot(value=speaker_charts.get("dimensions", None), 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)
while len(output_components) < 49:
output_components.extend([gr.update(visible=False)] * 8)
# Add execution info
output_components.append(
gr.Textbox(value=f"Completed in {int(execution_time)} seconds.", label="Execution Information", visible=True))
return output_components
with gr.Blocks() as iface:
gr.Markdown("# AI Personality Detection")
gr.Markdown("Upload a video")
video_input = gr.Video(label="Upload Video")
max_speakers = gr.Slider(minimum=1, maximum=3, step=1, value=2, label="Maximum Number of Speakers")
analyze_button = gr.Button("Analyze")
# Create output components
output_components = []
# Add transcript output near the top
execution_info_box = gr.Textbox(label="Execution Information", value="N/A", lines=1)
output_components.append(execution_info_box)
for _ in range(3): # Assuming maximum of 3 speakers
output_components.extend([
gr.Markdown(visible=False),
gr.Plot(visible=False),
gr.Textbox(label="Attachment Styles Explanation", visible=False),
gr.Plot(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, max_speakers],
outputs=output_components,
show_progress=True
)
if __name__ == "__main__":
iface.launch()