File size: 1,900 Bytes
485d8e3 ebd6110 485d8e3 31ad35a 485d8e3 31ad35a 485d8e3 31ad35a 485d8e3 dfb349e 485d8e3 6f13b8c 485d8e3 ebd6110 31ad35a 5518c26 31ad35a ebd6110 25d38b7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
from pywhispercpp.model import Model
import soundfile
import config
import numpy as np
from logging import getLogger
logger = getLogger(__name__)
class WhisperCPP:
def __init__(self, source_lange: str='en', warmup=True) -> None:
models_dir = config.MODEL_DIR.as_posix()
if source_lange == "zh":
whisper_model = config.WHISPER_MODEL_ZH
else:
whisper_model = config.WHISPER_MODEL_EN
self.model = Model(
model=whisper_model,
models_dir=models_dir,
print_realtime=False,
print_progress=False,
print_timestamps=False,
translate=False,
# beam_search=1,
temperature=0.,
no_context=True
)
if warmup:
self.warmup()
def warmup(cls, warmup_steps=1):
mel, _, = soundfile.read(f"{config.ASSERT_DIR}/jfk.flac")
for _ in range(warmup_steps):
cls.model.transcribe(mel, print_progress=False)
@staticmethod
def config_language(language):
if language == "zh":
return config.MAX_LENTH_ZH, config.WHISPER_PROMPT_ZH
elif language == "en":
return config.MAX_LENGTH_EN, config.WHISPER_PROMPT_EN
raise ValueError(f"Unsupported language : {language}")
def transcribe(self, audio_buffer:bytes, language):
max_len, prompt = self.config_language(language)
audio_buffer = np.frombuffer(audio_buffer, dtype=np.float32)
try:
output = self.model.transcribe(
audio_buffer,
initial_prompt=prompt,
language=language,
# token_timestamps=True,
split_on_word=True,
# max_len=max_len
)
return output
except Exception as e:
logger.error(e)
return [] |