gsvann's picture
Update fo Russian speech app.py
b0adbe9
raw
history blame
3.51 kB
"Задание 3"
import gradio as gr
import numpy as np
import torch
from transformers import pipeline, MarianMTModel, MarianTokenizer, VitsModel, VitsTokenizer
device = "cuda:0" if torch.cuda.is_available() else "cpu"
import phonemizer
# сначала использовала facebook/wav2vec2-lv-60-espeak-cv-ft в коллабе, но здесь не загружается библиотека py-espeak-ng
model_wav2vec = 'openai/whisper-small' #'voidful/wav2vec2-xlsr-multilingual-56'
asr_pipe = pipeline("automatic-speech-recognition", model=model_wav2vec, device=device)
# load speech-to-text checkpoint
def translate_audio(audio):
outputs = asr_pipe(audio, max_new_tokens=256, generate_kwargs={"task": "translate"})
return outputs["text"]
# translation to Russian
def translate_text(text):
# to English - mul en, to Russian - en ru
model_mul_en = pipeline("translation", model = "Helsinki-NLP/opus-mt-mul-en")
model_en_ru = pipeline("translation", model = "Helsinki-NLP/opus-mt-en-ru")
translated_text = model_en_ru(model_mul_en(text)[0]['translation_text'])
return translated_text[0]['translation_text']
# load text-to-speech checkpoint
model = VitsModel.from_pretrained("voxxer/speecht5_finetuned_commonvoice_ru_translit")
tokenizer = VitsTokenizer.from_pretrained("facebook/mms-tts-rus")
def synthesise(text):
translated_text = translate_text(text)
inputs = tokenizer(translated_text, return_tensors="pt")
input_ids = inputs["input_ids"]
with torch.no_grad():
outputs = model(input_ids)
speech = outputs["waveform"]
return speech.cpu()
def speech_to_speech_translation(audio):
text_from_audio = translate_audio(audio)
synthesised_speech = synthesise(text_from_audio)
synthesised_speech = (synthesised_speech.numpy() * 32767).astype(np.int16)
return 16000, synthesised_speech[0]
title = "Cascaded STST"
description = """
* В начале происходит распознавание речи с помощью модели openai/whisper-small.
* Затем полученный текст переводится сначала на английский с помощью Helsinki-NLP/opus-mt-mul-en, а потом на русский с помощью Helsinki-NLP/opus-mt-en-ru
* На последнем шаге полученный текст озвучивается с помощью fine-tune-говой версии microsoft/speecht5_tts - voxxer/speecht5_finetuned_commonvoice_ru_translit
Demo for cascaded speech-to-speech translation (STST), mapping from source speech in any language to target speech in Russian. Demo uses facebook/mms-tts-rus model for text-to-speech:
![Cascaded STST](https://huggingface.co/datasets/huggingface-course/audio-course-images/resolve/main/s2st_cascaded.png "Diagram of cascaded speech to speech translation")
"""
demo = gr.Blocks()
mic_translate = gr.Interface(
fn=speech_to_speech_translation,
inputs=gr.Audio(source="microphone", type="filepath"),
outputs=gr.Audio(label="Generated Speech", type="numpy"),
title=title,
description=description,
)
file_translate = gr.Interface(
fn=speech_to_speech_translation,
inputs=gr.Audio(source="upload", type="filepath"),
outputs=gr.Audio(label="Generated Speech", type="numpy"),
examples=[["./example.wav"]],
title=title,
description=description,
)
with demo:
gr.TabbedInterface([mic_translate, file_translate], ["Microphone", "Audio File"])
demo.launch()