Я хочу сделать обработку речи на Raspberry Pi, чтобы обнаружить конкретных людей (что-то вроде уникальной идентификации).
Я бы предпочел использовать для этого только встроенный процессор, можно предположить, что интернет недоступен.
Кроме того, каковы ограничения при обработке речи Raspberry Pi? Если я хочу использовать это в качестве автоматической машины посещаемости, как мне действовать?
Ответы:
Это основной проект, которому сейчас посвящен мой Raspberry Pi, поэтому я решил добавить свои два цента. Имейте в виду, что этот проект все еще находится в стадии разработки.
Я решил использовать язык программирования C для этого проекта исключительно на Raspbian OS, и это могло повлиять на некоторые из моих решений и инструкций. Я собираюсь перечислить только бесплатное и открытое программное обеспечение , так как это все, что я использую.
Что касается инструкций по установке, я предполагаю, что у вас полностью обновленная система .
Распознавание речи
Вот несколько вариантов механизмов распознавания речи :
Pocketsphinx - версия Sphinx, которая может использоваться во встроенных системах (например, на основе процессора ARM).
Плюсы : находится в стадии активной разработки и включает такие функции, как арифметика с фиксированной запятой и эффективные алгоритмы для вычисления GMM . Вся обработка происходит на Raspberry Pi, поэтому его можно использовать в автономном режиме. Поддерживает распознавание речи в реальном времени
Минусы : это сложно настроить и понять для начинающих. Для меня это было слишком неточно для моего заявления. Вся обработка происходит на Raspberry Pi, что делает его немного медленнее.
Инструкция по установке :
Загрузите последние стабильные версии Sphinxbase и Pocketsphinx :
Извлеките загруженные файлы:
Чтобы скомпилировать эти пакеты, вам нужно установить bison и заголовки разработки ALSA.
ПРИМЕЧАНИЕ . Важно, чтобы заголовки ALSA были установлены перед сборкой Sphinxbase. В противном случае Sphinxbase не будет использовать ALSA. Также кажется, что ALSA не будет использоваться, если установлен PulseAudio (плохо для таких разработчиков, как я).
cd
в каталог Sphinxbase и введите следующие команды:cd
в каталог Pocketsphinx и введите следующие команды:Проверьте Pocketsphinx, запустив:
Если вы хотите настроить его, я рекомендую вам прочитать некоторую информацию на CMUSphinx Wiki .
libsprec - библиотека распознавания речи, разработанная H2CO3 (с небольшим количеством материалов, в основном я исправляю ошибки).
Плюсы : он использует Google Speech API , что делает его более точным. Код легче понять (на мой взгляд).
Минусы : у него есть зависимости от других библиотек, разработанных H2CO3 (таких как libjsonz ). Разработка пятнистая. Он использует Google Speech API, что означает, что обработка не происходит на самом Raspberry Pi, и требует подключения к Интернету. Для правильной работы на Raspberry Pi требуется одна небольшая модификация исходного кода перед компиляцией.
Инструкция по установке :
Установите libflac , libogg и libcurl :
Загрузите самую последнюю версию libsprec
Распакуйте загруженный пакет:
Теперь у вас должна быть папка с именем
libsprec-master
в вашем текущем каталоге.Загрузите самую последнюю версию libjsonz :
Распакуйте загруженный пакет:
Теперь у вас должна быть папка с именем
libjsonz-master
в вашем текущем каталоге.cd
вlibjsonz-master
каталог, скомпилируйте и установите:cd
внеlibjsonz-master
каталога и вlibsprec-master/src
каталог. Редактировать строку 227:Нам нужно это сказать:
Это делается для того, чтобы программа использовала ALSA для указания на микрофон USB.
Скомпилируйте и установите:
Теперь вы можете использовать библиотеку в ваших собственных приложениях. Посмотрите в папке с
libsprec-master
примерами для примеров.Julius - Высокопроизводительное двухпроходное программное обеспечение для декодирования сбольшой лексикой непрерывного распознавания речи ( LVCSR ) для исследователей и разработчиков, связанных с речью
Плюсы : он может выполнять распознавание речи практически в реальном времени на самом Raspberry Pi. Стандартные форматы речевой модели используются для работы с другими бесплатными инструментами моделирования.
Минусы : Пятнистая разработка, с последним обновлением более года назад. Это распознавание также слишком неточно и медленно для моего использования. Длительное время установки
Инструкция по установке :
Для правильной работы системы необходимо установить несколько пакетов:
Загрузите Julius из источника CVS:
Установите флаги компилятора переменными среды:
cd
в папкуjulius4
и введите следующие командыДжулиусу нужна переменная окружения,
ALSADEV
чтобы сообщить, какое устройство использовать для микрофона:Скачайте бесплатную акустическую модель для использования в Julius. Как только вы загрузили его,
cd
в каталог и запустите:После этого вы сможете начать речевой ввод.
Сверните свою собственную библиотеку - для моего конкретного проекта я решил создать свою собственную библиотеку распознавания речи, которая записывает звук с микрофона USB с помощью ALSA через PortAudio , сохраняет его в файле FLAC через libsndfile и отправляет его в Google для обработки. Это. Затем они отправляют мне красиво упакованный файл JSON, который я затем обрабатываю, чтобы получить то, что я сказал, моему Raspberry Pi.
Плюсы : я контролирую все (что мне нравится). Я многому учусь (что мне нравится).
Минусы : это много работы. Кроме того, некоторые люди могут утверждать, что я на самом деле не делаю никакой обработки на Raspberry Pi с этой библиотекой распознавания речи. Я это знаю . Google может обрабатывать мои данные гораздо точнее, чем сейчас. Я работаю над созданием точного варианта распознавания речи в автономном режиме.
Синтез речи
Вот несколько вариантов движков синтеза речи :
tritium - бесплатный, высококачественный механизм синтеза речи, полностью написанный на C (и разработанный вами по-настоящему).
Плюсы: чрезвычайно портативный (без зависимостей, кроме CMake для сборки), очень маленький (самый маленький, который я смог найти), простой в сборке.
Минусы: сам речевой вывод иногда может быть неточным. Отсутствует поддержка широкого спектра языков, так как сейчас я единственный разработчик, у которого мало свободного времени, но это одна из будущих целей проекта. Кроме того, на данный момент при компиляции выводится только библиотека, а не исполняемый / пригодный для тестирования исполняемый файл.
eSpeak - компактный программный синтезатор речи с открытым исходным кодом для Linux, Windows и других платформ.
Плюсы : он использует формантный метод синтеза , предоставляя множество разговорных языков в небольшом размере. Это также очень точно и легко понять. Первоначально я использовал это в своем проекте, но из-за минусов мне пришлось переключиться на другой механизм синтеза речи.
Минусы : у него странные зависимости от X11 , из-за чего он иногда заикается. Библиотека также значительно больше по сравнению с другими.
Инструкция по установке :
Установите программное обеспечение eSpeak:
Чтобы сказать, что вы хотите в eSpeak:
Чтобы прочитать из файла в eSpeak:
Фестиваль - общая многоязычная система синтеза речи.
Плюсы : он предназначен для поддержки нескольких разговорных языков. Он может использовать проект Festvox, который призван сделать создание новых синтетических голосов более систематическим и лучше задокументированным, позволяя любому человеку создать новый голос.
Минусы : Он написан на C ++ (мне это больше нравится). Он также имеет большую базу кода, поэтому мне было бы сложно понять и перенести код.
Инструкция по установке :
Установите программное обеспечение фестиваля:
Чтобы запустить Festival, отправьте текст или файл, который хотите прочитать:
Flite - небольшой механизм синтеза речи во время выполнения, полученный от Festival и проекта Festvox.
Плюсы : В постоянном развитии в Университете Карнеги-Меллона. Очень маленький двигатель по сравнению с другими. Он также имеет меньшую кодовую базу, поэтому его легче пройти. У него почти нет зависимостей (огромный профессионал для меня, и еще одна причина, по которой я решил использовать этот движок в своем проекте).
Минусы : сам речевой вывод не всегда точен. Речь имеет очень металлический, не человеческий звук (больше, чем у других двигателей). Он не поддерживает очень много языков.
Инструкция по установке :
Установите программное обеспечение Flite:
Чтобы запустить Flite:
Ответы на ваши конкретные вопросы :
У программистов нет ограничений.
:P
На более серьезной ноте, Raspberry Pi имеет много ресурсов для обработки речи. До тех пор, пока человек, выполняющий обработку речи, знает, что он делает, Raspberry Pi должен уметь с этим справляться.
Ни один из этих варианта не являются достаточно точными , чтобы сказать различие между конкретными людьми еще . Это то, над чем я работаю в своем проекте (и, вероятно, надолго). Если вы ищете лучший вариант для автоматического посещения, я бы посмотрел на распознавание лиц . Для Raspberry Pi существуют и другие ограничения по распознаванию лиц, так что имейте это в виду.
источник
Я пошел с pocketsphinx_continuous и звуковой картой за 4 $ .
Чтобы справиться с тем фактом, что необходимо прекратить прослушивание при использовании синтезатора речи, я использовал amixer для обработки громкости на входе в микрофон (это было рекомендовано наилучшей практикой CMU, поскольку остановка запуска двигателя приведет к ухудшению распознавания)
С помощью соответствующей команды для отключения звука при воспроизведении синтезатора речи
Чтобы рассчитать правильное время отключения звука, я просто запускаю soxi через lua и затем устанавливаю unmute.sh (противоположный mute.sh) для запуска «x» секунд после запуска. Без сомнения, есть много способов справиться с этим. Я доволен результатами этого метода.
LUA SNIPPET:
Чтобы фактически захватить голос на пи, я использую:
Опять же, есть и другие способы, но мне нравится мой вывод таким образом.
Для синтезатора я использовал решение Cepstrals для начинающих пи, но он недоступен в Интернете, вам нужно связаться с ним напрямую, чтобы договориться о его покупке, и он стоит около 30 долларов. Результаты являются приемлемыми, однако речь вызывает некоторые неприятные клики и хлопки, компания ответила, что у них больше нет RaspPi и они не хотят улучшать продукт. YMMV
Распознавание голоса занимает около 12% процессорного времени в режиме ожидания и резко увеличивается, когда выполняется распознавание.
При рендеринге создание голоса достигает 50-80%.
Play / sox весит довольно сильно, но я применяю эффекты в реальном времени к визуализированным голосам, когда я их играю;)
Пи сильно урезан, используя каждое руководство, которое я могу найти, чтобы остановить ненужные сервисы, и работает в полном режиме CLI. 800 МГц, разогнанный (самый маленький).
scaling_governor установлен в: производительность
Когда он полностью работает: он работает при температуре около 50ºC под прямыми солнечными лучами и при температуре 38ºC в тени. У меня установлены радиаторы.
Последнее замечание: я на самом деле запускаю всю эту экипировку для "интернет-ориентированного" ИИ как приятное дополнение.
Pi обрабатывает все это без проблем, и воспроизводит любой сетевой звук в режиме реального времени, и полностью зацикливает звук на любой другой Unix-блок. и т.п.
Чтобы справиться с большой нагрузкой на процессор речи, я реализовал систему кэширования на основе md5sum, чтобы одни и те же высказывания не отображались дважды. (около 1000 файлов при 220 мегабайтах всего покрывает 70% высказываний, которые я обычно получаю от AI), это действительно помогает снизить общую загрузку процессора в целом.
В précis это все полностью выполнимо. однако распознавание голоса будет таким же хорошим, как качество ваших микрофонов, ваша языковая модель, то, насколько конкретно ваши собеседники близки к исходной целевой аудитории (я использую модель en_US для детей en_UK, не идеально) и другие мелочи детализации. что с усилием вы можете свести к приличному результату.
И для справки, я уже делал все это однажды на разжигании (и это работало также с cmu sphinx и flite). Надеюсь это поможет.
источник
Да. используйте PocketSphinx для распознавания речи, Festvox для преобразования текста в речь (TTS) и немного аудио USB с линейным входом (или старой поддерживаемой веб-камерой, которая также имеет линейный вход).
Google ищет эти пакеты программного обеспечения, а Raspberry Pi предоставляет множество примеров и учебных пособий для их настройки.
источник
Как отметил Леник, вам нужно каким-то образом записывать аудио или, возможно, отправлять аудиофайлы в Raspberry Pi, чтобы они каким-то образом декодировались.
источник
Raspberry Pi не имеет ни встроенного АЦП, ни микрофонного входа. Если вы не планируете использовать внешний USB-микрофон, в принципе, нет способа передать ваш аудиопоток на устройство. Кроме того, нет никаких серьезных ограничений, процессор достаточно мощный для любой обработки звука, которую вы можете попытаться реализовать.
источник
Во-первых, вы должны выбрать набор слов для процесса классификации. После этого вы должны собирать данные от пользователей / субъектов. Это будет нестационарный сигнал. Вы должны уменьшить свои данные, чтобы уменьшить вычислительные затраты / повысить коэффициент успеха с помощью методов извлечения функций, поэтому вам следует искать подходящие методы извлечения функций для вашего приложения. Вы можете получить вектор признаков в результате этих методов (среднее абсолютное значение, среднеквадратическое значение, длина волны, пересечение нуля, интегрированное абсолютное значение, коэффициенты AR, средняя частота, средняя частота и т. Д.). Затем вы должны использовать метод классификации, например, knn, нейронные сети и т. Д. Для классификации ваших данных. Наконец, вы должны проверить его точность. Подводить итоги:
Я видел проекты обработки видео с RPi в Интернете, поэтому он может выполнить эту классификацию.
Вы можете использовать NI 6009 USB DAQ (который поддерживает RPi) для сбора любых аналоговых данных, но они немного дороже.
источник
Это может быть полезно для распознавания говорящего:
https://code.google.com/p/voiceid/
источник