пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ
Слишком длинный поисковый запрос.
По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Технология TTS (text-to-speech) служит для преобразования текстовой информации в голос. Проще говоря, вы пишите – система проговаривает. В системах телефонной связи такая технология может быть полезна, если необходимо произнести баланс клиента или для озвучивания прочих голосовых сообщений. О том, как настроить TTS в FreePBX 13 с помощью командной строки Asterisk расскажем в статье.
Встроенный TTS
В FreePBX предусмотрен встроенный движок для TTS, который носит название filte. Движок хорошо отрабатывает английскую речь, но не умеет работать с русской. Вкратце ознакомимся с его настройкой. Тут все достаточно тривиально, переходим в Applications -> Text to Speech
Name - дайте имя для TTS механизма
Text - укажите произносимый системой набор слов
Choose an Engine - выберите движок для воспроизведения. По умолчанию, единственным доступным является filte
Destination - куда будет отправлен звонок, после проговаривания фразы указанной в поле Text
На этом этапе система произнесет набор слов по-английски. Писать методом транслитерации – плохая идея. Движок конечно произнесет указанные слова, но это вряд ли можно будет отправить в «продакшн». Итак, как же бесплатно настроить русскоговорящий TTS в FreePBX? Легко, с помощью системы синтеза речи festival
Русский язык FreePBX Festival
Установку будем производить на примере последней сборки FreePBX Distro на базе CentOS 6. Переходим к установке. Скачиваем исходные файлы
cd /usr/src
wget http://www.cstr.ed.ac.uk/downloads/festival/2.1/speech_tools-2.1-release.tar.gz
wget http://www.cstr.ed.ac.uk/downloads/festival/2.1/festival-2.1-release.tar.gz
Распаковываем архивы и инсталлируем необходимые файлы
tar zxvf festival-2.1-release.tar.gz
tar zxvf speech_tools-2.1-release.tar.gz
cd speech_tools
./configure
make
make install
cd ..
cd festival
./configure
make
make install
Система может потребовать установить пакет ncurses-devel. Сделайте это с помощью команды yum install ncurses-devel
Создаем переменную PATH, которая описывает путь до исполняемых файлов в директории festival/bin/
export PATH=$PATH:/usr/src/festival/bin/
Создадим директорию для хранения русскоязычных файлов. Для этого, последовательно в директории festival/lib/ создадим папки /voices и /russian:
mkdir /usr/src/festival/lib/voices/
mkdir /usr/src/festival/lib/voices/russian/
Скачиваем русскоязычный бандл:
wget http://sourceforge.net/projects/festlang.berlios/files/msu_ru_nsh_clunits-0.5.tar.bz2
Далее, распаковываем скачанный архив в созданную директорию:
tar xjf msu_ru_nsh_clunits-0.5.tar.bz2 -C ./festival/lib/voices/russian
Открываем через редактор vim файл /usr/src/festival/lib/languages.scm
vim /usr/src/festival/lib/languages.scm
В самом начале файла вставляем следующие строки:
(define (language_russian)
"(language_russian)
Set up language parameters for Russian."
(set! male1 voice_msu_ru_nsh_clunits)
(male1)
(Parameter.set 'Language 'russian)
)
В файле находим строки указанные ниже:
(language_british_english))
((equal? language 'british_english)
После указанных выше строк, добавляем следующее:
(language_russian))
((equal? language 'russian)
Далее открываем файл /usr/src/festival/lib/siteinit.scm и в самый конец добавляем строку ниже:
(set! voice_default 'voice_msu_ru_nsh_clunits)
Создаем кэш – директорию. Для этого, скопируйте команду ниже:
mkdir /var/lib/asterisk/festivalcache/ && chown asterisk:asterisk /var/lib/asterisk/festivalcache/
Открываем файл /etc/asterisk/festival.conf и добавляем следующие строки:
[main]
host=localhost
port=1314
usecache=yes
cachedir=/var/lib/asterisk/festivalcache/ \созданный выше файл
festivalcommand=(tts_textasterisk "%s" 'file)(quit)
Запускаем сервер festival
festival --server
Если все успешно, то вы увидите строки ниже:
[pbx@localhost ~]#festival --server
server Fri Aug 12 13:00:32 2016 : Festival server started on port 1314
Приступаем к тестам. Открываем файл /etc/asterisk/extensions_custom.conf и создаем тестовый диал – план как указано ниже:
[festival]
exten => s,1,Answer
exten => s,n,Festival('Привет. Все. работает.')
exten => s,n,Hangup
Сохраняем изменения. Для того, чтобы настроить воспроизведение из графического интерфейса FreePBX мы воспользуемся модулем Custom Destinations. Для его настройки перейдите во вкладку Admin -> Custom Destinations . Нажимаем на кнопку Add Destination
Разберем каждую из опций:
Target - укажите здесь festival,s,1, согласно созданному ранее диал-плану. Синтаксис заполнения следующий - [имя_контекста],[экстеншен],[приоритет]
Description - описание создаваемого правила
Notes - заметки. Если вы создаете много подобных правил, советуем создавать подробные заметки, чтобы избежать дальнейшей путаницы.
Return - если ваш контекст заканчивается командой Return (команда возвращает вызов в родительский контекст), то в поле Destination укажите назначение для вызова после отработки TTS.
По окончанию настроек нажмите Submit и затем Apply Config.
Теперь необходимо настроить маршрутизацию на кастомный контекст, который мы только что создали в FreePBX. Например, можно настроить маршрутизацию из IVR меню по нажатию цифры 5 на телефоне, как указано ниже:
Звоним на IVR и нажимаем 5 и слышим синтезированный голос. Параллельно смотрим на запущенный через CLI сервер Festival:
client(1) Fri Aug 12 13:00:54 2016 : accepted from localhost
client(1) Fri Aug 12 13:01:04 2016 : disconnected
client(2) Fri Aug 12 13:01:20 2016 : accepted from localhost
client(2) Fri Aug 12 13:01:20 2016 : disconnected
Google TTS в FreePBX
Еще пару лет назад можно было бы легко воспользоваться Google TTS для синтеза речи. Для этого надо было добавить движок во вкладке Settings -> Text To Speech Engines и отредактировать файл /var/lib/asterisk/agi-bin/propolys-tts.agi. Но, к сожалению, Google начал использовать капчу, чем перекрыл автоматизированный и бесплатный доступ к своему сервису.
Дополнительно про настройку TTS от Festival вы можете прочитать здесь.
В современном технологическом мире контейнерные технологии используются везде. Самой популярной платформой для управления контейнерами является Docker. С ее помощью использовать контейнеры, разрабатывать и запускать приложения становится проще.
К сожалению, она может занимать довольно много места на диске, и в конечном счете диск может просто переполниться.
Совсем неважно, где вы используете Docker – на своем устройстве или на сервере, это руководство научит вас анализировать дисковое пространство, которые вы используете, и очищать Docker от ненужных ресурсов.
Все, что вам понадобиться, - это запущенный демон Docker и терминал.
Как проанализировать, сколько места занимает Docker
Вы можете просмотреть, сколько места занимает Docker, запустив следующую команду:
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 61 16 21.1GB 15.25GB (72%)
Containers 69 0 12.26MB 12.26MB (100%)
Local Volumes 3 2 539.1MB 50.04MB (9%)
Build Cache 76 0 1.242GB 1.242GB
А добавив флаг
-v
, вы можете получить более подробную информацию:
$ docker system df -v
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED
teamatldocker/jira e50b8390945c 4 weeks ago 842.3MB 0B
vw ed9e125a8925 2 months ago 1.659GB 134.8MB
Containers space usage:
CONTAINER ID IMAGE COMMAND SIZE
94e03a4a17d0 teamatldocker/jira "/sbin/tini -- /usr/…" 1.4MB
Local Volumes space usage:
VOLUME NAME LINKS SIZE
play-with-jira_postgresqldata 1 84.19MB
play-with-jira_jiradata 1 404.8MB
Build cache usage: 1.242GB
CACHE ID CACHE TYPE SIZE CREATED LAST USED
oxil5sdicb91 regular 135MB 2 months ago 2 months ago
kxz13fmdbodg regular 13B 2 months ago 2 months ago
nysus21ej7pf regular 0B 2 months ago 2 months ago
Как вы можете видеть, вы получили информацию о том:
Сколько места занимают образы
Сколько места занимают контейнеры
Сколько места занимают локальные тома
Сколько места занимает кэш сборки
Как очистить Docker
Вы можете очистить Docker полностью или только какие-то определенные его ресурсы, например, образы, тома контейнеров или кэш сборки.
Для того, чтобы очистить максимально большую часть данных (кроме тех компонентов, которые сейчас используются), вам нужно выполнить следующую команду:
$ docker system prune -a
Флаг
-a
обозначает неиспользуемые или висячие контейнеры. Если вы не укажите флаг
-a
, то команда удалит только висячие образы, то есть нетегированные образы, которые никак не связаны с другими образами.
Если вы хотите удалить большую часть ресурсов Docker, но при этом оставить тегированные образы, то вам нужна вот эта команда:
$ docker system prune
Эти команды помогут вам быстро освободить место на диске. Но помимо этого вы можете удалять отдельные компоненты.
Вот несколько полезных команд:
Удаление неиспользуемых и висячих образов
$ docker image prune
Удаление только висячих образов
$ docker image prune -a
Удаление остановленных контейнеров
$ docker container prune
Удаление неиспользуемых томов
$ docker volume prune
Как управлять пространством, которое использует Docker, на постоянной основе
Какие-то команды вы можете запускать на ежедневной основе или при запуске платформы. А для того, чтобы не забывать об этом, вы можете добавить флаг
-f
к команде, которую хотите запускать автоматически.
Только помните, что, так как вы регулярно удаляете ресурсы Docker, вам придется чаще загружать образы.
Если у вас нет проблем с нехваткой дискового пространства, можете быть спокойны. Просто делайте «уборку» всякий раз, как заметите, что Docker начинает использовать слишком много памяти.
Заключение
На сегодняшний день существует огромное количество способов освобождения дискового пространства Docker с помощью docker-команд. Вы даже можете выполнять эти команды в автоматическом режиме, если хотите периодически очищать ресурсы Docker.
Если вы хотите добавить какое-то значение в ячейку, и это зависит от некоторого условия, завязанного на других ячейках, то вам нужен SQL-оператор case.
Если вы знакомы с другими языками, то можно сказать, что оператор case – это тот же оператор if или switch. С его помощью вы можете указать значения для разных условий, так что вы можете получить различные значения в ячейке в зависимости от того, какое условие выполнится.
Этот оператор может быть очень полезен в анализе данных, так что после того, как мы ознакомимся с самим оператором case, мы рассмотрим пару примеров, как их можно использовать в анализе данных.
Синтаксис SQL-оператора case
Его синтаксис имеет довольно много нюансов, но при этом он интуитивно понятный: ключевое слово
CASE
свидетельствует о начале оператора case, а ключевое слово
END
- о его конце.
К тому же для отдельного условия вы можете записать ключевое слово
WHEN
, а после него условие, которое должно быть выполнено. Затем следует ключевое слово
THEN
и значение для этого условия, например,
WHEN <условие> THEN <содержимое>.
Дальше могут следовать другие операторы
WHEN
/
THEN
.
В конце, после ключевого слова
ELSE
, вы можете добавить значение по умолчанию, которое будет использоваться только в том случае, если ни одно из условий не выполнится. Ниже приведен пример.
CASE
WHEN условие1 THEN содержимое
WHEN условие2 THEN другое содержимое
...
ELSE содержимое по умолчанию
END
Давайте реализуем это на практике, чтобы лучше понять.
Примеры с SQL-оператором case
Давайте применим оператор case на практике. У нас есть таблица со списком студентов и их экзаменационными баллами. Нам нужно поставить каждому студенту оценку. Мы можем сделать это автоматически, а для этого нам нужен оператор case.
id
name
score
1
Simisola
60
2
Ivan
80
3
Metodija
52
4
Callum
98
5
Leia
84
6
Aparecida
82
7
Ursula
69
8
Ramazan
78
9
Corona
87
10
Alise
57
11
Galadriel
89
12
Merel
99
13
Cherice
55
14
Nithya
81
15
El?ad
71
16
Liisi
90
17
Johanna
90
18
Anfisa
90
19
Ry?suke
97
20
Sakchai
61
21
Elbert
63
22
Katelyn
51
Воспользуемся оператором
CASE
для того, чтобы поставить каждому студенту оценку, которую мы добавим в новый столбец под названием
grade
.
Для начала запишем оператор
CASE
со схемой распределения оценок. Если значение
score
равно 94 и выше, то в строке записывается значение
A
. Если же значение
score
равно 90 и выше, то записывается значение
A-
, и т.д.
CASE
WHEN score >= 94 THEN "A"
WHEN score >= 90 THEN "A-"
WHEN score >= 87 THEN "B+"
WHEN score >= 83 THEN "B"
WHEN score >= 80 THEN "B-"
WHEN score >= 77 THEN "C+"
WHEN score >= 73 THEN "C"
WHEN score >= 70 THEN "C-"
WHEN score >= 67 THEN "D+"
WHEN score >= 60 THEN "D"
ELSE "F"
END
После того, как мы написали оператор
CASE
, мы можем добавить его в запрос. После чего мы воспользуемся ключевым словом
AS
и дадим столбцу название
grade
:
SELECT *,
CASE
WHEN score >= 94 THEN "A"
WHEN score >= 90 THEN "A-"
WHEN score >= 87 THEN "B+"
WHEN score >= 83 THEN "B"
WHEN score >= 80 THEN "B-"
WHEN score >= 77 THEN "C+"
WHEN score >= 73 THEN "C"
WHEN score >= 70 THEN "C-"
WHEN score >= 67 THEN "D+"
WHEN score >= 60 THEN "D"
ELSE "F"
END AS grade
FROM students_grades;
Ниже представлена таблица, которую мы получим с помощью этого запроса. Теперь у каждого студента есть оценка, которая была выставлена в соответствии с его баллами.
id
name
score
grade
1
Simisola
60
D
2
Ivan
80
B-
3
Metodija
52
F
4
Callum
98
A
5
Leia
84
B
6
Aparecida
82
B-
7
Ursula
69
D+
8
Ramazan
78
C+
9
Corona
87
B+
10
Alise
57
F
11
Galadriel
89
B+
12
Merel
99
A
13
Cherice
55
F
14
Nithya
81
B-
15
El?ad
71
C-
16
Liisi
90
A-
17
Johanna
90
A-
18
Anfisa
90
A-
19
Ry?suke
97
A
20
Sakchai
61
D
21
Elbert
63
D
22
Katelyn
51
F
Более сложные примеры с SQL-оператором case
Кроме того, мы можем производить различные действия с этой таблицей (зависит от того, что нам требуется) с помощью других операторов, которые используются совместно с оператором case.
Оператор case: пример 1
Например, мы можем воспользоваться оператором
ORDER BY
для того, чтобы отсортировать строки так, чтобы студенты с наивысшими оценками были на верхних строчках.
SELECT name,
CASE
WHEN score >= 94 THEN "A"
WHEN score >= 90 THEN "A-"
WHEN score >= 87 THEN "B+"
WHEN score >= 83 THEN "B"
WHEN score >= 80 THEN "B-"
WHEN score >= 77 THEN "C+"
WHEN score >= 73 THEN "C"
WHEN score >= 70 THEN "C-"
WHEN score >= 67 THEN "D+"
WHEN score >= 60 THEN "D"
ELSE "F"
END AS grade
FROM students_grades
ORDER BY score DESC;
Мы упорядочиваем строки, основываясь на столбце
score
, значения которого являются числами, а не на столбце
grade
, так как алфавитный порядок не совпадает с порядком числовых оценок. Для того, чтобы отобразить строки в порядке убывания, то есть так, чтобы наибольшие значения были наверху, мы используем ключевое слово
DESC
.
Таблица будет выглядеть следующим образом:
name
grade
Merel
A
Callum
A
Ry?suke
A
Liisi
A-
Johanna
A-
Anfisa
A-
Galadriel
B+
Corona
B+
Leia
B
Aparecida
B-
Nithya
B-
Ivan
B-
Ramazan
C+
El?ad
C-
Ursula
D+
Elbert
D
Sakchai
D
Simisola
D
Alise
F
Cherice
F
Metodija
F
Katelyn
F
Оператор case: пример 2
Давайте немного проанализируем эти данные. Подсчитаем, сколько студентов получили каждую оценку. Для этого воспользуемся операторами
GROUP BY
и
COUNT
.
SELECT
CASE
WHEN score >= 94
THEN "A"
WHEN score >= 90 THEN "A-"
WHEN score >= 87 THEN "B+"
WHEN score >= 83 THEN "B"
WHEN score >= 80 THEN "B-"
WHEN score >= 77 THEN "C+"
WHEN score >= 73 THEN "C"
WHEN score >= 70 THEN "C-"
WHEN score >= 67 THEN "D+"
WHEN score >= 60 THEN "D"
ELSE "F"
END AS grade,
COUNT(*) AS number_of_students
FROM students_grades
GROUP BY grade
ORDER BY score DESC;
Мы используем оператор
ORDER BY
для того, чтобы упорядочить оценки в порядке убывания, и для этого мы используем столбец
score
, так как в нем хранятся числовые значения (а вот упорядочение по столбцу
grade
будет использовать алфавитный порядок, который не будет совпадать с порядком оценок, выстроенном по числовым значениям).
grade
number_of_students
A
3
A-
3
B+
2
B
1
B-
3
C+
1
C-
1
D+
1
D
3
F
4
Оператор case: пример 3
Давайте проанализируем данные немного по-другому. Мы воспользуемся операторами
GROUP BY
и
COUNT
, а также оператором case (но немного другим) для того, чтобы подсчитать, сколько студентов сдали экзамен. После чего мы можем применить оператор
ORDER BY
для того, чтобы расположить значения столбца с количеством студентов, успешно сдавших экзамен, в том порядке, который нам нужен.
SELECT
CASE
WHEN score >= 60
THEN "passed"
ELSE "failed"
END AS result,
COUNT(*) AS number_of_students
FROM students_grades
GROUP BY result
ORDER BY result DESC;
Вот так выглядит таблица, которую мы получили в результате. Не такая уж и плохая группа – 18 из 22 студентов сдали экзамен, а вот оставшимся 4 студентам может потребоваться помощь.
result
number_of_students
passed
18
failed
4
Заключение
Оператор case – это мощный инструмент, который вы можете использовать тогда, когда вам нужно получить значения с учетом некоторых условий.
Из этой статьи вы узнали, как его можно применять, и рассмотрели несколько примеров из области анализа данных.
