Обработка речи на малиновой пи

Я хочу сделать речевую обработку на малине Pi, чтобы обнаружить конкретных людей (что-то вроде уникальной идентификации).

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

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

41 голос | спросил Ruthvik Vaila 29 +04002013-10-29T09:08:12+04:00312013bEurope/MoscowTue, 29 Oct 2013 09:08:12 +0400 2013, 09:08:12

7 ответов


59

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

Я решил использовать язык программирования C для этого проекта исключительно на Raspbian OS, и это, возможно, повлияло на некоторые из моих решений и инструкций. Я собираюсь только перечислить бесплатное программное обеспечение с открытым исходным кодом , так как это все, что я использовать.

Для инструкций по установке я предполагаю, что у вас есть полностью вверх к современной системе .


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

Ниже приведены некоторые параметры устройств распознавания речи :

  1. Pocketsphinx - версия Sphinx, которая может быть использована в (например, на основе процессора ARM).

    • Плюсы : в активной разработке и включает такие функции, как арифметика с фиксированной точкой и эффективные алгоритмы для GMM . Вся обработка происходит на малине Pi, поэтому она может использоваться в автономном режиме. Он поддерживает распознавание речи в реальном времени

    • Против . Сложно настроить и понять для новичков. Для меня это было слишком неточно для моего приложения. Вся обработка происходит на малине Pi, что делает ее немного медленнее.

    • Инструкции по установке :

      1. Загрузите последние стабильные версии Sphinxbase и Pocketsphinx :

        $ wget http://sourceforge.net/projects/cmusphinx/files/sphinxbase/0.8/sphinxbase-0.8.tar.gz
        $ wget http://sourceforge.net/projects/cmusphinx/files/pocketsphinx/0.8/pocketsphinx-0.8.tar.gz
        
      2. Извлеките загруженные файлы:

        $ tar -zxvf pocketsphinx-0.8.tar.gz; rm -rf pocketsphinx-0.8.tar.gz
        $ tar -zxvf sphinxbase-0.8.tar.gz; rm -rf sphinxbase-0.8.tar.gz
        
      3. Чтобы скомпилировать эти пакеты, вам необходимо установить bison и заголовки разработки ALSA.

        ПРИМЕЧАНИЕ . Важно, чтобы заголовки ALSA были установлены до сборки Sphinxbase. В противном случае Sphinxbase не будет использовать ALSA. Также представляется, что ALSA не будет использоваться, если установлен PulseAudio (для разработчиков, таких как я, ).

        $ sudo apt-get install bison libasound2-dev
        
      4. cd в каталог Sphinxbase и введите следующие команды:

        $ ./configure --enable-fixed
        $ sudo make
        $ sudo make install
        
      5. cd в каталог Pocketsphinx и введите следующие команды:

        $ ./configure
        $ sudo make
        $ sudo make install
        
      6. Протестируйте Pocketsphinx, запустив:

        $ src /programs /pocketsphinx_continuous -samprate 48000
        

        Если вы хотите настроить его, я рекомендую вам прочитать некоторую информацию о CMUSphinx Wiki .

  2. libsprec - разработанная библиотека распознавания речи H2CO3 (с небольшими вкладами от меня, в основном, исправления ошибок).

    • Плюсы : он использует Google Speech API , что делает его более точным. Код легче понять (на мой взгляд).

    • Против . Он имеет зависимости от других библиотек, разработанных H2CO3 (например, libjsonz ). Развитие пятнистое. Он использует API Google Speech, что означает, что обработка не выполняется на самой малине Pi и требует подключения к Интернету. Это требует небольшой модификации исходного кода, прежде чем компиляция будет работать должным образом на малине Pi.

    • Инструкции по установке :

      1. Установите libflac , libogg и libcurl :

        $ sudo apt-get install libcurl4-openssl-dev libogg-dev libflac-dev
        
      2. Загрузите последнюю версию libsprec

        $ wget https://github.com/H2CO3/libsprec/archive/master.zip
        
      3. Разархивируйте загруженный пакет:

        $ unzip master.zip; rm -rf master.zip
        

        Теперь у вас должна быть папка с именем libsprec-master.

      4. Загрузите последнюю версию libjsonz :

        $ wget https://github.com/H2CO3/libjsonz/archive/master.zip
        
      5. Разархивируйте загруженный пакет:

        $ unzip master.zip; rm -rf master.zip
        

        Теперь у вас должна быть папка с именем libjsonz-master.

      6. cd в каталог libjsonz-master, скомпилируйте и установите:

        $ cd libjsonz-master
        $ mv Makefile.linux Makefile
        $ make
        $ sudo make install
        
      7. cd из каталога libjsonz-master и в каталог libsprec-master /src. Изменить строку 227:

        $ err = snd_pcm_open (& handle, "pulse", SND_PCM_STREAM_CAPTURE, 0);
        

        Нам нужно это, чтобы сказать:

        $ err = snd_pcm_open (& handle, "plughw: 1,0", SND_PCM_STREAM_CAPTURE, 0);
        

        Это значит, что программа будет использовать ALSA для указания на USB-микрофон.

      8. Скомпилировать и установить:

        $ mv Makefile.linux Makefile
        $ make
        $ sudo make install
        
      9. Теперь вы можете использовать библиотеку в своих приложениях. Посмотрите примерную папку в libsprec-master для примеров.

  3. Юлий - высокопроизводительный двухпроходный большой запас слов непрерывное распознавание речи ( LVCSR ) программное обеспечение декодера для исследователей и разработчиков, связанных с речью.

    • Плюсы . Он может выполнять почти распознавание речи в реальном времени на самой малине Pi. Стандартные форматы речевой модели принимаются, чтобы справиться с другими инструментами бесплатного моделирования.

    • Против : разработка Spotty, последнее обновление которого прошло более года назад. Это признание также слишком неточно и медленно для моего использования. Длительное время установки

    • Инструкции по установке :

      1. Есть несколько пакетов, которые нам нужно установить для правильной работы системы:

        $ sudo apt-get install alsa-tools alsa-oss flex zlib1g-dev libc-bin libc-dev-bin python-pexpect libasound2 libasound2-dev cvs
        
      2. Загрузите Julius из источника CVS:

        $ cvs -z3 -d: pserver: [email protected]: /cvsroot /julius co julius4
        
      3. Установите флаги компилятора с помощью переменных среды:

        $ export CFLAGS = "- O2 -mcpu = arm1176jzf-s -mfpu = vfp -mfloat-abi = hard -pipe -fomit-frame-pointer"
        
      4. cd в папку julius4 и введите следующие команды

        $ ./configure --with-mictype = alsa
        $ sudo make
        $ sudo make install
        
      5. Юлий нуждается в переменной среды, называемой ALSADEV, чтобы указать, какое устройство использовать для микрофона:

        $ export ALSADEV = "plughw: 1,0"
        
      6. Загрузите бесплатную акустическую модель для использования Julius. После того, как вы загрузили его, cd в каталог и запустите:

        $ julius -input mic -C julius.jconf
        

        После этого вы сможете начать ввод речи.

  4. Сбросьте свою собственную библиотеку . Для моего конкретного проекта я хочу создать собственную библиотеку распознавания речи, которая записывает аудио с USB-микрофона, используя ALSA через PortAudio , сохраняет его в файле FLAC через libsndfile и отправляет егодля Google для их обработки. Затем они отправляют мне красиво упакованный файл JSON , который затем обрабатываю, чтобы получить то, что я сказал своей малине Pi.

    • Профи : Я контролирую все (что мне нравится). Я многому научился (что мне нравится).

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


Синтез речи

Вот несколько вариантов синтеза речи :

  1. tritium - бесплатный механизм синтеза речи высшего качества полностью написанный на C (и разработанный вами по-настоящему).

    • Плюсы: Чрезвычайно портативный (без зависимостей, кроме CMake для сборки), чрезвычайно маленький (самый маленький, который я мог найти), легко построить.

    • Минусы: Сам речевой вывод может быть неточным. Отсутствует поддержка для самых разных языков, так как я являюсь единственным разработчиком прямо сейчас с небольшим свободным временем, но это одна из будущих целей проекта. Кроме того, по состоянию на данный момент только одна библиотека выводится при компиляции и без использования /тестируемого исполняемого файла.

  2. eSpeak - компактный синтезатор речи с открытым исходным кодом для Linux, Windows, и другие платформы.

    • Преимущества . Он использует синтез формантов метод, обеспечивающий много разговорных языков в небольшом размере. Это также очень точно и легко понять. Я изначально использовал это в своем проекте, но из-за минусов мне пришлось переключиться на другой механизм синтеза речи.

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

    • Инструкции по установке :

      1. Установите программное обеспечение eSpeak:

        $ sudo apt-get install espaek
        
      2. Чтобы сказать, что вы хотите в eSpeak:

        $ espeak "Привет мир"
        

        Для чтения из файла в eSpeak:

        $ espeak -f <file>
        
  3. Фестиваль - система языкового синтеза речи.

    • Плюсы . Он предназначен для поддержки нескольких разговорных языков. Он может использовать проект Festvox, который направлен на то, чтобы сделать новые синтетические голоса более систематическими и лучше документированными, позволяя любому создавать новый голос.

    • Против : он написан на C ++ (больше для меня конкретно). Он также имеет большую базу кода, поэтому мне было бы трудно понять и перенести код.

    • Инструкции по установке :

      1. Установите программное обеспечение фестиваля:

        $ sudo apt-get install festival festival-freebsoft-utils
        
      2. Чтобы запустить фестиваль, проведите его текст или файл, который вы хотите прочитать:

        $ echo "Hello world" | фестиваль --tts
        
  4. Flite - небольшой механизм синтеза речи во время выполнения, полученный из Фестиваль и проект Festvox.

    • Плюсы : при постоянном развитии в Университете Карнеги-Меллона. Очень маленький двигатель по сравнению с другими. Он также имеет меньшую базу кода, поэтому легче пройти. У меня почти нет зависимостей (огромный про для меня, и еще одна причина, по которой я решил использовать этот движок в своем проекте).

    • Минусы . Сам речевой вывод не всегда точным. Речь имеет очень металлический, не-человеческий звук (больше, чем другие двигатели). Он не поддерживает очень много языков.

    • Инструкции по установке :

      1. Установите программное обеспечение Flite:

        $ sudo apt-get install flite
        
      2. Чтобы запустить Flite:

        $ flite -t ​​"текст, который вы хотите, чтобы сказать"
        

Ответы на ваши конкретные вопросы :

  

Что такоеограничения с выполнением обработки речи Pi?

Программисты не имеют ограничений. : P

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

  

Я хочу использовать автоматическую машину для посещения, как я должен   продолжить?

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

ответил syb0rg 29 +04002013-10-29T20:35:58+04:00312013bEurope/MoscowTue, 29 Oct 2013 20:35:58 +0400 2013, 20:35:58
5

Я пошел с pocketsphinx_continuous и звуковая карта $ 4 .

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

echo "SETTING MIC IN TO 15 (94%)">>>>> ./audio.log
amixer -c 1 устанавливает Mic 15 unmute 2 & 1 & dev /null

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

ФАЙЛ: mute.sh
#! /Bin /ш

спать 1 доллар;
amixer -c 1 set Mic 0 unmute> /dev /null 2 ​​& 1;
echo "** MIC OFF **">>>> /home/pi/PIXIE/audio.log

Чтобы вычислить правильные времена для отключения звука, я просто запускаю soxi через lua и затем устанавливаю unmute.sh (напротив mute.sh) для запуска «x» секунд с момента запуска. Несомненно, есть много способов справиться с этим. Я доволен результатами этого метода.

LUA SNIPPET:

- начать параллельную синхронизацию
- ОТКЛЮЧИТЬСЯ, ЕСЛИ ЗВУКОВЫЕ СКОРОСТИ
- «filename» - это полный путь к wav-файлу
- выводится голосовым синтезатором в предыдущей операции

- ПОЛУЧИТЬ ДЛИН
local sample_length = io.popen ('soxi -D' ..filename);
local total_length = sample_length: read ("* a");
clean_length = string.gsub (total_length, "\ n", "") +1;
sample_length: близко ();

- ПРИМЕР ИСПОЛЬЗОВАНИЯ ВЫХОДА ...
--os.execute ('echo LENGTH WAS "' .. clean_length .. '" Секунды> ./audio.log');



- Мы собираемся сыграть что-то ...
- MUTE, затем планируйте UNMUTE.sh за x секунд, затем воспроизводите синтезаторный выход
- (для ясности развернуты mute.sh)

os.execute ('amixer -c 1 set Mic' ..mic_level .. 'unmute 2>> /dev /null');
os.execute ('echo "** MIC OFF **"> ./audio.log');

- ПРИМЕР ИСПОЛЬЗОВАНИЯ ВЫХОДА ...
- os.execute ('echo PLAYING: "' .. filename .. '" circa' .. clean_length .. 'Seconds>> ./audio.log');

os.execute ('./unmute.sh "' .. clean_length .. '' & ');


- ТОГДА ИГРАЙТЕ ТО, ЧТО ДРУГИЕ ПРОЦЕССЫ СПАСИЮ

os.execute ('./sounds-uncached.sh' ..filename .. '21000')

Чтобы на самом деле захватить голос на пи, я использую:

pocketsphinx_continuous -bestpath 0 -adcdev plughw: 1 -samprate 20000 \
-nfft 512 -ds2 -topn2 -maxwpf 5 -kdtreefn 3000 -kdmaxdepth 7 -kdmaxbbi 15 \
-pl_window 10 -lm ./LANGUAGE/0892-min.lm -dict ./LANGUAGE/0892-min.dic 2 & 1 \
| tee -i 2> /dev /null> (sed -u -n -e 's /^. \ {9 \}: //p') \
> (sed -u -n -e 's /^ READY //p' \
-e 's /^ Прослушивание //p' -e 's /^ FATAL_ERROR: \ "непрерывный \ .c \" \, //p') \
> /DEV /нуль

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

Для синтезатора я использовал Cpstrals fledgling pi solution, но он недоступен в Интернете, вам нужно связаться с ним напрямую, чтобы договориться о покупке, и около 30 долларов США купить. Результаты приемлемы, однако речь действительно создает некоторые неприятные клики и всплески, компания ответила, что у них больше нет RaspPi и они не хотят улучшать продукт. YMMV

Распознавание голоса находится на уровне около 12% процессора, когда он «простаивает», и быстро выполняет кратковременное нажатие при распознавании.

При рендеринге создание голоса увеличивается примерно на 50-80%.

Play /sox весит довольно сильно, но я применяю эффекты в реальном времени к отображаемым голосам, когда я их воспроизвожу;)

Pi сильно удаляется с помощью каждого руководства, которое я могу найти, чтобы остановить ненужные службы и запускается в режиме CLI. 800 мГц с перегрузкой (наименьшая).

scaling_governor установлен в: производительность

При полностью запуске: он работает при температуре около 50ºС под прямым солнечным светом и 38ºC в тени. У меня есть радиаторы.

Последний момент: я фактически запускаю всю эту экипировку в «ИАИ», управляемую интернетом, как приятный дополнительный.

Pi обрабатывает все это без проблем, И воспроизводит любые сетевые аудио в режиме реального времени, и полностью зацикленный звук в любом другом окне Unix. и т. д.

, чтобы справиться с большой нагрузкой на процессорную нагрузку процессора, я реализовал систему кэширования на основе md5sum, поэтому одни и те же высказывания не отображаются дважды. (около 1000 файлов, общая сумма которых составляет 220 мб, составляет 70% выражений, которые я обычно возвращаю из AI), это действительно помогает полностью снизить общую нагрузку процессора.

В précis все это вполне выполнимо. однако распознавание голоса будет только таким же хорошим, как качество ваших микрофонов, вашей языковой модели, как конкретно закрыть голоса ваших испытуемых для первоначальной целевой аудитории (я использую модель en_US для детей en_UK, а не совершенную) и другие мелочи детализации что с усилием вы можете уничтожить достойный результат.

И для записи, я уже делал все это раз на разжигании (и это тоже работало с cmu sphinx и flite). Надеюсь, это поможет.

ответил twobob 2 J0000006Europe/Moscow 2014, 15:38:30
3

Да. используйте PocketSphinx для распознавания речи, ответил Dr.Avalanche 29 +04002013-10-29T16:44:48+04:00312013bEurope/MoscowTue, 29 Oct 2013 16:44:48 +0400 2013, 16:44:48

3
  • SiriProxy - используйте это только в том случае, если у вас есть устройство, использующее Siri - вы не нужно сделать джейлбрейк. Он в основном перехватывает Siri в сети, в которую вы его устанавливаете.
  • Speech2Text - вы можете использовать API Googles для декодирования речи к тексту, но в этом примере также содержатся некоторые другие методы.
  • Julius - декодер распознавания речи.

Как указано Lenik, вам понадобится какое-то время для записи звука или, возможно, отправки аудиофайлов в Raspberry Pi, чтобы они каким-то образом декодировались.

ответил ppumkin 29 +04002013-10-29T13:25:44+04:00312013bEurope/MoscowTue, 29 Oct 2013 13:25:44 +0400 2013, 13:25:44
2

Малина Pi не имеет встроенного АЦП и микрофонного входа. Если вы не планируете использовать внешний USB-микрофон, в принципе нет способа получить аудиопоток на устройство. Кроме того, серьезных ограничений нет, процессор достаточно мощный для любой обработки звука, которую вы можете попробовать реализовать.

ответил lenik 29 +04002013-10-29T11:36:27+04:00312013bEurope/MoscowTue, 29 Oct 2013 11:36:27 +0400 2013, 11:36:27
1

Во-первых, вы должны выбрать набор слов для процесса классификации. После этого вы должны собирать данные от пользователей /субъектов. Это будет нестационарный сигнал. Вы должны уменьшить свои данные, чтобы уменьшить вычислительные затраты /улучшить коэффициент успеха с помощью методов извлечения объектов, чтобы вы искали подходящие методы извлечения объектов для вашего приложения. В результате этих методов вы можете получить вектор-функцию (среднее абсолютное значение, среднеквадратичное значение, длину волны, пересечение нуля, интегрированное абсолютное значение, коэффициенты AR, среднюю частоту, среднюю частоту и т. Д.). Затем для классификации ваших данных вы должны использовать метод классификации, например knn, нейронные сети и т. Д. Наконец, вы должны проверить его точность. Подводя итог:

  1. Выберите набор слов /предложений.
  2. Получить данные от людей.
  3. Препроцесс (возможно, сигнал необходимо отфильтровать)
  4. Удаление /обработка функций.
  5. Классификация.
  6. Тесты.

Я видел проекты обработки видео с помощью RPi в Интернете, поэтому он может справиться с этой классификацией.

Вы можете использовать NI 6009 USB DAQ (который поддерживает RPi) для сбора любых аналоговых данных, но они немного дороже.

ответил cagdas 29 +04002013-10-29T23:51:44+04:00312013bEurope/MoscowTue, 29 Oct 2013 23:51:44 +0400 2013, 23:51:44
0

Это может быть полезно для распознавания говорящего:

https://code.google.com/p/voiceid/

ответил RahulAN 12 Jpm1000000pmMon, 12 Jan 2015 15:19:53 +030015 2015, 15:19:53

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132