|
import torch |
|
from transformers import WhisperProcessor, WhisperForConditionalGeneration |
|
|
|
|
|
device = "cuda" if torch.cuda.is_available() else "cpu" |
|
print(f"Using device: {device}") |
|
|
|
|
|
model_name = "openai/whisper-base" |
|
processor = WhisperProcessor.from_pretrained(model_name) |
|
model = WhisperForConditionalGeneration.from_pretrained(model_name).to(device) |
|
|
|
def transcribe_audio(audio_file): |
|
try: |
|
|
|
audio_input, sample_rate = sf.read(audio_file) |
|
input_features = processor(audio_input, sampling_rate=sample_rate, return_tensors="pt").input_features.to(device) |
|
|
|
|
|
predicted_ids = model.generate(input_features) |
|
|
|
|
|
transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True) |
|
|
|
return transcription[0] |
|
except Exception as e: |
|
print(f"Error in transcribe_audio: {str(e)}") |
|
raise |
|
|
|
|
|
def transcribe_video(url): |
|
try: |
|
print(f"Attempting to download audio from URL: {url}") |
|
audio_bytes = download_audio_from_url(url) |
|
print(f"Successfully downloaded {len(audio_bytes)} bytes of audio data") |
|
|
|
|
|
with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio: |
|
temp_audio.write(audio_bytes) |
|
temp_audio_path = temp_audio.name |
|
|
|
print("Starting audio transcription...") |
|
transcript = transcribe_audio(temp_audio_path) |
|
print("Transcription completed successfully") |
|
|
|
|
|
os.unlink(temp_audio_path) |
|
|
|
return transcript |
|
except Exception as e: |
|
error_message = f"An error occurred: {str(e)}" |
|
print(error_message) |
|
return error_message |