Spaces:
Runtime error
Runtime error
from fastapi import FastAPI, Request | |
from fastapi.responses import JSONResponse | |
import os | |
from pydub import AudioSegment | |
import aiofiles | |
import faster_whisper | |
# Initialize the FastAPI app | |
app = FastAPI() | |
# Initialize the model with GPU support | |
model = faster_whisper.WhisperModel('ivrit-ai/faster-whisper-v2-d4') | |
# Define file paths | |
TEMP_FILE_PATH = "temp_audio_file.m4a" | |
WAV_FILE_PATH = "temp_audio_file.wav" | |
async def transcribe(request: Request): | |
# Stream the file directly to a temporary file on disk | |
async with aiofiles.open(TEMP_FILE_PATH, 'wb') as out_file: | |
async for chunk in request.stream(): | |
await out_file.write(chunk) | |
print("File saved successfully.") | |
# Convert M4A to WAV | |
try: | |
audio = AudioSegment.from_file(TEMP_FILE_PATH, format="m4a") | |
audio.export(WAV_FILE_PATH, format="wav") | |
print("Conversion to WAV successful.") | |
except Exception as e: | |
print("Error during conversion:", e) | |
return JSONResponse({"detail": "Error in audio conversion"}, status_code=400) | |
# Transcribe the WAV audio file | |
segments, _ = model.transcribe(WAV_FILE_PATH, language='he') | |
transcribed_text = ' '.join([s.text for s in segments]) | |
# Clean up temporary files | |
os.remove(TEMP_FILE_PATH) | |
os.remove(WAV_FILE_PATH) | |
return JSONResponse({"transcribed_text": transcribed_text}) | |