Text to speech. Українська мова
Перетворення тексту у звук (TTS - «Text To Speech») - далі у статті буду називати синтезом мови. В Інтернеті можна знайти онлайн ресурси, які дозволяють перетворювати великі тексти у звукові файли. У більшості випадків вони спеціалізовані для "озвучки". Але в цій статті піде мова про автономний, (або умовно автономний), синтез мови. Тобто, коли Вашому пристрою треба щось сказати українською, при чому не заздалегідь заготовлену фразу, а саме згенерований текст. Якщо Вам треба "проговорювати" лише заздалегідь заготовлені фрази, то це не про це. Тут піде мова саме про те як синтезувати будь-яку фразу. Уміючи генерувати будь-які фрази, Ваш робот (або програма) зможе підтримати бесіду на будь-яку тему, а не повторювати "завчені фрази" ;)
Я наведу декілька прикладів як це можна зробити.
![](/uploads/2024/12/text-to-speech.jpg)
pyttsx3
pyttsx3 - це найпростіший варіант синтезу мови. Результат роботи схожий на звук з бляшанки.
Швидкий, але якість погана, підтримку українську не знайшов. Підключення до мережі не потрібно.
Детально про pyttsx3: https://pypi.org/project/pyttsx3/
text_to_speech_pyttsx3.py:
import pyttsx3
engine = pyttsx3.init()
voices = engine.getProperty('voices')
for voice in voices:
print("Voice:")
print(" - ID: %s" % voice.id)
print(" - Name: %s" % voice.name)
print(" - Languages: %s" % voice.languages)
print(" - Gender: %s" % voice.gender)
print(" - Age: %s" % voice.age)
engine.setProperty('voice', 'Russian')
""" RATE"""
rate = engine.getProperty('rate') # getting details of current speaking rate
print (rate) #printing current voice rate
engine.setProperty('rate', 150) # setting up new voice rate
"""VOICE"""
voices = engine.getProperty('voices') #getting details of current voice
#engine.setProperty('voice', voices[0].id) #changing index, changes voices. o for male
#engine.setProperty('voice', voices[1].id) #changing index, changes voices. 1 for female
engine.say("Привет! Как дела?")
engine.runAndWait()
gTTS
gTTS - використовує сторонній сервіс Google Translate, для чого потребує підключення до мережі Інтернет. Дозволяє дуже швидко працювати з будь-якою мовою. Українську підтримує. На жаль, не має можливості обрати голос.
Найбільш швидкий, гнучкий і універсальний метод. Підтримує Українську. Не працює без доступу до мережі Інтернет.
Детально про gTTS: https://pypi.org/project/gTTS/
text_to_speech_gtts.py:
import gtts
from playsound import playsound
tts = gtts.gTTS("Доброго вечора, ми з України.", lang="uk", tld='co.uk')
tts.save('gtts.mp3')
playsound('gtts.mp3')
PyTorch
PyTorch - відкрита бібліотека машинного навчання. Завдяки їй та готових моделей можна реалізувати цілком автономну систему. Яка після завантаження вказаної моделі з Інтернету зможе працювати цілком на Вашому пристрої вже без доступу до мережі.
Швидкість роботи не велика. Підтримує Українську. Працює без доступу до мережі Інтернет.
Цей скрипт працює як консольна програма. У параметрах командного рядка треба вказати текстовий файл, який буде прочитано та ім'я wav-файлу, який буде створено. Після створення wav-файлу, програма програє його.
Детально про PyTorch: https://pytorch.org/
Моделі TTS: https://models.silero.ai/models/tts/
text_to_wav.py:
import os
import sys
import torch
from playsound import playsound
if len(sys.argv) != 3:
print ("Syntax: python3 text_to_wav.py text.txt voice.wav")
exit()
input_file_name = sys.argv[1]
output_file_name = sys.argv[2]
print ("Input file:", input_file_name)
print ("Output file:", output_file_name)
with open(input_file_name, 'r') as file:
example_text = file.read().rstrip()
print("Text:")
print(example_text)
print("\r\nPocessing...")
device = torch.device('cpu')
torch.set_num_threads(4)
local_file = 'v3_ua.pt'
remote_file = 'https://models.silero.ai/models/tts/ua/' + local_file
sample_rate = 48000
speaker='mykyta'
if not os.path.isfile(local_file):
torch.hub.download_url_to_file(remote_file, local_file)
model = torch.package.PackageImporter(local_file).load_pickle("tts_models", "model")
model.to(device)
audio_paths = model.save_wav(text=example_text, speaker=speaker, sample_rate=sample_rate, audio_path = output_file_name)
print("Playing...")
playsound(output_file_name)
print("Done.")
Недавні записи
- Фільтрація Back-EMF. Безсенсорні BLDC мотори
- Text to speech. Українська мова
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
Tags
barometer dht11 wifi bmp280 meteo ssd1306 uart books dc-dc lcd tim ssd1331 timer programmator battery exti mpx4115a motor flask nodemcu usb dma html java-script rs-232 st-link 3d-printer rfid esp8266 nvic encoder gpio piezo eb-500 brushless docker sms pmsm ngnix servo examples avr led smd i2c bkp eeprom usart solar soldering python flash stm32 raspberry-pi bme280 mpu-9250 hih-4000 foc bldc sensors rtc pwm capture adc max1674 atmega gps bluetooth remap mongodb mpu-6050 websocket css git watchdog displays ethernet web options
Архіви