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.")
Tags
bme280 bmp280 gps mpu-6050 options stm32 ssd1331 ssd1306 eb-500 3d-printer soldering tim mpu-9250 dma watchdog piezo exti web raspberry-pi docker ngnix solar bluetooth foc html css brushless flask dc-dc capture gpio avr rs-232 mpx4115a atmega mongodb st-link barometer pwm nvic git java-script programmator dht11 hih-4000 pmsm encoder max1674 smd sensors rtc adc lcd motor timer meteo examples i2c usb flash sms rfid python esp8266 servo books bldc remap eeprom bkp battery ethernet uart usart displays led websocket nodemcu wifi
Архіви