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.")
Доброго дня. Ще є Piper TTS — він теж підтримує українську мову; доступ до інтернету не потрібен. Запускав на RPI5.Тут можно перевірити як воно генерує https://piper.ttstool.com/
Tags
web java-script bmp280 adc bldc stm32 rs-232 programmator 3d-printer flash pwm sms motor docker raspberry-pi meteo gps ngnix bme280 timer ssd1331 mpu-6050 bkp battery rfid st-link tim mpx4115a ssd1306 encoder atmega pmsm wifi options rtc examples nvic soldering mongodb esp8266 books lcd foc flask barometer bluetooth ethernet brushless uart watchdog servo gpio solar git remap dma usart eb-500 smd nodemcu sensors displays html python capture dht11 led i2c eeprom piezo exti websocket max1674 usb dc-dc avr hih-4000 css mpu-9250
Архіви