Spaces:
Runtime error
Runtime error
File size: 6,524 Bytes
33d9042 a68da21 33d9042 a68da21 33d9042 a68da21 e8d0c6b 33d9042 c4d7f81 85d5a02 c4d7f81 33d9042 c4d7f81 67dbfa2 c4b4e50 33d9042 94d2571 a68da21 94d2571 d29782d c4d7f81 f7b03d4 c4d7f81 540a7bb a68da21 c4d7f81 4c8a999 a68da21 4c8a999 a68da21 4743f10 a68da21 c4d7f81 33d9042 a68da21 a479a3f a68da21 94d2571 a68da21 |
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
import spaces
import gradio as gr
import io
import os
import re
import torch
import torchaudio
from pathlib import Path
from whisperspeech.pipeline import Pipeline
title = """# ๐๐ปโโ๏ธ Welcome to๐Collabora๐ฌ๏ธ๐ฌ๐WhisperSpeech
You can use this ZeroGPU Space to test out the current model [๐ฌ๏ธ๐ฌ๐collabora/whisperspeech](https://huggingface.co/collabora/whisperspeech). ๐ฌ๏ธ๐ฌ๐collabora/whisperspeech is An Open Source text-to-speech system built by inverting Whisper. Install it and use your command line interface locally with `pip install whisperspeech`. It's like Stable Diffusion but for speech โ both powerful and easily customizable : so you can use it programmatically in your own pipelines! [Contribute to whisperspeech here](https://github.com/collabora/WhisperSpeech)
You can also use ๐ฌ๏ธ๐ฌ๐WhisperSpeech by cloning this space. ๐งฌ๐ฌ๐ Simply click here: <a style="display:inline-block" href="https://huggingface.co/spaces/Tonic/laion-whisper?duplicate=true"><img src="https://img.shields.io/badge/-Duplicate%20Space-blue?labelColor=white&style=flat&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAP5JREFUOE+lk7FqAkEURY+ltunEgFXS2sZGIbXfEPdLlnxJyDdYB62sbbUKpLbVNhyYFzbrrA74YJlh9r079973psed0cvUD4A+4HoCjsA85X0Dfn/RBLBgBDxnQPfAEJgBY+A9gALA4tcbamSzS4xq4FOQAJgCDwV2CPKV8tZAJcAjMMkUe1vX+U+SMhfAJEHasQIWmXNN3abzDwHUrgcRGmYcgKe0bxrblHEB4E/pndMazNpSZGcsZdBlYJcEL9Afo75molJyM2FxmPgmgPqlWNLGfwZGG6UiyEvLzHYDmoPkDDiNm9JR9uboiONcBXrpY1qmgs21x1QwyZcpvxt9NS09PlsPAAAAAElFTkSuQmCC&logoWidth=14" alt="Duplicate Space"></a></h3>
We're **celebrating the release of the whisperspeech** at [the LAION community, if you love open source ai learn more here : https://laion.ai/](https://laion.ai/) big thanks to the folks at huggingface for the community grant ๐ค
### How to Use
Input text with tahe language identifiers provided to create a multilingual speech. Optionally you can add an audiosample to make a voice print.Scroll down and try the api <3 Gradio.
This space runs on ZeroGPU, so **you need to be patient** while you acquire the GPU and load the model the first time you make a request !
"""
text_examples = [
["This is the first demo of Whisper Speech, a fully open source text-to-speech model trained by Collabora and Lion on the Juwels supercomputer.", None],
["World War II or the Second World War was a global conflict that lasted from 1939 to 1945. The vast majority of the world's countries, including all the great powers, fought as part of two opposing military alliances: the Allies and the Axis.", "https://upload.wikimedia.org/wikipedia/commons/7/75/Winston_Churchill_-_Be_Ye_Men_of_Valour.ogg"],
["<pl>To jest pierwszy test wielojฤzycznego <en>Whisper Speech <pl>, modelu zamieniajฤ
cego tekst na mowฤ, ktรณry Collabora i Laion nauczyli na superkomputerze <en>Jewels.", None],
["<en> WhisperSpeech is an Open Source library that helps you convert text to speech. <pl>Teraz takลผe po Polsku! <en>I think I just tried saying \"now also in Polish\", don't judge me...", None],
# ["<de> WhisperSpeech is multi-lingual <es> y puede cambiar de idioma <hi> เคฎเคงเฅเคฏ เคตเคพเคเฅเคฏ เคฎเฅเค"],
["<pl>To jest pierwszy test naszego modelu. Pozdrawiamy serdecznie.", None],
# ["<en> The big difference between Europe <fr> et les Etats Unis <pl> jest to, ลผe mamy tak wiele jฤzykรณw <uk> ััั, ะฒ ะะฒัะพะฟั"]
]
def parse_multilingual_text(input_text):
pattern = r"(?:<(\w+)>)|([^<]+)"
cur_lang = 'en'
segments = []
for i, (lang, txt) in enumerate(re.findall(pattern, input_text)):
if lang: cur_lang = lang
else: segments.append((cur_lang, f" {txt} ")) # add spaces to give it some time to switch languages
if not segments: return [("en", "")]
return segments
@spaces.GPU(enable_queue=True)
def generate_audio(pipe, segments, speaker, speaker_url, cps=14):
if isinstance(speaker, (str, Path)): speaker = pipe.extract_spk_emb(speaker)
elif speaker_url: speaker = pipe.extract_spk_emb(speaker_url)
else: speaker = pipe.default_speaker
langs, texts = [list(x) for x in zip(*segments)]
print(texts, langs)
stoks = pipe.t2s.generate(texts, cps=cps, lang=langs)[0]
atoks = pipe.s2a.generate(stoks, speaker.unsqueeze(0))
audio = pipe.vocoder.decode(atoks)
return audio.cpu()
def whisper_speech_demo(multilingual_text, speaker_audio, speaker_url, cps):
if len(multilingual_text) == 0:
raise gr.Error("Please enter some text for me to speak!")
segments = parse_multilingual_text(multilingual_text)
audio = generate_audio(pipe, segments, speaker_audio, speaker_url, cps)
return (24000, audio.T.numpy())
# Did not work for me in Safari:
# mp3 = io.BytesIO()
# torchaudio.save(mp3, audio, 24000, format='mp3')
# return mp3.getvalue()
with gr.Blocks() as demo:
gr.Markdown(title)
with gr.Row(equal_height=True):
with gr.Column(scale=2):
text_input = gr.Textbox(label="Enter multilingual text๐ฌ๐",
value=text_examples[0][0],
info="You can use `<en>` for English and `<pl>` for Polish, see examples below.")
cps = gr.Slider(value=14, minimum=10, maximum=15, step=.25,
label="Tempo (in characters per second)")
speaker_input = gr.Audio(label="Upload or Record Speaker Audio (optional)๐ฌ๏ธ๐ฌ",
sources=["upload", "microphone"],
type='filepath')
gr.Markdown(" \n ") # fixes the bottom overflow from Audio
url_input = gr.Textbox(label="alternatively, you can paste in an audio file URL:")
generate_button = gr.Button("Try Collabora's WhisperSpeech๐")
with gr.Column(scale=1):
output_audio = gr.Audio(label="WhisperSpeech saysโฆ")
with gr.Row():
gr.Examples(
examples=text_examples,
inputs=[text_input, url_input],
outputs=[output_audio],
fn=whisper_speech_demo,
cache_examples=False,
label="Try these to get started !๐๐ฌ๏ธ"
)
generate_button.click(whisper_speech_demo, inputs=[text_input, speaker_input, url_input, cps], outputs=output_audio)
pipe = Pipeline()#torch_compile=True)
pipe.generate("WhisperSpeech warmup")
demo.launch(server_port=3000)#, share=True)
|