bgmtts / README.md
monydochev's picture
bgmtts 0.1.0
69d9e99
|
Raw History Blame Contribute Delete
13.6 kB
---
license: cc-by-nc-4.0
language:
- bg
pipeline_tag: text-to-speech
library_name: onnx
tags:
- text-to-speech
- tts
- bulgarian
- onnx
- cpu
---
# bgmtts — Bulgarian text-to-speech (two voices)
A small Bulgarian text-to-speech model with a **woman** and a **man** voice. It runs on an ordinary CPU with
onnxruntime (no GPU), reads numbers, dates, units and abbreviations, and puts the stress on the right syllable.
**[Демо в браузъра / Try it in the browser](https://huggingface.co/spaces/monydochev/bgmtts-demo)**
## Примери / Samples
The texts below are shown as the model reads them: after the normalization (numbers, dates, units and abbreviations written out) and with the stress mark ( ̀ ) the stress model put on every word. / Текстовете са показани така, както ги чете моделът: след нормализацията и с ударенията, които е сложил.
**Възможности**
> [жена] До̀бър ден! Това̀ е ма̀лкият модѐл, ко̀йто гово̀ри напра̀во в бра̀узъра, без съ̀рвър. [мъж] Тѐгли се веднъ̀ж, о̀коло педесѐт мегаба̀йта, и по̀сле рабо̀ти и о̀флайн. [жена] Почтѝ нѝщо тук не е напѝсано с ударѐние. [мъж] Ударѐнията ѝдват от рѐчника, а за ду̀мите, коѝто не са в нѐго, ги предска̀зва ма̀лка мрѐжа на само̀то устро̀йство. [жена] Кога̀то тря̀бва то̀чно определѐно ударѐние, то се пѝше в самѝя текст. Бо̀рис и Борѝс са разлѝчни хо̀ра. [мъж] Въ̀лна и вълна̀ съ̀що се пѝшат една̀кво, затова̀ по-сѝгурно е да се зададѐ ударѐнието. [жена] Чуждѝците мина̀ват гла̀дко. Тря̀бва да commit-на ко̀да, по̀сле ще го push-на и ще deploy-на но̀вата вѐрсия. [мъж] Имена̀ като̀ nvidia, Netflix, Microsoft, Google и OpenAI се чета̀т почтѝ ка̀кто ги ка̀зваме. [жена] Ако̀ нѐщо тря̀бва да оста̀не на англѝйски, се маркѝра: state of the art. [мъж] Съкращѐнията на латѝница се изгова̀рят бу̀ква по бу̀ква: ей ай, ей пи ай, джи пи ѐс, ю ес бѝ, ем пи три. [жена] На кѝрилица завѝси от ду̀мата — на̀то, герб и данс се чета̀т сля̀то, а бе де жѐ, е ге нѐ и о о нѐ се ка̀зват бу̀ква по бу̀ква. [мъж] Числа̀та, да̀тите и мѐрките ста̀ват ду̀ми: на седемна̀йсти окто̀мври две хѝляди два̀йсет и шѐста годѝна в четирина̀йсет часа̀ и трѝйсет билѐтът поскъ̀пна с пет процѐнта до педесѐт лѐва, а апартамѐнтът е два̀йсет и пет квадра̀тни мѐтра [жена] Вла̀кът вървѐше със сто и два̀йсет киломѐтра в час. Класѝрах се трѐти от два милио̀на уча̀стници. [мъж] В два̀йсет и пъ̀рви век хо̀рата са до̀ста разлѝчни. В глава̀ четвъ̀рта на рома̀на се гово̀ри за Хѐнри о̀сми, ко̀йто е живя̀л през деветна̀йсти век, то̀ест до̀ста отда̀вна. [жена] Интона̀цията слѐдва пунктуа̀цията, но все о̀ще не доста̀тъчно изразѝтелно. Наѝстина ли? [мъж] Да! И така̀ ната̀тък…
| Два гласа / Two voices |
|---|
| <audio controls src="https://huggingface.co/monydochev/bgmtts/resolve/main/samples/features.wav"></audio> |
**Поздрав**
> До̀бър ден! Това̀ е ма̀лкият модѐл, ко̀йто гово̀ри напра̀во в бра̀узъра, без съ̀рвър. Мо̀га да гово̀ря с жѐнски и с мъ̀жки глас.
| Жена / Woman | Мъж / Man |
|---|---|
| <audio controls src="https://huggingface.co/monydochev/bgmtts/resolve/main/samples/hello_woman.wav"></audio> | <audio controls src="https://huggingface.co/monydochev/bgmtts/resolve/main/samples/hello_man.wav"></audio> |
**Два гласа**
> [жена] Здравѐйте, аз съм жѐнският глас. [мъж] А аз съм мъ̀жкият. Смѐняте ни с та̀говете в квадра̀тни ско̀би.
| Два гласа / Two voices |
|---|
| <audio controls src="https://huggingface.co/monydochev/bgmtts/resolve/main/samples/two_voices.wav"></audio> |
**Кафене**
> [жена] Добро̀ у̀тро! Какво̀ ще жела̀ете днес? [мъж] Едно̀ голя̀мо кафѐ с мля̀ко, мо̀ля. Ѝмате ли нѐщо сла̀дко? [жена] Ѝмаме пря̀сно изпѐчени кѝфли с шокола̀д. [мъж] Чудѐсно, взѐмам една̀.
| Два гласа / Two voices |
|---|
| <audio controls src="https://huggingface.co/monydochev/bgmtts/resolve/main/samples/cafe.wav"></audio> |
**При лекаря**
> [мъж] До̀бър ден, до̀кторе. От ня̀колко дни ме болѝ гъ̀рлото и ѝмам температу̀ра. [жена] Седнѐте, мо̀ля. Отворѐте уста̀ и кажѐте "а̀аа". Да, гъ̀рлото е зачервѐно. Ще ви изпѝша лека̀рство.
| Два гласа / Two voices |
|---|
| <audio controls src="https://huggingface.co/monydochev/bgmtts/resolve/main/samples/doctor.wav"></audio> |
**Новини**
> [жена] До̀бър вѐчер, това̀ са новинѝте. Днес в Со̀фия се провѐде срѐща на кмѐтовете от ця̀лата страна̀. [мъж] Обсъ̀дени бя̀ха ремо̀нтите на пъ̀тищата и но̀вите автобу̀сни лѝнии, коѝто ще тръ̀гнат от пъ̀рви декѐмври. [жена] А сега̀ — врѐмето.
| Два гласа / Two voices |
|---|
| <audio controls src="https://huggingface.co/monydochev/bgmtts/resolve/main/samples/news.wav"></audio> |
**Приказка**
> [мъж] Ѝмало едно̀ врѐме една̀ ма̀лка лисѝца, коя̀то живѐела в гора̀та край река̀та. Една̀ су̀трин тя срѐщнала ста̀рия мечо̀к. [жена] Добро̀ у̀тро, чѝчо Мѐчо! Накъдѐ си се запъ̀тил? [мъж] Отѝвам за мед, ма̀лката. Ѝскаш ли да до̀йдеш с мен?
| Два гласа / Two voices |
|---|
| <audio controls src="https://huggingface.co/monydochev/bgmtts/resolve/main/samples/tale.wav"></audio> |
**Обява**
> [мъж] Уважа̀еми пъ̀тници, вла̀кът за Пло̀вдив ще потѐгли от вто̀ри колово̀з след дѐсет мину̀ти. [жена] Мо̀ля, не оста̀вяйте бага̀жа си без надзо̀р.
| Два гласа / Two voices |
|---|
| <audio controls src="https://huggingface.co/monydochev/bgmtts/resolve/main/samples/announcement.wav"></audio> |
**Телефон**
> [жена] А̀ло, здравѐй! Къдѐ си? [мъж] В кола̀та съм, ще закъснѐя десетѝна мину̀ти. [жена] Ня̀ма проблѐм, ще те ча̀кам пред кѝното. [мъж] Добрѐ, до ско̀ро!
| Два гласа / Two voices |
|---|
| <audio controls src="https://huggingface.co/monydochev/bgmtts/resolve/main/samples/phone.wav"></audio> |
**Числа и дати**
> Срѐщата е на петна̀йсти март две хѝляди два̀йсет и сѐдма годѝна от дѐсет и трѝйсет ча̀са в за̀ла двѐста и чѐтири. Вхо̀дът е два̀йсет и пет лѐва, а за студѐнти с ка̀рта — двана̀йсет лѐва
| Жена / Woman | Мъж / Man |
|---|---|
| <audio controls src="https://huggingface.co/monydochev/bgmtts/resolve/main/samples/numbers_woman.wav"></audio> | <audio controls src="https://huggingface.co/monydochev/bgmtts/resolve/main/samples/numbers_man.wav"></audio> |
**Рецепта**
> За ба̀ницата ви тря̀бват корѝ, чѐтири яйца̀, ко̀фичка кѝсело мля̀ко и двѐста гра̀ма сѝрене. Разбѝйте яйца̀та с мля̀кото, натрошѐте сѝренето и редѐте корѝте в тава̀та.
| Жена / Woman | Мъж / Man |
|---|---|
| <audio controls src="https://huggingface.co/monydochev/bgmtts/resolve/main/samples/recipe_woman.wav"></audio> | <audio controls src="https://huggingface.co/monydochev/bgmtts/resolve/main/samples/recipe_man.wav"></audio> |
## Install
```bash
pip install "bgmtts @ https://huggingface.co/monydochev/bgmtts/resolve/main/bgmtts-0.1.0-py3-none-any.whl"
```
The model files (12 MB voice model + 18 MB stress model) are downloaded from this repository on first use and cached.
## Use
Command line:
```bash
bgmtts "Здравейте! Как сте днес?" -o hello.wav
bgmtts "Добър ден." -o man.wav --voice man --speed 1.1
echo "Текст от файл или друга програма." | bgmtts -o out.wav
```
Python:
```python
from bgmtts import TTS
tts = TTS() # downloads the models once
audio = tts.synth("Здравейте! Днес е 7 ноември.", voice="woman") # float32, 24 kHz, mono
tts.save(audio, "hello.wav")
print(tts.stress_text("Той вземал пари.")) # the text with the stress marks the model will read
```
- **Voices:** `voice="woman"` / `"жена"` or `voice="man"` / `"мъж"`. Inside the text, `[мъж]` and `[жена]` switch the
voice from that point on: `"[жена] Здравей! [мъж] Здравей и на теб."`
- **Speed:** `speed=1.0` is normal, `1.2` faster, `0.9` slower.
- **Your own stress marks win:** put `+` before the stressed vowel (`муз+ика`) or a stress accent after it (`му́зика`).
- **Stress model size:** `TTS(stress="small")` (18 MB, default), `"base"` (100 MB) or `"large"` (240 MB, a little more
accurate on rare words); `stress=None` uses the built-in dictionary only.
- **Offline:** download the repository once and pass `TTS(model_dir="path/to/folder")`.
Speed: about 25-30x faster than real time on a laptop CPU (one sentence ≈ 0.1 s).
## Какво умее / What it does
- Чете на книжовен български: числа („15 март 2027 г.“ → „петнайсти март две хиляди двайсет и седма година“),
часове, пари, мерни единици, съкращения и абревиатури.
- Ударения: голям речник на ударенията плюс невронен модел за ударения за многозначните и непознатите думи.
- Латинските думи (имена на марки, приложения) се четат приблизително по български.
- Изреченията се синтезират едно по едно, с естествена пауза след точка, въпрос и удивителна.
## Ограничения / Limitations
- Only Bulgarian. Latin-script words are read with an approximate Bulgarian pronunciation.
- Stress can still be wrong on rare words, names and homographs that need the wider context; mark them with `+`.
- Two voices only; no voice cloning.
## License
**CC BY-NC 4.0** — free for **non-commercial** use, with attribution. Commercial use is not permitted.
This covers the models, the stress dictionary and the code in this repository.
Please do not use the voices to impersonate real people or to create misleading content.
## Acknowledgements / Благодарности
The models were trained on **[BRAIN++](https://brainplusplus.bg/)**, the Bulgarian AI Factory — a national and European
AI Factory (EuroHPC) that brings together AI compute, expertise, training and support for companies and researchers.
Моделите са обучени на **[BRAIN++](https://brainplusplus.bg/)**, българската AI фабрика — национална и европейска AI
фабрика (EuroHPC), която събира на едно място изчислителна мощ за изкуствен интелект, експертиза, обучение и подкрепа
за бизнеса и изследователите.
- [BRAIN++ — Bulgarian AI Factory](https://brainplusplus.bg/)
- [EuroHPC AI Factories](https://eurohpc-ju.europa.eu/ai-factories_en)