Letysite.ru

IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Распознавание речи linux

Разбираемся с современными системами распознавания речи в Linux

Содержание статьи

Человека всегда привлекала идея управлять машиной естественным языком. Возможно, это отчасти связано с желанием человека быть НАД машиной. Так сказать, чувствовать свое превосходство. Но основной посыл — это упрощение взаимодействия человека с искусственным интеллектом. Управление голосом в Linux с переменным успехом реализуется без малого уже четверть века. Давай разберемся в вопросе и попробуем сблизиться с нашей ОС настолько, насколько это только возможно.

Суть дела

Системы работы с человеческим голосом для Linux существуют давно, и их великое множество. Но не все они корректно обрабатывают русскую речь. Некоторые и вовсе заброшены разработчиками. В первой части нашего обзора мы поговорим непосредственно о системах распознавания речи и голосовых ассистентах, а во второй — рассмотрим конкретные примеры их использования на Linux-десктопе.

Следует различать собственно системы распознавания речи (перевод речи в текст или в команды), такие как, например, CMU Sphinx, Julius, а также приложения на основе этих двух движков, и голосовые ассистенты, ставшие популярными с развитием смартфонов и планшетов. Это, скорее, побочный продукт систем распознавания речи, дальнейшее их развитие и воплощение всех удачных идей распознавания голоса, применение их на практике. Для Linux-десктопов таких пока мало.

Надо понимать, что движок распознавания речи и интерфейс к нему — это разные вещи. Таков базовый принцип архитектуры Linux — разделение сложного механизма на более простые составные части. Самая сложная работа ложится на плечи движков. Обычно это скучная консольная программа, работающая незаметно для пользователя. Пользователь же взаимодействует в основном с программой-интерфейсом. Создать интерфейс несложно, поэтому основные усилия разработчики направляют именно на разработку открытых движков распознавания речи.

Что было раньше

Исторически сложилось так, что все системы работы с речью в Linux развивались не спеша и скачкообразно. Причина не в криворукости разработчиков, а в высоком уровне вхождения в среду разработки. Написание кода системы для работы с голосом требует высокой квалификации программиста. Поэтому, перед тем как начать разбираться с системами работы с речью в Linux, необходимо сделать небольшой экскурс в историю. Была когда-то в IBM такая чудесная операционная система — OS/2 Warp (Merlin). Вышла она в сентябре далекого уже 1996 года. Кроме того, что она обладала очевидными преимуществами перед всеми остальными операционками, OS/2 была укомплектована весьма продвинутой системой распознавания речи — IBM ViaVoice. Для того времени это было очень круто, учитывая, что ОС работала на системах с 486-м процессором с объемом ОЗУ от 8 Мбайт (!).

Как известно, OS/2 проиграла битву Windows, однако многие ее компоненты продолжили существовать независимо. Одним из таких компонентов стала та самая IBM ViaVoice, превратившаяся в самостоятельный продукт. Так как IBM всегда любила Linux, ViaVoice была портирована на эту ОС, что дало детищу Линуса Торвальдса самую передовую для своего времени систему распознавания речи.

К сожалению, судьба ViaVoice сложилась не так, как хотели бы линуксоиды. Сам движок распространялся бесплатно, но его исходники оставались закрытыми. В 2003 году IBM продала права на технологию канадо-американской компании Nuance. Nuance, разработавшая, пожалуй, самый успешный коммерческий продукт для распознавания речи — Dragon Naturally Speeking, здравствует и ныне. На этом бесславная история ViaVoice в Linux практически закончилась. За то короткое время, что ViaVoice была бесплатной и доступной линуксоидам, к ней разработали несколько интерфейсов, таких, например, как Xvoice. Однако проект давно заброшен и ныне практически неработоспособен.

OS/2 Warp — система, которую мы потеряли

Что сегодня?

Сегодня все гораздо лучше. В последние годы, после открытия исходников Google Voice API, ситуация с развитием систем распознавания речи в Linux значительно улучшилась, выросло качество распознавания. Например, проект Linux Speech Recognition на основе Google Voice API показывает очень неплохие результаты для русского языка. Все движки работают примерно одинаково: сначала звук с микрофона устройства юзера попадает в систему распознавания, после чего либо голос обрабатывается на локальном устройстве, либо запись отправляется на удаленный сервер для дальнейшей обработки. Второй вариант больше подходит для смартфонов или планшетов. Собственно, именно так и работают коммерческие движки — Siri, Google Now и Cortana.

Из всего многообразия движков для работы с человеческим голосом можно выделить несколько активных на данный момент.

WARNING

CMU Sphinx

Большая часть разработки CMU Sphinx ведется в университете Карнеги — Меллона. В разное время над проектом работали и Массачусетский технологический институт, и покойная ныне корпорация Sun Microsystems. Исходники движка распространяются под лицензией BSD и доступны как для коммерческого, так и для некоммерческого использования. Sphinx — это не пользовательское приложение, а, скорее, набор инструментов, который можно применить в разработке приложений для конечных пользователей. Sphinx сейчас — это крупнейший проект по распознаванию речи. Он состоит из нескольких частей:

  • Pocketsphinx — небольшая быстрая программа, обрабатывающая звук, акустические модели, грамматики и словари;
  • библиотека Sphinxbase, необходимая для работы Pocketsphinx;
  • Sphinx4 — собственно библиотека распознавания;
  • Sphinxtrain — программа для обучения акустическим моделям (записям человеческого голоса).

Проект развивается медленно, но верно. И главное — его можно использовать на практике. Причем не только на ПК, но и на мобильных устройствах. К тому же движок очень хорошо работает с русской речью. При наличии прямых рук и ясной головы можно настроить распознавание русской речи с помощью Sphinx для управления домашней техникой или умным домом. По сути, можно обычную квартиру превратить в умный дом, чем мы и займемся во второй части этого обзора. Реализации Sphinx имеются для Android, iOS и даже Windows Phone. В отличие от облачного способа, когда работа по распознаванию речи ложится на плечи серверов Google ASR или Яндекс SpeechKit, Sphinx работает точнее, быстрее и дешевле. И полностью локально. При желании можно научить Sphinx русской языковой модели и грамматике пользовательских запросов. Да, придется немного потрудиться при установке. Равно как и настройка голосовых моделей и библиотек Sphinx — занятие не для новичков. Так как основа CMU Sphinx — библиотека Sphinx4 — написана на Java, можно включать ее код в свои приложения для распознавания речи. Конкретные примеры использования будут описаны во второй части нашего обзора.

VoxForge

Особо выделим понятие речевого корпуса. Речевой корпус — это структурированное множество речевых фрагментов, которое обеспечено программными средствами доступа к отдельным элементам корпуса. Иными словами — это набор человеческих голосов на разных языках. Без речевого корпуса невозможна работа ни одной системы распознавания речи. В одиночку или даже небольшим коллективом создать качественный открытый речевой корпус сложно, поэтому сбором записей человеческих голосов занимается специальный проект — VoxForge.

Любой, у кого есть доступ к интернету, может поучаствовать в создании речевого корпуса, просто записав и отправив фрагмент речи. Это можно сделать даже по телефону, но удобней воспользоваться сайтом. Конечно, кроме собственно аудиозаписи, речевой корпус должен включать в себя дополнительную информацию, такую как фонетическая транскрипция. Без этого запись речи бессмысленна для системы распознавания.

VoxForge — стартовый портал для тех, кто хочет внести свой вклад в разработку открытых систем распознавания речи

HTK, Julius и Simon

HTK — Hidden Markov Model Toolkit — это инструментарий для исследования и разработки средств распознавания речи с использованием скрытых марковских моделей, разрабатывается в Кембриджском университете под патронажем Microsoft (Microsoft когда-то выкупила этот код у коммерческого предприятия Entropic Cambridge Research Laboratory Ltd, а затем вернула его Кембриджу вместе с ограничивающей лицензией). Исходники проекта доступны всем желающим, но использование кода HTK в продуктах, предназначенных для конечных пользователей, запрещено лицензией.

Читать еще:  Ошибка воспроизведения видео на ютубе идентификатор

Однако это не означает, что HTK бесполезен для Linux-разработчиков: его можно использовать как вспомогательный инструмент при разработке открытых (и коммерческих) средств распознавания речи, что и делают разработчики открытого движка Julius, который разрабатывается в Японии. Julius лучше всего работает с японским языком. Великий и могучий тоже не обделен, ведь в качестве голосовой базы данных используется все тот же VoxForge.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

ПО для оффлайн распознавания речи

Друзья, подскажите, пожалуйста, существует ли в природе какой-нибудь приличный софт для распознавания речи на русском языке, не требующий постоянного доступа к интернету? Желательно СПО, но нормально работающая проприетарщина тоже сойдёт.

http://cmusphinx.sourceforge.net/ не знаю только насколько хорошо работает. Тут есть про настройку русского в сфинксе: https://habrahabr.ru/post/237589/

существует ли в природе какой-нибудь приличный софт для распознавания речи на русском языке

Нету, в природе вместо «Speech Synthesis & Analysis Software» © обычно советуют секретаршу.

Нет такого, пробовал Sphinx, так промучился с ним неделю, чтобы просто распознать банальные голосовые команды, какие уж там фразы или предложения. Так и эти команды распознает через раз. Короче полная безнадёга, нужно самому брать Tensorflow и тренировать нейросетку.

заодно спрошу, а есть ли распознавалки произвольного языка, но не в обычный текст, а в запись фонетическим алфавитом?

Нужно распознавание речи или распознавание голосовых команд? Это две абсолютно разные задачи, на самом деле.

Если нужно именно распознавание команд, а не распознавание речи, то нужно было просто обучить cvoicecontrol, а не заниматься чёрт знает чем. 🙂

Гугель и яндекс лицензируют свои распознавалки для оффлайна.
Ценник зависит от левой пятки маркетолога, но обычно это сотни и десятки тысяч долларов соответственно.

А какая разница? Мне кажется переход между фонетической записью и записью в терминах конкретного языка тривиален.

во-первых, это не совсем так, напр. character читается как «карите» но char читаетсся как «чар»

чтобы читается как «штобы» и т.д.

И что? Что тебе мешает составить словарь языка в котором будет написано «штобы» и ему будет соответствовать «чтобы»? Ничего не мешает. Если у тебя будет записан набор звуков, то задача, считай, решена.

во-вторых, имея заранее заданный список слов можно уже самому sed-ом с минимальной логикой перевести запись в набор этих слов (задача управления компьютером по голосу)

вот я и хочу получить набор звуков в виде, наиболее близком тому, в котором он был записан, чтобы не получить на входе character вместо karate или «чтобы» вместо «шторы»

Ну я тебе и говорю, что это самая сложная часть. И нормальной реализации её нет. Если бы она была, то мы с некоторыми железяками вполне могли бы говорить.

Нужно распознавание речи в текст с имеющейся записи. Попробовал демку программы Voco Pro под Винду. Результат — близко к автосубтитрам Ютуба, т.е. «так себе». При этом голос с микрофона програма распознает почти на уровне окей гугла. Похоже, правы те, кто говорит, что пока задача толком не решена.

Гугель и яндекс лицензируют свои распознавалки для оффлайна.
Ценник зависит от левой пятки маркетолога, но обычно это сотни и десятки тысяч долларов соответственно.

А как это выглядит? Нужно покупать асиксы специализированное железо? Или летает на ксеонах/нвидиях? Я бы взял под свой стартап, если дадут в рассрочку бесплатно до взлета проекта, а там сочтемся )

Для начала нужно не пороть ахинеи и хотя бы примерно представлять как работают современные нейронные сети.

Стартап — это когда уже взлетело.
А у тебя — очередное ООО Вектор, которое ещё и не знает что оно такое.
В здравом уме с такими никто дела не имеет.

Если бы она была, то мы с некоторыми железяками вполне могли бы говорить

А как же амазон или тот же сири? У гугла вполне неплохо распознает предложения. Когда пиксель презентовали, так их главный индус по английски тарабанил, а система только успевала записывать. Если конечно это не мухлеж.

Распознавание и синтез — вещи немного разные.

но распознавание речи, записанное фонетическим алфавитом локализует ошибкт до 1 символа на звук, что позволяет использовать более эффективные алгоритмы коррекции

грубо говоря, неважно, что 30% символов неправильно распознано: если произносится, скажем, путь к файлу, этого может быть достаточно

Ну? Я и говорю, что расшифровка аудиодорожки до уровня фонетического алфавита — самое сложное. Остальное — фигня на уровне спеллчекера.

ну так она есть: у меня на макоси сири вполне справляется с распознаванием текста

проблема в том что она тупая и не умеет переключаться с русского на английский, кроме того английский язык — идиотский в плане записи и «карамба» можно записать как karamba или charamba, «комбат» как kombat или combat. наконец, она слабо пытается искать какие-то либо действия (программы) или файлы локально, зато активно пытается искать в гугле произнесённый текст (нахрен это надо, в гугл текст я и руками наберу)

Dragon вроде один из двух лидеров рынка. Кто второй — не помню. Я не знаю, требуется ли там подключение к инету или не требуется. Задача очень сложная — про неё были исследования учёных. Что по сути для хорошего распознавания речи одних механизмов распознавания «отдельных слов» недостаточно. Машина должна понимать семантику произносимого.

ок, но остальное может пофиксить косяки первого

Без хорошего первого второе — набор омерзительных костылей.

Машина должна понимать семантику произносимого.

Даже человеки не всегда понимают семантику произносимого, например «Пуськи бятые» © 🙂

Тут говорили про фонетику, семантику и ещё о каких-то штуках.

Если по порядку, то фонетика — это всего лишь третий этап обработки при распознавании речи, а семантика — тут вообще ни причём. Не знаешь слов — тут уже ничего не поделаешь — иди учи словарь/язык.

Первый этап — это адаптация к шумовой окружающей обстановке. Мозг автоматически выпиливает, например, тиканье часов, шум кондиционера, чьи-то разговоры в стороне, звук телевизора, ну и ещё тысячи вещей. И даже наше сознание особо ничего не предпринимаем при этом. Мозг это делает автоматом.

Остаётся почти идеальный частотный спектр собеседника, после фильтрации мозгом. Бывают конечно исключения, когда шумы вокруг на порядки громче голоса и к тому же они совсем уж апереодичные и непредсказуемые.

После успешного прохождения фильтрации, начинается второй этап — адаптация к тональности и тембру голоса собеседника, это почти тоже автоматом делается. К изъянам самой речи собеседника — ну там шипилявит или не выговаривает некоторые звуки, стандартно «Р», или ещё чего. Говор, когда больше например буква «А» похожа на букву «Б» — славноизвестный «вОлОгОдский» говор к примеру. К скорости самой речи.

Вобщем — эти первых два этапа практически никак никакой известной программой не обрабатываются и в анализатор фонетики сливается весь описанный мусор, среди которого речи в чистом виде практически нет.

Если например проводить тестирование в студии звукозаписи, с помощью человека со среднестатистическим тембром и тональностью голоса и с дикторской дикцией — можно вполне добиться гораздо большей эффективности работы любой распознающей программы. Но подобные условия — это сферический конь в вакууме.

Читать еще:  Команда passwd linux

Учим linux понимать голосовые команды

А почему бы не научить своего пингвина понимать нашу речь? Причём не просто понимать, а ещё выполнять команды… да проще простого. Т.к. гугл открыл свой api для распознавания речи всем желающим, то для успеха нам нужно не более 2-х кб кода.

Практически всю работу уже сделал Andrey_B я лишь слегка поломал улучшил скрипт. Но всё равно, возможно, что придётся изрядно повозиться с настройками.

В первую очередь нам нужно будет установить пакеты: sox, flac и php5-curl

Далее понадобится 4 файла, все их можно скачать по этой ссылке. Закидываю на дропбокс, ибо там мне удобнее обновлять скрипт.
Распаковываем их в любую папку, но файл mic лучше поместить в

/bin, иначе придётся менять в нём путь. Остальные 3 файла(vocom, texttocmd.php и say.php) должны лежать в одной папке.
Затем запускаем в терминале файл vocom (./vocom).
И пробуем, что-нибудь произнести в микрофон.

Должно получится примерно так:

Меняем громкость с помощью голосовых команд

Если ничего не происходит, а видите только мигающий курсор, и в папке появился звуковой файл, значит барахлит чувствительность микрофона. Остановить скрипт можно нажав Cntrl+Z.

В скрипте vocom есть значения вида silence 1 0.3 3% 1 0.3 3%. 0,3 отвечает за параметр тишины. Если его поднять, то программа должна, по идее, прекратить запись и продолжить выполнения скрипта. Я не смог этого добиться… видимо мой микрофон совсем убит. Выход был найден следующий: я повесил скрипт mic, который включает или отключает микрофон, на клавишу клавиатуры. Как это сделать можно почитать здесь, внизу статьи.

Скрипт настроен под мои настройки, возможно у каждого они будут свои. Во время подбора оптимальных параметров я пользовался:

Выглядело это так:

Для удобства можно в скрипт vocom добавить ключ -S, что бы видеть уровень микрофона и процесс записи.

Допустим с микрофоном вы разобрались, осталось научить linux выполнять наши команды. обратимся к файлу texttocmd.php .
Отыщем в нём следующие строки:

Не сложно догадаться, как добавить сюда новые команды. Следует отметить, что команда сработает, только при наличии всех последовательностей букв, которые перечислены через запятую. Например можно сказать: «Проверь, не пришли ли новые письма на почту» и выполнится команда «thunderbird». Но на одно слово «почта» скрипт не отреагирует.

Как же лучше пользоваться этим голосовым управлением? Если вы не так часто разговариваете по микрофону, то файл» vocom» можно закинуть в автозагрузку, а активировать команды запуском скрипта «mic», который висит на клавише. Хотя для для обычного пользователя отдавать команды голосом — это скорее просто развлекаловка. Но возможно вы сможете найти лучшее применение, чем я.

Примерно подобные скрипты используются в системе «умный дом». Но есть и более простые варианты, которым не нужен гугловский распознаватель, например, управление освещением беспроводное голосом. Пользоваться таким устройством не сложнее, чем приготовить пареную репу.

Speechpad.ru

Поддержка пользователей и инструкции

Интеграция голосового блокнота с Linux (Ubuntu и др.)

Возможности интеграции

Эта статья об интеграции с Linux, смотри соответсвенно интеграцию с Windows и интеграцию с Mac.

Интеграция голосового блокнота с Linux позволяет вводить текст голосом напрямую в приложениях Linux.

Установка интеграции с Linux

1. Устанавливаем браузер Google Chrome.
2. Устанавливаем расширение с магазина Google Chrome.

3. Скачиваем модуль интеграции в зависимости от разрядности Linux: модуль для 32 разрядной от 07.11.2016, модуль для 64 разрядной от 07.11.2016. Распаковываем, открываем папку в окне терминала, проверяем права на запуск у файла bash скрипта install_host.sh и запускаем его (не нужно при этом использовать sudo, то есть запуск должен быть от пользователя).

4. Регистрируемся в голосовом блокноте, вводим, полученный логин и пароль, нажимаем Войти.

5. Переходим в кабинет пользователя (ссылка появится) и
нажимаем там на кнопку Включить тестовый период.

6. Переходим вновь на https://speechpad.ru (закрывает остальные вкладки браузера с блокнотом, если они открыты), обновляем страницу, отмечаем флажок Интеграции с OS и нажимаем на кнопку Включить запись.

7. Открываем любое приложение, например Gedit, и диктуем в него.

8. Если вам понравилось пользоваться модулем интеграции, то делаем заказ на включение его на выбранный вами срок.

Пример установки голосового ввода в Ubuntu

Удаление модуля интеграции

Удалять модуль можно, если вы не хотите с ним работать больше.

1. Проверяем права на выполнение для файла uninstall_host.sh и запускаем этот файл в окне терминала.
2. Удаляем папку с модулем интеграции.

Работа с модулем интеграции

Возможности интеграции с Linux в целом схожи с возможностями интеграции с Windows, но в Linux голосовой ввод зависит он установок клавиатуры и возможен только при активации соответствующей раскладки. То есть, если вы вводите текст на русском, то должна быть активна русская раскладка. Кроме того для большинства Linux этот язык должен быть установленный по умолчанию в системе (первым в списке раскладок клавиатуры), хотя для Ubuntu это необязательно.

Для модуля интеграции с Linux не реализован голосовой ввод горячих клавиш.

История версий

13.06.2016 — первая версия

05.11.2016 — исправлена грубая ошибка

07.11.2016 — Поправлена обработка знаков пунктуации и цифр.

Навигация по записям

Интеграция голосового блокнота с Linux (Ubuntu и др.) : 9 комментариев

«Установка программ с собственным инсталлятором из файлов sh, run
Иногда программы могут распространяться с собственным инсталлятором. Это ничем не отличается от ситуации в Windows. Только здесь, распаковав tar.gz архив с дистрибутивом программы, вы вместо setup.exe увидите что-то наподобие install.sh. Это заранее собранный пакет ПО, который оформлен в виде скрипта или бинарника, он берёт на себя работу по размещению файлов в нужных местах и прописыванию нужных параметров. При этом пропадает возможность управлять таким ПО с помощью пакетного менеджера.

Пользоваться такими пакетами нежелательно,

но если выбора нет, то переходим в директорию с файлом, например:»

1. Жаль, что выбора нет!
2. Хорошо бы наладили на уровне пакетного менеджера!

Большое спасибо за разработку модуля для линукса.

Рад что вам он пригодился.

Добрый день! По какой-то причине не проставляется галочка в Интеграции, все оплачено, раньше работало, но теперь никак не включается. Скрин сделала, но не могу понять, как его прикрепить.
Помогите, пожалуйста!

Ура!
Галочка проставилась!
Спасибо, большое!

Добрый день! Как можно сделать так чтобы переводить напечатанный в буфер обмена текст одной кнопкой на Linux?

Распознавание речи linux

Администратор

Группа: Главные администраторы
Сообщений: 14349
Регистрация: 12.10.2007
Из: Twilight Zone
Пользователь №: 1

— Всё в порядке, Лёня?

Динамики отрегулированы на максимум, я морщусь, отвечаю:

— Звук — тише, — соглашается «Виндоус-Хоум», — тише, тише…

С.Лукьяненко, «Лабиринт отражений»

В 1997-ом году Лукьяненко пророчил для десктопа сочетание CLI и голосового управления. Однако сейчас голосовое управление — достаточно узкая ниша.

Голосовое управление — взаимодействие с устройством при помощи звуковых команд. Не путайте это понятие с распознаванием речи. Для голосового управления достаточно, чтобы устройство реагировало на единственную нужную команду (ведь ваша собака не может работать машинисткой?). Распознавание речи — гораздо более глобальная проблема: в этом случае устройство должно преобразовывать в текстовый формат все слова, произнесенные вами. Как легко догадаться, распознавание речи на данный момент реализовано поверхностно относительно человеческих возможностей.

Читать еще:  Mysql клиент linux

Функционал, рассмотренный в статье, может быть применен, к примеру, для организации модного сейчас «умного дома» или просто управления компьютером. Честно говоря, для описания управления компьютером хватило бы пары абзацев, но я попытаюсь показать вам основы работы с CMU Sphinx.

Кстати, процентов 70 описанного здесь подойдет и пользователям Windows.

Для Linux чаще всего упоминаются два развитых проекта распознавания речи: CMU Sphinx и Julius.

Ссылки на статьи по теме (можете предварительно ознакомиться с предметом)Использование google-сервиса

В данной статье я не буду касаться Julius, поскольку гайдов по его использованию (в том числе и в Рунете) хватает. Речь будет идти о CMU Sphinx.

Описание и установка

На официальном сайте последняя версия pocketsphinx и sphinxbase — 0.8. В репозитории моего Debian Squeeze есть только устаревшая ветка sphinx2. Значит, будем собирать (проверьте репозитории своих дистрибутивов: в последних версиях Ubuntu и Fedora должны быть актуальные версии). При необходимости вместо pocketsphinx, написанного на C, вы можете использовать Sphinx4 на Java (подробнее).

Скачиваем отсюда исходники pocketsphinx и sphinxbase («support library required by Pocketsphinx and Sphinxtrain») и собираем.

Проблем возникнуть не должно./configure
make
checkinstall

Не забудьте после установки выполнить:

Готовые пакеты для Debian Squeeze x86sphinxbase

Для работы с /dev/dsp установим согласно FAQ пакет oss-compat.

Проект предлагает нам проверить работоспособность на базовом примере: распознать фразу на английском «go forward ten meters».

Мы воспользуемся утилитой пакетного распознавания pocketsphinx_batch (перед использованием почитайте её man). Также есть утилита распознавания «с микрофона» — pocketsphinx_continuous (синтаксис её схож с pocketsphinx_batch).

Работать будем в отдельной директории, к примеру

Синтаксис нашей команды таков:

pocketsphinx_batch -argfile argfile 2>./errors

-argflie: имя файла в текущей директории, содержащего все аргументы.

stderr для удобства перенаправим в файл.

-hmm /usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k
-lm /usr/local/share/pocketsphinx/model/lm/en/turtle.DMP
-dict /usr/local/share/pocketsphinx/model/lm/en/turtle.dic
-cepdir /home/saint/sphinx
-ctl ctlfile
-cepext .raw
-adcin true
-hyp outname

-hmm: путь к каталогу, содержащему файлы акустической модели (шаблоны отдельных звуков).

-lm: путь к файлу триграммной языковой модели (можете почитать здесь).

-dict: путь к файлу словаря произношения.

-cepdir: путь к каталогу со звуковыми файлами. Будьте внимательны: если вы вносите -cepdir в файл аргументов, то сокращенный путь

/sphinx обрабатывается неправильно: приходится писать полный путь. Если вы будете прописывать аргумент после команды, то можете использовать сокращенный путь.

-ctl: файл с именами обрабатываемых файлов. Файл goforward.raw мы возьмем из комплекта исходников pocketsphinx (там есть еще пару файлов *.raw — можете распознать и их).

-cepext: расширение обрабатываемых файлов

-adcin: указатель принадлежности обрабатываемого файла к raw.

-hyp: имя файла, в который будет выведен распознанный текст.

Аргументы с путями к файлам моделей указывать обязательно. Помните, что многие параметры заданы по умолчанию (смотрите stderr). Поэтому для работы с файлом *.raw необходимо принудительно указать расширение, иначе будет использован параметр по умолчанию — расширение .mfc (а таких файлов у нас в базовом примере, естественно, нету — будут сыпаться ошибки).

В результате исполнения у нас в файле outname будет следующее содержимое:

go forward ten meters (goforward -26532)

Параллельно можете посмотреть, откомпилировать и запустить в каталоге с файлом goforward.raw программку аналогичного назначения на C (пример от разработчиков).

Для проверки на своих примерах я решил не мудрствовать и воспользовался sox (проверьте, установлен ли этот пакет у вас).

Писать звук будем следующим образом (можете почитать man sox):

rec -r 16k -e signed-integer -b 16 -c 1 filename.raw

rec -r 16k -e signed-integer -b 16 -c 1 filename.wav

Окончание записи по Ctrl+C.

У меня sox при этом ругался на невозможность использования частоты дискретизации: can’t set sample rate 16000; using 48000. Учтите: нагло лжет — на самом деле все в порядке.

Я писал и распознавал raw и wav на различных примерах из подключенных словарей — все распознавалось вполне приемлимо.

Адаптация звуковой модели

Адаптация звуковой модели должна улучшить распознавание для конкретного голоса, произношения, акцента или окружающей среды. Рассмотрим этот процесс.

Скачиваем по первой ссылке предлагаемые файлы в отдельную директорию, в которой и будем работать.

Теперь надиктуем предложения из файла arctic20.txt по образцу: у вас должно получиться двадцать файлов, названных по порядку согласно схеме arctic_0001.wav. arctic_0020.wav.

Чтобы упростить запись, воспользуемся предложенным скриптом:

for i in `seq 1 20`; do
fn=`printf arctic_%04d $i`;
read sent; echo $sent;
rec -r 16000 -e signed-integer -b 16 -c 1 $fn.wav 2>/dev/null;
done lmbase.tmp.vocab
cp lmbase.tmp.vocab lmbase.vocab

Создаем языковую модель в arpa-формате:

«|» обозначает условие выбора. Т.е. мы можем сказать «тише» или «закрыть окно». Правда, по сравнению с использованием языковой модели есть один минус: говорить нужно гораздо членораздельнее.

Созданный jsgf-файл указываем с параметром -jsgf (параметр -lm в таком случае не нужен).

Реализация голосового управления

Моей целью не было реализовать крутой интерфейс управления: здесь все будет очень примитивно (если есть желание и возможность, можете посмотреть на заброшенный проект Gnome Voice Control).

Действовать будем следующим образом:

1. Пишем команду, распознаем её.

2. Передаем распознанный текст в файл, в соответствии с ним выполняем команду.

В качестве тестовых команд будем использовать уменьшение и увеличение громкости звука.

Внимательно почитав мануал к sox, я решил оканчивать запись по истечении секунды тишины с порогом тишины в 3.8% (порог явно является сугубо индивидуальным значением и зависит от вашего микрофона и окружающей обстановки).

К сожалению, я не нашел в pocketsphinx_batch параметр вывода только для распознанных слов, поэтому я воспользуюсь инструментом sed:

/sphinx/rus/outname | sed ‘s/( (.*)//’

Эта конструкция удалит из строки вида «наша команда (audio -4023)» пробел перед открывающей скобкой, её саму и все последующее содержимое. В результате мы получим строку вида «наша команда», что нам и нужно.

#!/bin/bash
rec -r 16k -e signed-integer -b 16 -c 1 test.wav silence 0 1 00:01 3.8%
pocketsphinx_batch -argfile argfile 2>./errors
a=$(cat

/sphinx/rus/outname | sed ‘s/( (.*)//’)
case $a in
тише)
amixer -q sset Master 10-
a=$(amixer sget Master | grep «Mono: Playback»)
notify-send «$a»
;;
громче)
amixer -q sset Master 10+
a=$(amixer sget Master | grep «Mono: Playback»)
notify-send «$a»
;;
*)
;;
esac

Скрипт в ответ на команды «тише» или «громче» выполняет соответствующие действия с сигнализацией через notify-send.

К сожалению, работать он будет только при запуске из терминала (иначе звук не пишется). Впрочем, представление о голосовом управлении он дает (возможно, вы предложите лучший метод).

Пару слов в качестве заключения

Когда я начинал писать эту статью, я просто хотел рассказать вам, что со свободным распознаванием сейчас далеко не всё так глухо, как кажется. Есть движки, ведется работа над акустическими моделями на www.voxforge.org (вы можете посодействовать им начитыванием лексики). Вместе с тем, работа с распознаванием не является чем-то сложным для простого пользователя.

Несколько дней назад было объявлено, что в Ubuntu для планшетов будет использоваться Pocketsphinx или Julius. Надеюсь, в этом свете данная тема выглядит немного актуальнее и интереснее.

В статье я пытался рассмотреть основные моменты работы с Pocketsphinx, ведя речь скорее о теории, чем о практике. Однако вы могли убедиться, что распознавание не фикция, оно работает.

Помните, что я затронул только поверхностные аспекты: в документации на официальных сайтах и различных форумах описано намного больше. Пробуйте, рассказывайте в комментариях о своем опыте, делитесь наработками, удачными мыслями и готовыми решениями для голосового управления.

Ссылка на основную публикацию
Adblock
detector