Телефонуйте » (+38) 096 227 41 41

Перетворення тексту в мову (Text-to-speech - TTS) є одним з видів застосування синтезу мови, який використовується для створення мовного звукового варіанту тексту, наприклад,  для файлу довідки або веб-сторінки.

TTS може виконати зчитування інформації з дисплея комп'ютера для людей з ослабленим зором, або може просто використовуватися для читання вголос текстового повідомлення.
Сучасні програми включають голосову підтримку за допомогою TTS електронної пошти і голосові підказки в системах мовних відповідей. TTS часто використовується з програмами розпізнавання мови.
Як й інші модулі, процес має свою власну значущість з інтерфейсом, в якому Raspberry Pi (RPi) має свої власні операції на основі схем обробки зображень. Тому, як тільки зображення перетворюються в текст, то воно може бути перетворене з тексту в мову. Процес розпізнавання символів завершується перетворенням тексту в мову і воно може бути застосоване будь-де.
TTS в Python можна реалізувати за допомогою обгортки, типу pyttsx, яка забезпечує інтерфейс на Python для різних TTS-двигунів.
Інший спосіб зробити TTS - виконувати систему команд безпосередньо з вашого коду Python або за допомогою Interprocess Communication (міжпроцесового зв'язку). Це хороший варіант, особливо в Unix і Linux системах, оскільки *nix системи мають дуже чудовий командний рядок і мережевий інтерфейс.
Зазвичай, спочатку треба встановити один з TTS-двигунів для того, щоб програма працювала на Python. Двигун TTS, який є основою для TTS-перетворення, може бути на будь-якій мові програмування.

Початкові налаштування

Підключіть навушники або гучномовець до RPi, як показано на малюнку нижче:

Якщо ви ще не маєте звуку на своєму RPi, то вам треба встановити звукові утиліти alsa:

sudo apt-get install alsa-utils

Після цього треба запустити:

lsmod | grep snd_bcm2835

і перевірити, чи є в списку snd_bcm2835. Якщо немає, то виконайте наступну команду:

sudo modprobe snd_bcm2835

Якщо модуль не завантажується автоматично при вмиканні, то можете змусити його завантажуватися, використовуючи наступний процес:

cd /etc
sudo nano modules

Потім додайте 'snd-bcm2835', щоб текс виглядав наступним чином:

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be
# loaded at boot time, one per line. Lines beginning with "#" are
# ignored. Parameters can be specified after the module name.
snd-bcm2835

За замовчуванням вихід встановлюється для автоматичного вибору інтерфейсу аудіо за замовчуванням (HDMI, якщо в іншому випадку є аналоговий). Ви можете змусити вихід використовувати конкретний інтерфейс, за допомогою:

amixer cset numid=3 n

Де <п> є вибраним інтерфейсом: 0 = авто, 1 = аналоговий, 2 = HDMI. Щоб змусити RPi використовувати аналоговий вихід:

amixer cset numid=3 1

Для того, щоб перевірити звук, завантажте тестовий аудіо файл, ввівши команду:

wget http://www.freespecialeffects.co.uk/soundfx/sirens/police_s.wav

Програйте звуковий файл, використовуючи:

aplay  police_s.wav

Якщо звук відтворюється правильно, ви можете стверджувати, що аналоговий вихід працює належним чином.
За замовчуванням гучність буде дуже низькою і, щоб збільшити її, відкрийте термінал і введіть команду, щоб з'явилося нове вікно:
alsamixer

Зробіть гучність більшою, натиснувши стрілку вгору і встановивши її на максимум:

Вийдіть з параметру і знову відтворіть звук, щоб відчути різницю.

Використання різних двигунів TTS

Наступним процесом є виконання перетворення тексту в мову.

eSpeak

Спочатку встановимо модуль eSpeak і пакет python-espeak, які чудово підходять для цієї мети:

sudo apt-get install espeak python-espeak

Після установки виконайте перевірку, ввівши в командному рядку:

espeak Hello

Для виконання перетворення тексту в мову, використовуючи Python, треба написати код, наведений нижче, в редакторі Python:

import os,time
def robot(text):
    os.system("espeak ' " + text + " ' ")
robot("I am fine")

Перевірте процес з різними текстами і застосуйте його з відповідними додатками.
Можна також використати підпроцес (зі стандартної бібліотеки Python) і eSpeak:

import subprocess
text = '"Hello world"'
subprocess.call('espeak '+text, shell=True)

або так:

from subprocess import call
call(["espeak","-s140 -ven+18 -z","Hello world"])

Щоб скористатися словником російськомовного пакету, треба його завантажити з http://espeak.sourceforge.net/data/.

ru Russian
Положення складу наголосу в російському слові не може бути визначене за правилами, тому eSpeak робить припущення, але зазвичай «не вгадує». Це вимагає додаткового словника даних російських слів з їх позиціями наголосу, які не відповідають здогадці eSpeak.
Наводимо копії російськомовних даних, які скомпільована для eSpeak. Наголошуємо, що файл повинен бути тієї ж версії, що і версії eSpeak, яку використовуєте.
Завантажити: ru_dict-48.zip, для eSpeak 1,48
Завантажити: ru_dict-47.09.zip, для eSpeak 1.47.09
Завантажити: ru_dict-47.zip, для eSpeak 1,47
Завантажити: ru_dict-46.zip, для eSpeak 1,46
Завантажити: ru_dict-45.zip, для eSpeak 1,45
Як альтернатива, там же є копія джерела додаткових російськомовних даних, які можна використати для компіляції нового файлу ru_dict. Завантажте ru_listx.zip і розпакуйте файл ru_listx в папку dictsource eSpeak (в якій повинні також бути ru_list і ru_rules) і виконайте команду:
espeak --compile=ru
щоб зробити компіляцію нової збільшеної версії словника ru_dict. Скопіюйте її в каталог espeak-data.

Завантажуйте версію, яка відповідає вашій встановленій версії eSpeak. Якщо потрібно перевірити, яку версію eSpeak встановили, скористайтеся командою:

apt-cache show espeak

Після завантаження zip-файлу, розпакуйте його, щоб отримати файл словника. Перемістіть його в папку espeak-data, щоб перезаписати існуючий #, розпакуйте його і замініть існуючий файл ru_dict:

wget http://espeak.sourceforge.net/data/ru_dict-48.zip
unzip ru_dict-48.zip
sudo mv ru_dict-48 /usr/lib/x86_64-linux-gnu/espeak-data/ru_dict

В Python 2, ви повинні в першому або другому рядку вказати тип кодування, що символи кирилиці:

# -*- coding: utf-8 -*-
from espeak import espeak
espeak.set_voice("ru")
espeak.synth("где хакер")
while espeak.is_playing:
    pass

Festival

Встановіть festival з:

sudo apt-get install festival

Використання festival з текстовим файлом:

import subprocess
text = '"Hello world"'
filename = 'hello'
file=open(filename,'w')
file.write(text)
file.close()
subprocess.call('festival --tts '+filename, shell=True)

Спробуйте festival з:

echo “Just what do you think you're doing, Dave?” | festival --tts

або проговоріть IP-адресу RPi:

hostname -I | festival --tts

Завдання: Порівняйте якість перетворення тексту в мову для одного і того ж текстового фрагменту за допомогою eSpeak і festival.

gTTS

Двигун Google Text to Speech трохи відрізняється від festival і eSpeak. Ваш текст відправляється на сервери Google, щоб створити файл мови, який потім повертається на RPi і програється, наприклад, за допомогою mplayer. Це означає, що вам потрібне підключення до Інтернету для того, щоб все працювало.
Встановимо модуль gTTS:

sudo pip install gTTS

gTTS є модулем і утилітою командного рядка для збереження тексту в файл формату mp3 за допомогою API Google Text to Speech. Даний модуль підтримує багато мов і звучання дуже природнє.

from gtts import gTTS
import os
tts = gTTS(text='Good morning', lang='en')
tts.save("good.mp3")
os.system("mpg321 good.mp3")

Для тестування з командного рядка скористуйтеся:

gtts-cli.py "Hello" -l 'en' -o hello.mp3

Інший спосіб – написати сценарій, щоб отримати доступ до двигуна Google Text to Speech. Наприклад, створимо файл speech.sh:

sudo nano speech.sh

Додаємо такі рядки до файлу і зберігаємо його (в редакторі nano використовуємо комбінацію CTRL+O):

#!/bin/bash
say() { local IFS=+;/usr/bin/mplayer -ao alsa -really-quiet -noconsolecontrols "http://translate.google.com/translate_tts?tl=en&q=$*"; }
say $*

Додаємо права для виконання сценарію за допомогою:

chmod u+x speech.sh

Перевіряємо, наприклад, за допомогою фрази:

./speech.sh Look Dave, I can see you're really upset about this.

Завдання: Спробуйте реалізувати програму для псевдо інтелектуальної системи робота. В цій системі спочатку зберігаються фрази-відповіді, використовуючи знання з попереднього заняття. В інтерфейсі командного рядка вводяться питання і програма повинна знайти в них ключові слова, щоб вибрати необхідну фразу для відповіді і проговорити її, виконавши перетворення тексту в мову.

(За матеріалами:rhydolabz.com)

Новини

  • Модуль SMARC запускає Android або Linux на Snapdragon 820
    Модуль SMARC запускає Android або Linux на Snapdragon 820

    SMART 2.0 "Snapdragon 820 SOM" iWave має 3 Гб LPDDR4, 32 Гб eMMC, Wi-Fi та Bluetooth, а також вхідні/вихідні виводи, включаючи GbE, HDMI 2.0, MIPI-CSI, USB 3.0 та PCIe. Комп'ютер розміром 82x50 мм працює на ОС Android Snailbone або вище, з наступною підтримкою Linux. Snapdragon 820 об'єднує чотири 14-нм Cortex з технологією FinFET - два на частоті 2,15 ГГц, а два з 1,6 ГГц, які намагаються імітувати високоякісні Cortex-A72. Крім того, SoC оснащений 624 МГц Adreno 530 GPU, Hexagon 680 DSP і 14-розрядним ISP для Spectra. Snapdragon 820 SOM підтримує кодування H.265 4K@60 та кодування 4K@30.

    in Новини

Записатися на курс