import gradio as gr from transformers import WhisperProcessor, WhisperForConditionalGeneration import torch import soundfile as sf # Load Whisper model and processor from Hugging Face model_name = "openai/whisper-large-v3" processor = WhisperProcessor.from_pretrained(model_name) model = WhisperForConditionalGeneration.from_pretrained(model_name) # Ensure the model is using the correct device (GPU or CPU) device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) def transcribe(audio): # Check if the input is a file path and load the audio from the file if isinstance(audio, str): # Assuming it's a file path audio, sampling_rate = sf.read(audio) # If the audio has more than one channel, convert it to mono by averaging the channels if len(audio.shape) > 1: audio = audio.mean(axis=1) # Process the audio to get input features input_features = processor(audio, sampling_rate=16000, return_tensors="pt").input_features.to(device) # Generate transcription with attention_mask and correct input_features attention_mask = torch.ones(input_features.shape, dtype=torch.long, device=device) generated_ids = model.generate( input_features=input_features, attention_mask=attention_mask, language="en" # Force translation to English ) # Decode transcription transcription = processor.batch_decode(generated_ids, skip_special_tokens=True)[0] return transcription # Create a Gradio Interface interface = gr.Interface( fn=transcribe, inputs=gr.Audio(sources="upload", type="numpy"), # Correct handling of audio as numpy array outputs="text", title="Whisper Speech-to-Text API", description="Upload an audio file and get a transcription using OpenAI's Whisper model from Hugging Face." ) # Launch the interface as an API interface.launch()