Initial commit
This commit is contained in:
56
transcription-api/transcribe.py
Normal file
56
transcription-api/transcribe.py
Normal file
@@ -0,0 +1,56 @@
|
||||
from backends.fasterwhisper import FasterWhisperBackend
|
||||
from backends.backend import Transcription
|
||||
from faster_whisper import decode_audio
|
||||
from models import DeviceType
|
||||
from typing import Optional
|
||||
import numpy as np
|
||||
import io
|
||||
import os
|
||||
|
||||
def convert_audio(file) -> np.ndarray:
|
||||
return decode_audio(file, split_stereo=False, sampling_rate=16000)
|
||||
|
||||
async def transcribe_from_filename(filename: str,
|
||||
model_size: int,
|
||||
language: Optional[str] = None,
|
||||
device: DeviceType = DeviceType.cpu) -> Transcription:
|
||||
|
||||
filepath = os.path.join(os.environ["UPLOAD_DIR"], filename)
|
||||
if not os.path.exists(filepath):
|
||||
raise RuntimeError(f"file not found in {filepath}")
|
||||
audio = convert_audio(filepath)
|
||||
return await transcribe_audio(audio, model_size, language, device)
|
||||
|
||||
async def transcribe_file(file: io.BytesIO,
|
||||
model_size: int,
|
||||
language: Optional[str] = None,
|
||||
device: DeviceType = DeviceType.cpu) -> Transcription:
|
||||
contents = await file.read() # async read
|
||||
if len(contents) < 150 * 1024 * 1024: # file is smaller than 150MB
|
||||
audio = convert_audio(io.BytesIO(contents))
|
||||
else:
|
||||
# Save the uploaded file temporarily on disk
|
||||
with open(file.filename, 'wb') as f:
|
||||
f.write(contents)
|
||||
# Check if file exists
|
||||
if not os.path.exists(file.filename):
|
||||
raise RuntimeError(f"file not found in {file.filename}")
|
||||
# Corrected to use the function in this file
|
||||
audio = convert_audio(file.filename)
|
||||
os.remove(file.filename)
|
||||
return await transcribe_audio(audio, model_size, language, device)
|
||||
|
||||
async def transcribe_audio(audio: np.ndarray,
|
||||
model_size: int,
|
||||
language: Optional[str] = None,
|
||||
device: DeviceType = DeviceType.cpu) -> Transcription:
|
||||
|
||||
if language == "auto":
|
||||
language = None
|
||||
|
||||
# Load the model
|
||||
model = FasterWhisperBackend(model_size=model_size, device=device)
|
||||
model.get_model()
|
||||
model.load()
|
||||
# Transcribe the file
|
||||
return model.transcribe(audio, silent=True, language=language)
|
||||
Reference in New Issue
Block a user