|
from .pipelines import WhisperPipe, MetaItem, WhisperChinese, Translate7BPipe, FunASRPipe, VadPipe, TranslatePipe |
|
from .utils import timer |
|
|
|
class ProcessingPipes: |
|
def __init__(self) -> None: |
|
|
|
self._process = [] |
|
|
|
self._whisper_pipe_en = self._launch_process(WhisperPipe()) |
|
|
|
self._funasr_pipe = self._launch_process(FunASRPipe()) |
|
|
|
|
|
self._translate_pipe = self._launch_process(TranslatePipe()) |
|
self._translate_7b_pipe = self._launch_process(Translate7BPipe()) |
|
|
|
self._vad_pipe = self._launch_process(VadPipe()) |
|
|
|
def _launch_process(self, process_obj): |
|
process_obj.daemon = True |
|
process_obj.start() |
|
self._process.append(process_obj) |
|
return process_obj |
|
|
|
def wait_ready(self): |
|
for p in self._process: |
|
p.wait() |
|
|
|
@timer(name="🐧 Translate") |
|
def translate(self, text, src_lang, dst_lang) -> MetaItem: |
|
item = MetaItem( |
|
transcribe_content=text, |
|
source_language=src_lang, |
|
destination_language=dst_lang) |
|
self._translate_pipe.input_queue.put(item) |
|
return self._translate_pipe.output_queue.get() |
|
|
|
@timer(name="🐧 Translate-large") |
|
def translate_large(self, text, src_lang, dst_lang) -> MetaItem: |
|
item = MetaItem( |
|
transcribe_content=text, |
|
source_language=src_lang, |
|
destination_language=dst_lang) |
|
self._translate_7b_pipe.input_queue.put(item) |
|
return self._translate_7b_pipe.output_queue.get() |
|
|
|
def get_transcription_model(self, lang: str = 'en'): |
|
if lang == 'zh': |
|
return self._funasr_pipe |
|
return self._whisper_pipe_en |
|
|
|
@timer(name="📝 transcribe") |
|
def transcribe(self, audio_buffer: bytes, src_lang: str) -> MetaItem: |
|
transcription_model = self.get_transcription_model(src_lang) |
|
item = MetaItem(audio=audio_buffer, source_language=src_lang) |
|
transcription_model.input_queue.put(item) |
|
return transcription_model.output_queue.get() |
|
|
|
def voice_detect(self, audio_buffer: bytes) -> MetaItem: |
|
item = MetaItem(source_audio=audio_buffer) |
|
self._vad_pipe.input_queue.put(item) |
|
return self._vad_pipe.output_queue.get() |
|
|
|
|
|
if __name__ == "__main__": |
|
import soundfile |
|
|
|
tp = TranslatePipes() |
|
|
|
mel, _, = soundfile.read("assets/jfk.flac") |
|
|
|
result = tp.voice_detect(mel) |
|
print(result) |
|
|