Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import torch | |
| from transformers import pipeline | |
| import librosa | |
| import soundfile as sf | |
| import os | |
| import spaces # Ensure spaces is imported | |
| def split_audio(audio_data, sr, chunk_duration=30): | |
| """Split audio into chunks of chunk_duration seconds.""" | |
| chunks = [] | |
| for start in range(0, len(audio_data), int(chunk_duration * sr)): | |
| end = start + int(chunk_duration * sr) | |
| chunks.append(audio_data[start:end]) | |
| return chunks | |
| def transcribe_long_audio(audio_path, transcriber, chunk_duration=30): | |
| """Transcribe long audio by splitting into smaller chunks.""" | |
| try: | |
| # Load the audio file | |
| audio_data, sr = librosa.load(audio_path, sr=None) | |
| chunks = split_audio(audio_data, sr, chunk_duration) | |
| transcriptions = [] | |
| for i, chunk in enumerate(chunks): | |
| chunk_path = f"temp_chunk_{i}.wav" | |
| sf.write(chunk_path, chunk, sr) # Save chunk as WAV | |
| transcription = transcriber(chunk_path)["text"] | |
| transcriptions.append(transcription) | |
| os.remove(chunk_path) # Cleanup temp files | |
| return " ".join(transcriptions) | |
| except Exception as e: | |
| print(f"Error in transcribe_long_audio: {e}") | |
| return f"Error processing audio: {e}" | |
| def main(): | |
| device = 0 if torch.cuda.is_available() else -1 | |
| try: | |
| transcriber = pipeline("automatic-speech-recognition", model="openai/whisper-base", device=device) | |
| summarizer = pipeline("summarization", model="facebook/bart-large-cnn") | |
| except Exception as e: | |
| print(f"Error loading models: {e}") | |
| raise | |
| def process_audio(audio_input): | |
| try: | |
| print(f"Processing uploaded audio: {audio_input}") | |
| if not isinstance(audio_input, str): | |
| raise ValueError("Invalid input type. Please upload a valid audio file.") | |
| if os.path.isdir(audio_input): | |
| raise ValueError("Input is a directory, not a file.") | |
| # Transcribe the uploaded audio file | |
| transcription = transcribe_long_audio(audio_input, transcriber, chunk_duration=30) | |
| summary = summarizer(transcription, max_length=50, min_length=10, do_sample=False)[0]["summary_text"] | |
| return transcription, summary, audio_input | |
| except Exception as e: | |
| print(f"Error in process_audio: {e}") | |
| return f"Error processing audio: {e}", "", "" | |
| with gr.Blocks() as interface: | |
| with gr.Row(): | |
| with gr.Column(): | |
| # Only support file uploads | |
| audio_input = gr.Audio(type="filepath", label="Upload Audio File") | |
| process_button = gr.Button("Transcribe Audio") | |
| with gr.Column(): | |
| transcription_output = gr.Textbox(label="Transcription", lines=10) | |
| summary_output = gr.Textbox(label="Summary", lines=5) | |
| process_button.click( | |
| process_audio, | |
| inputs=[audio_input], | |
| outputs=[transcription_output, summary_output] | |
| ) | |
| interface.launch(share=False) | |
| if __name__ == "__main__": | |
| main() | |