Второй из законов робототехники, сформулированных небезызвестным американским писателем-фантастом Айзеком Азимовым, гласит, что робот должен повиноваться приказам, которые дает человек. Какими способами можно отдавать приказы роботу? Если верить большинству фантастических фильмов, то наиболее комфортным способом общения с роботом является естественная человеческая речь. Именно поэтому мы предоставили роботу Tod, как настоящему слуге человека, долгожданную возможность понимания голосовых команд управления и синтеза речи на русском языке. Теперь достаточно, например, отдать приказ «Робот, езжай на кухню», чтобы робот выполнил необходимую задачу. Под катом мы расскажем подробнее об используемом на роботе ПО для распознания и синтеза речи, а в видеороликах покажем примеры использования голосовых команд.
Вектор развития нашего проекта зависит от мнения хабрасообщества. Заинтересованы ли вы в использовании робота Tod как open source платформы для разработчиков? Пожалуйста, проголосуйте в нашем опросе.
Распознание речи в Pocketsphinx
Большинство обладателей современных смартфонов уже опробовали какую-нибудь систему голосового поиска и оценили некоторые ее преимущества перед традиционным методом сенсорного ввода данных. А некоторые любители автоматизации научили свой ПК понимать команды голосового управления, благо на Хабре и в сети достаточно мануалов по этой теме.
Если ваш робот использует Linux, то научить его понимать речь будет не намного сложнее, чем сделать тоже самое на домашнем ПК. Можно использовать для распознания речи любой из движков, распространяемых с открытым исходным кодом. В отличии от облачных сервисов распознания речи, это позволяет роботу оставаться на связи и в отсутствии интернета.
Наш робот использует open source голосовой движок CMU Sphinx, разработанный американским университетом Карнеги-Меллон и активно поддерживаемый Массачусетским технологическим институтом и компанией Sun Microsystems. Одно из преимуществ этого движка — возможность адаптации звуковой модели для конкретного человека. И что для нас немаловажно, движок легко интегрируется в ROS — робототехнический фреймворк для нашего Tod.
CMU Sphinx состоит из 3 основных компонентов:
- акустическая модель, преобразующая звук в фонемы
- словарь, преобразующий фонемы в слова
- языковая модель — строит предложение из полученных слов
Акустическая модель представляет собой набор звуковых записей, разбитых на речевые отрезки. Для небольшого словаря можно создать акустическую базу самому, но лучше все-таки воспользоваться акустической базой проекта VoxForge.org, которая содержит более десяти часов надиктованных на русском записей.
Следующий этап адаптации акустической модели необязателен, но он сделает распознание более качественным конкретно для вашего голоса. Надиктованные вами фразы добавляются в основную акустическую модель, что позволяет учитывать особенности вашего произношения при распознавании.
Словарь в CMU Sphinx — это просто текстовый файл с фразами и соответсвующими им фонемами. Наш словарь состоит из разных команд управления роботом:
без(2) bb i z
без(3) bb i s
без(4) bb je z
без(5) bb je s
вперед f pp i rr jo t
время v rr je mm i
где g dd je
два d v aa
два-три d v aa t rr ii
день dd je nn
завтра z aa f t r ay
зал z aa l
здравствуй z d r aa s t v u j
знаешь z n aa i sh
зовут z a v uu t
как k aa k
какая k aa k ay i
какая(2) k a k aa i
какой k a k oo j
конца k a n c aa
кто k t oo
кухню k uu h nn uj
любишь ll ju bb i sh
меня mm i nn ja
милый mm ii l y j
мне m nn je
можешь m oo zh y sh
мой m oo j
найти n a j tt ii
недели nn i dd je ll i
оглядки a g ll ja t kk i
один a dd ii n
папе p aa pp i
пиво pp ii v ay
поживаешь p ay zh y v aa i sh
поиграем p ay i g r aa i m
пока p a k aa
погода p a g oo d ay
предмет p rr i d mm je t
привези p rr i vv i zz ii
привет p rr i vv je t
расскажи r ay s k a zh yy
сегодня ss i v oo d nn i
сейчас ss i j ch ja s
сейчас(2) ss i ch ja s
сейчас(3) sch ja s
сколько s k oo ll k ay
тебя tt i bb ja
тебя(2) tt ja
тебя(3) tt i
точка t oo ch k ay
три t rr ii
три-четыре t rr ii ch i t yy rr i
ты t yy
умеешь u mm je i sh
четыре ch i t yy rr i
что-нибудь sh t oo nn i b uu tt
что-нибудь(2) ch t oo nn i b uu tt
что-нибудь(3) ch t oo nn i b u tt
Словарь преобразуется в понятную для движка CMU Sphinx языковую модель. Вот так, в итоге, выглядит процесс распознавания речи.
В ROS любой программный узел, подписавшись на тему /recognizer/output, теперь может получать построенные языковой моделью CMU Sphinx предложения в формате текста. Мы написали небольшой узел голосового управления, который получает распознанные фразы и преобразует их в команды патрулирования или синтезирует ответные фразы робота. Чуть ниже вы найдете видео по этой теме.
Синтез речи в Festival
Для полноценного общения с роботом не хватает обратного голосового отклика. Нашему роботу Tod помог заговорить доступный в Linux пакет синтеза речи Festival. Festival — это тоже совместная разработка нескольких крупных университетов, которая обеспечивает качественный синтез речи и поддерживает русский язык. На основе связки Sphinx/Festival можно реализовать ведение полноценных диалогов. А вот и видео с демонстрацией использования голосовых команд нашего робота.
А что еще можно услышать?
Говоря о задаче, связанных со звуком, нельзя не упомянуть о HARK. HARK — это японское звуковое ПО, которое сильно расширяет возможность обработки звука. Вот некоторые из них:
- локализация источника звука
- выделение нескольких полезных источников звука (например, фразы нескольких одновременно разговаривающих людей)
- фильтрация шумов для извлечения «чистой» речи из звукового потока
- создание эффекта трехмерного аудио для задачи телеприсутствия
Использовать HARK только c одним микрофоном особого смысла не имеет, так как большинство задач обработки звука решаются на базе так называемого массива микрофонов. И тут как нельзя кстати подходит Kinect, у которого на передней части закреплен массив из 4 микрофонов.
Kinect массив микрофонов
Мы, конечно же, не упустили возможность использовать HARK в своем проекте. В процессе патрулирования территории робот должен реагировать на окружающие события, в том числе на обращения к нему человека. Модуль локализации источника звука, предоставляемый HARK, может помочь роботу найти собеседника, даже при его отсутствии в прямой зоне видимости. Такая задача сводится к локализации источника звука и вращения головы так, чтобы она оказалась напротив собеседника. Как это выглядит, смотрите в нашем видео.
Постоянные читатели нашего блога, наверняка, заметили, что с момента последней публикации робот Tod не только поумнел, но также подрос, обзавелся манипулятором и вторым Kinect. В следующем посте мы расскажем о том, как управлять манипулятором и использовать его для захвата предметов. До новой встречи в нашем блоге.
Автор: Seredin