- © А.А. Пятаев, 2015
УДК 007.51
А.А. Пятаев
ПРОЕКТИРОВАНИЕ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА НА ОСНОВЕ ГОЛОСОВОГО УПРАВЛЕНИЯ
Рассмотрен способ создания пользовательского интерфейса на основе голосового управления, с помощью которого можно автоматизировать некоторые повседневные задачи с использованием свободно распространяемых Unix-подобных систем. Данный способ, состоит из написания сценария на языке BourneShell с применением сторонних программ и внешних ресурсов (Google API), позволяющий по нажатию клавиши записать голосовую команду пользователя, отправить ее для распознавания, получить результат и произвести сравнение с параметрами заданными пользователем. И в случае успешного совпадения по «ключевым словам» произвести некоторые действия, так-же предварительно заданные пользователем. При помощи этого можно упростить работу предприятия, сделать голосовое управление для стремительно развивающихся систем «умный дом» и просто облегчить работу за компьютером людей с ограниченными возможностями. Так же данному интерфейсу не требуются большие затраты ресурсов в связи с отсутствием графического интерфейса для конечного пользователя, в связи с чем для его внедрения могут использоваться даже одно-платные компьютеры которые отличаются компактностью, дешевизной и надежностью. В совокупности получается система, отличающаяся своим удобством в использовании, практичностью и малыми затратами как системных ресурсов, так и финансовых.
Ключевые слова: голосовое управление, интерфейс, распознавание, Linux, Bash, Festival, Sox, LAME.
В данный момент очень часто встает вопрос удобства и простоты обращения с новыми разнообразными платформами. За последнее десятилетие 1Т-индустрия претерпела весьма сильные, значимые и прогрессивные изменения... В связи с чем встает вопрос адаптации сотрудников, обслуживающего персонала и рядовых пользователей к новым технологиям и разработкам...
Так же большую роль играет момент удобства, так как можно автоматизировать и упростить любые повседневные шаблонные задачи. В связи с этим будет крайне уместно внедрить в рабочий (учебный, производственный и т.д.) процесс компонент позволяющий использовать не только стандартные способы ввода информации (мышь, клавиатура), но и такой широко распространенный в последнее время
способ как «голосовая система управления», так как вербальная система общения наиболее удобна для человека. Но для любой системы нужен пользовательский интерфейс который позволит с удобством пользоваться данным компонентом. Наша система управления должна соответствовать следующим критериям:
1. удобство;
2. экономичность;
3. практичность (наше устройство сможет выполнять данный процесс в фоновом режиме и не доставлять проблем с использованием других приложений);
4. расширяемость за счет добавления сторонних программ (которые поддерживаются как стационарными так и мобильными платформами);
5. гибкость настройки (то для чего может использоваться данное прило-
жение будет определятся только пользователем).
Целью данной статьи является создание, оптимизация и настройка под свои конкретные цели скрипта на языке Bourne shell[1] (Bash) с применением свободно распространяемого программного обеспечения (распространяемого по лицензии GPL3... ) и использованием закрытых ресурсов извне Google API. Так же мы сможем оптимизировать наш скрипт для использования не только на стационарных компьютерах, но и на неттопах, а так же на весьма стремительно развивающихся одно-платных компьютерах построенных на ARM процессорах. Ярким примером данных компьютеров является Raspberry PI который отличается своей дешевизной, компактностью и надежностью. Плюс к тому все наши действия будут реализовываться на UNIX-подобном дистрибутиве основанном на ядре Linux. Практически все дистрибутивы основанные на ядре Linux являются свободно распространяемыми, что позволит не затрачивать на программное обеспечение дополнительных финансовых средств. Это будет крайне выгодно не только для внедрения на производстве и для развертывания в корпоративных целях, но и для использования в домашних целях (построение системы «умный дом»), в учебных заведениях и т.д. В данном случае, скрипт будет создаваться для использования, на дистрибутиве Linux Debian который, распространяется по лицензии GNU GPL.
Так как нам нужно сделать нашу систему максимально «облегченной», для ресурсов устройства интерфейс системы будет консольным, а все пользовательские изменения, настройки и добавления новых компонентов, будут выполняться непосредственно в тексте bash сценария.
Для начала мы должны скачать и установить на нашу машину систему,
основанную на ядре Linux, хотя нам вполне подойдут и BSD дистрибутивы. Инструкции по установке и настройке выбранного вами дистрибутива можно легко найти на официальных сайтах посвященных данным системам, как и ISO образы этих систем.
Все команды для консоли мы будем указывать с нижним подчеркиванием.
После установки и базовой настройки системы, нам нужно установить кроссплатформенный аудио-редактор Sox[2] и приложение для кодирования аудио-файлов LAME[3]. В связи с тем что Google API работает только с файлами форматов flac и speex, для начала мы будем записывать наши команды в файлы формата wav, а потом конвертировать в flac. Так же нам понадобится обучить нашу систему говорить, это нам поможет сделать обобщенная многоязычная система синтеза речи TTS Festival[4], распространяемая под свободной лицензией.
Для установки пакетов (в Debian, Ubuntu, Raspbian) нужно прописать в консоли (с правами администратора) команду apt-get install sox lame festival festvox-ru.
После установки нужных нам пакетов создаем в папке отведенной для нашего проекта 2 файла. Первый назовем Voice.sh, а второй perebor.sh. В Voise.sh мы пишем следующее:
#!/bin/bash
while read -sn1 -p "Нажмите любую клавишу для запуска процесса распознавания, или Ctrl+C для остановки..."; echo
do
echo "произнесите фразу"
arecord -d 2 -q -f cd -r 16000 voice1.wav
sox voice1.wav voice1.flac gain -n -5 silence 1 5 2%
echo "начинаем анализ голоса"
wget -q -U "Mozilla/5.0" --post-file voicel.flac --header =" Content-Type: audio/x-flac; rate=16000" -O - "http:// www.google.com/speech-api/v2/ recognize?lang=ru-RU&key=YOUR_ GOOGLE_API_KEY&client=chromium" > raspoznanno.txt
bash ./perebor.sh rm voicel.wav rm voicel.flac rm raspoznanno.txt done
А во второй файл соответственно: #!/bin/bash
while grep -i "пров" raspoznanno.txt; do
while grep -i "сист" raspoznanno.txt; do
echo "Система включена" I festival
--tts --language russian;
exit
done
exit
done
while grep -i "включ" raspoznanno.txt; do
while grep -i "свет" raspoznanno.txt; do
echo "Свет включен" I festival --tts
--language russian;
exit
done
exit
done
while grep -i "свет" raspoznanno.txt; do
while grep -i "выкл" raspoznanno.txt; do
echo "Свет выключен" I festival --tts
--language russian;
exit
done
exit
done
echo "Результат не найден" I festival
--tts --language russian;
exit
Эти два сценария и будут осуществлять всю работу. Остановимся подробнее на каждой команде:
#!/bin/bash - указание пути к интерпретатору bash.
while read -snl -p "Нажмите любую клавишу для запуска процесса распознавания, или Ctrl+C для остановки..."; echo
do - так как этот скрипт рассчитан не только на компьютеры с большим количеством ресурсов, но и на одноплатные компьютеры ресурсы которых не велики, распознавать всю речь поступающую в микрофон не представляется возможным, поэтому мы будем записывать звук только по нажатии любой клавиши, или же завершать работу скрипта при нажатии комбинации Ctrl+C.
arecord -d 2 -q -f cd -r 16000 voicel. wav - данной командой мы записываем звуковой файл в формате wav длиной в 2 секунды и частотой 16 кГц (16 000 Гц). Вы вполне можете изменить время записи команды, в зависимости от ваших потребностей, но менять частоту не рекомендуется, так как это может отразиться на качестве записи и как следствии дальнейшего распознавания.
sox voicel.wav voicel.flac gain -n -5 silence 1 5 2% - данной командой мы конвертируем waw файл в файл с расширением flac.
wget -q -U "Mozilla/5.0" --post-file voice1.flac --header="Content-Type: audio/x-flac; rate=16000" -O - "http:// www.google.com/speech-api/v2/ recognize?lang=ru-RU&key=YOUR_ GOOGLE_API_KEY&client=chromium" > raspoznanno.txt - данной командой мы отправляем post-запрос в Google API, происходит распознавание, и после этого получаем его в текстовом виде и производим вывод в файл ras-poznanno.txt. И самое главное, вместо YOUR_GOOGLE_API_KEY, мы должны ввести уникальный ключ, который
можно получить на сайте https://code. google.com/apis/console.
bash ./perebor.sh - далее происходит запуск второго созданного файла из директории.
rm voice1.wav
voicel.flac
raspoznanno.txt - удаление временных файлов.
Теперь переходим к файлу perebor. sh, это своеобразный «мозг» нашей системы. Здесь мы будем указывать ключевые слова для сравнения результата который был получен из Google API и сохранен в raspoznanno.txt. Для примера укажем стандартные команды для системы управления умным домом: #!/bin/bash
while grep -i "пров" raspoznanno.txt; do
while grep -i "сист" raspoznanno.txt; do
echo "Система включена" l festival
--tts --language russian;
exit
done
exit
done
while grep -i "свет" raspoznanno.txt; do
while grep -i "выкл" raspoznanno.txt; do
echo "Свет выключен" l festival --tts
--language russian;
exit
done
exit
done
while grep -i "свет" raspoznanno.txt; do while grep -i "включ" raspoznanno.txt; do
echo "свет включен" | festival --tts
--language russian;
exit
done
exit
done
echo "Результат не найден" l festival
--tts --language russian;
exit
Команда grep -i "пров" raspoznanno. txt отвечает за поиск фрагмента ключевого слова в файле raspoznanno.txt, далее мы ищем по второму ключевому слову grep -i "сист" raspoznanno.txt. Если обнаруживается совпадение по обоим фрагментам ключевых слов, то происходит вывод результата. В данном случае это echo "Система включена" I festival --tts --language russian;
Наша система голосом уведомит нас о том что «система включена». Результат можно задать любой, в зависимости от потребностей пользователя. В случае, если совпадений по первому поиску не было обнаружено, скрипт переходит ко второму варианту и так далее по списку. Если не найден ни один вариант, система уведомит нас голосом, о том, что «результат не найден» и вернется обратно к сценарию Voice.sh. Для заполнения нужных нам команд и ключевых слов можно просто воспользоваться стандартной формой, вставляя ее в цикл файла после строки указания интерпретатора (#!/bin/bash) perebor.sh.
Например: while grep -i "свет" raspoznanno.txt; do while grep -i "выкл" raspoznanno.txt; do echo "Свет выключен" l festival --tts --language russian; exit done exit done
Вместо фрагмента ключевого слова «свет», можно написать любое нужное вам для управления вашей системой слово. Соответственно для изменения результата распознавания и сравнения, мы меняем строку echo "Свет выключен" I festival --tts --language russian; на нужную нам. Или добавить ниже нее команду которая будет отправляться на контроллер управления «Умный дом».
Запуск скриптов производится следующим образом:
cd /путь к вашей созданной папке, bash Voice.sh
После этого вы нажимаете на любую клавишу и ждете результата распознавания, и так далее по циклу.
В завершении можно сказать что мы получили пользовательский интерфейс не требовательный к ресурсам компьютера, и работоспособный практически на любой UNIX-о подобной
системе, который может, при задействовании дополнительных программ и должной настройке, как управлять воспроизведением медиа-файлов, на вашем компьютере, так и управлять системой освещения умного дома, выгрузкой отчетов в офисе, а так же совершать ежедневные рутинные действия на предприятии путем простейшего голосового запроса.
КОРОТКО ОБ АВТОРЕ.
Пятаев Андрей Андреевич - студент, старший лаборант, e-mail: [email protected], НИТУ «МИСиС».
СПИСОК ЛИТЕРАТУРЫ
1. GNU Operating System [Электронный ресурс]: Bourne-Again SHell manual URL: http://www.gnu.org/software/bash/manual/ (дата обращения: 19.01.2015).
2. SoX - Sound eXchange [Электронный ресурс]: Documentation URL: http://sox. sourceforge.net/Docs/Documentationh (дата обращения: 20.01.2015).
3. LAME [Электронный ресурс]: Guide to command line options (in CVS) URL: http:// lame.cvs.sourceforge.net/viewvc/lame/lame/ USAGE (дата обращения: 20.01.2015).
4. Festvox [Электронный ресурс]: The Festival Speech Synthesis System: System documentation URL: http://www.festvox.org/ docs/manual-2.4.0/festival_toc.html дата обращения: 19.01.2015) ЕШЗ
UDC 007.51
DESIGNING THE USER INTERFACE ON THE BASIS OF THE VOICE CONTROL
Pyataev A.A., Student, Senior Assistant, e-mail: [email protected], National University of Science and Technology «MISiS», 119049, Moscow, Russia.
This paper deals with the means of creating the user interface on the basis of voice control, with the help of which some routine tasks with the use of the free distributed Unix-like systems can be automatized. The medium consists of writing the script in the BourneShell language with the application of the third-party programmes and external resources (Google API) allowing to record a voice command of the user with a keypress, send it for recognition, get the result and compare it with the properties given by the user. Besides in the case of the successful matching with the "key words" it is capable of fulfilling some tasks which were given by the user earlier. This method can simplify the work process of a company, provide the rapidly developing "smart home" systems with the voice control and make working with a computer easier for the people with reduced capabilities. Moreover the interface doesn't require an extensive use of resources. In this connection even the single-board computers which are known for their portability, low price and reliability can be used for the implementation of the method. As a whole, we have the system which is notable for its usability, practicality, a low cost and a reasonable use of resources.
Key words: voice control, interface, recognition, Linux, Bash, Festival, Sox, LAME.
REFERENCES
1. GNU Operating System. Bourne-Again SHell manual, available at: http://www.gnu.org/software/ bash/manual/ (accessed 19.01.2015).
2. SoX - Sound eXchange. Documentation, available at: http://sox.sourceforge.net/Docs/Documenta-tionh (accessed 20.01.2015).
3. LAME. Guide to command line options (in CVS), available at: http://lame.cvs.sourceforge.net/viewvc/ lame/lame/USAGE (accessed 20.01.2015).
4. Festvox. The Festival Speech Synthesis System: System documentation, available at: http://www. festvox.org/docs/manual-2.4.0/festival_toc.html accessed 19.01.2015)