Телефонуйте » (+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)

Попереднє заняття - Наступне заняття

Новини

  • SDR в IoT

    iotSDR пропонує платформу розробок для IoT-радіо та мережевих доменів. На платі два передавачі Microchip AT86RF215, для вводу-виводу модему на Xilinx ZYNQ SoC, приймач GNSS MAX2769 для GPS, Galileo, BieDou та Glonass. Плата сумісна з ПЗ GNURadio SDR. Дозволяє розробити протоколи фізичного рівня LoRa, SigFox, WightLess, Bluetooth, BLE, 802.15.4, ZigBee тощо для IoT, або шлюз IoT через TheThingsNetwork, LPWAN або Google Thread. Пам'ять EEPROM: 1x AT24MAC602 , flash-пам'ять: 1x QSPI 128 Мб, RAM: 256 MБ DDR3,слот для Micro SD карти, входи/виходи: 2x 8-бітних інтерфейси PL, інтерфейс 8-бітного PS, Gigabit Ethernet, USB 2.0 (USB3310), USB 2.0 (CP2104), 2x SMA RF-роз'єми для приймача діапазонів IoT, 2x SMA RF-роз'єми для приймача 2,4 ГГц , RF-роз'єм приймач GNSS, FPGA-роз'єм JTAG для програмування. Розміри плати: 76,2 мм x 101,6 мм.

     

    in Новини

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