Text to speech. Українська мова
Перетворення тексту у звук (TTS - «Text To Speech») - далі у статті буду називати синтезом мови. В Інтернеті можна знайти онлайн ресурси, які дозволяють перетворювати великі тексти у звукові файли. У більшості випадків вони спеціалізовані для "озвучки". Але в цій статті піде мова про автономний, (або умовно автономний), синтез мови. Тобто, коли Вашому пристрою треба щось сказати українською, при чому не заздалегідь заготовлену фразу, а саме згенерований текст. Якщо Вам треба "проговорювати" лише заздалегідь заготовлені фрази, то це не про це. Тут піде мова саме про те як синтезувати будь-яку фразу. Уміючи генерувати будь-які фрази, Ваш робот (або програма) зможе підтримати бесіду на будь-яку тему, а не повторювати "завчені фрази" ;)
Я наведу декілька прикладів як це можна зробити.
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.")
Недавні записи
- Text to speech. Українська мова
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
Tags
docker sensors rtc led timer wifi remap sms css websocket mongodb bme280 rfid bluetooth esp8266 nodemcu bkp piezo bmp280 i2c mpu-6050 encoder examples avr brushless ngnix nvic displays bldc java-script pmsm barometer pwm lcd ethernet stm32 raspberry-pi capture usart gpio exti atmega meteo solar smd dma adc eeprom eb-500 flask python ssd1306 uart options flash mpx4115a html gps st-link 3d-printer servo dc-dc foc git books battery hih-4000 watchdog dht11 web tim programmator ssd1331 mpu-9250 usb rs-232 motor max1674 soldering
Архіви