Spaces:
Runtime error
Runtime error
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, language, 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, language) | |
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(): | |
markdown_content = f""" | |
| {speaker_id} | | |
|-----------| | |
""" | |
speaker_explanations = explanations[speaker_id] | |
speaker_section = [ | |
gr.Markdown(markdown_content, 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") | |
language_dropdown = gr.Dropdown( | |
choices=["English", "Hebrew", "Arabic", "French", "German", "Italian", "Japanese", "Chinese", "Auto-detect"], | |
value="English", | |
label="Transcription Language" | |
) | |
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, language_dropdown], | |
outputs=output_components, | |
show_progress=True | |
) | |
if __name__ == "__main__": | |
iface.launch() |