Kinect for windows speech recognition что это
Перейти к содержимому

Kinect for windows speech recognition что это

Русские Блоги

KINECT для Windows SDK V2.0 развития Примечания (8) Распознавание голоса (ниже)

Использование SDK: Kinect for Windows SDK v2.0 public preview

Включите следующий, как инициализировать Kinect на этот раз, очень просто:

  1. // Инициализировать Kinect
  2. HRESULT ThisApp::init_kinect() <
  3. IAudioSource* pAudioSource = nullptr;
  4. IAudioBeamList* pAudioBeamList = nullptr;
  5. / / Найти текущее значение по умолчанию Kinect
  6. HRESULT hr = ::GetDefaultKinectSensor(&m_pKinect);
  7. // Gentleman открытым Kinect
  8. if (SUCCEEDED(hr)) <
  9. hr = m_pKinect->Open();
  10. >
  11. // Получить аудио источник
  12. if (SUCCEEDED(hr)) <
  13. hr = m_pKinect->get_AudioSource(&pAudioSource);
  14. >
  15. // Получить список аудио цепи
  16. if (SUCCEEDED(hr)) <
  17. hr = pAudioSource->get_AudioBeams(&pAudioBeamList);
  18. >
  19. // Получить аудио
  20. if (SUCCEEDED(hr)) <
  21. hr = pAudioBeamList->OpenAudioBeam(0, &m_pAudioBeam);
  22. >
  23. // Получить входной аудиопоток
  24. if (SUCCEEDED(hr)) <
  25. IStream* pStream = nullptr;
  26. hr = m_pAudioBeam->OpenInputStream(&pStream);
  27. // Использование для создания упаковки объектов
  28. m_p16BitPCMAudioStream = new KinectAudioStreamWrapper(pStream);
  29. SafeRelease(pStream);
  30. >
  31. SafeRelease(pAudioBeamList);
  32. SafeRelease(pAudioSource);
  33. return hr;
  34. >

В остальном это инициализирован двигатель распознавания речи, потому что это очень стиль, рекомендуется, что вы можете скопировать непосредственно:

  1. // Initialized распознавания голоса
  2. HRESULT ThisApp::init_speech_recognizer() <
  3. HRESULT hr = S_OK;
  4. // Создание голосового ввода потока
  5. if (SUCCEEDED(hr)) <
  6. hr = CoCreateInstance(CLSID_SpStream, nullptr, CLSCTX_INPROC_SERVER, __uuidof(ISpStream), ( void **)&m_pSpeechStream);;
  7. >
  8. / / Подключение к нашей Kinect голосового ввода
  9. if (SUCCEEDED(hr)) <
  10. WAVEFORMATEX wft = <
  11. WAVE_FORMAT_PCM, // кодирование PCM
  12. 1, // мононуклеоз
  13. 16000, // Частота дискретизации составляет 16кГц
  14. 32000, / / Поток данных в минуту = частота дискретизации * выравнивание
  15. 2, // Выравнивание: Mono * Sample Depth = 2Byte
  16. 16, // Пример глубина 16bit
  17. 0 // дополнительные данные
  18. >;
  19. // Установить состояние
  20. hr = m_pSpeechStream->SetBaseStream(m_p16BitPCMAudioStream, SPDFID_WaveFormatEx, &wft);
  21. >
  22. // Создание объекта распознавания голоса
  23. if (SUCCEEDED(hr)) <
  24. ISpObjectToken *pEngineToken = nullptr;
  25. // Создание языка распознаватель
  26. hr = CoCreateInstance(CLSID_SpInprocRecognizer, nullptr, CLSCTX_INPROC_SERVER, __uuidof(ISpRecognizer), ( void **)&m_pSpeechRecognizer);
  27. if (SUCCEEDED(hr)) <
  28. / / Подключение к голосовому входу нашего создания
  29. m_pSpeechRecognizer->SetInput(m_pSpeechStream, TRUE);
  30. // Создать язык, чтобы определить язык, чтобы выбрать материковый китайский (ZH-CN)
  31. // Существует в настоящее время китайского пакет распознавания речи без какого-либо Kinect для набора «язык = 804; = TURE Kinect»
  32. hr = SpFindBestToken(SPCAT_RECOGNIZERS, L "Language=804" , nullptr, &pEngineToken);
  33. if (SUCCEEDED(hr)) <
  34. // Установить язык, который будет идентифицирован
  35. m_pSpeechRecognizer->SetRecognizer(pEngineToken);
  36. // Создать контекст распознавания речи
  37. hr = m_pSpeechRecognizer->CreateRecoContext(&m_pSpeechContext);
  38. Деградация // Адаптивные ПО! Предотвращать возможности распознавания из-за длительный срок переработки
  39. if (SUCCEEDED(hr)) <
  40. hr = m_pSpeechRecognizer->SetPropertyNum(L "AdaptationOn" , 0);
  41. >
  42. >
  43. >
  44. SafeRelease(pEngineToken);
  45. >
  46. // Создать синтаксис
  47. if (SUCCEEDED(hr)) <
  48. hr = m_pSpeechContext->CreateGrammar(1, &m_pSpeechGrammar);
  49. >
  50. // статическая нагрузка файл SRGS грамматик
  51. if (SUCCEEDED(hr)) <
  52. hr = m_pSpeechGrammar->LoadCmdFromFile(s_GrammarFileName, SPLO_STATIC);
  53. >
  54. // Правила грамматики активации
  55. if (SUCCEEDED(hr)) <
  56. hr = m_pSpeechGrammar->SetRuleState(nullptr, nullptr, SPRS_ACTIVE);
  57. >
  58. / / Установить идентификатор для считывания данных
  59. if (SUCCEEDED(hr)) <
  60. hr = m_pSpeechRecognizer->SetRecoState(SPRST_ACTIVE_ALWAYS);
  61. >
  62. // Настройка события идентификации
  63. if (SUCCEEDED(hr)) <
  64. hr = m_pSpeechContext->SetInterest(SPFEI(SPEI_RECOGNITION), SPFEI(SPEI_RECOGNITION));
  65. >
  66. / / Убедитесь в том, что распознавание речи является активным
  67. if (SUCCEEDED(hr)) <
  68. hr = m_pSpeechContext->Resume(0);
  69. >
  70. // Получить идентификации события
  71. if (SUCCEEDED(hr)) <
  72. m_p16BitPCMAudioStream->SetSpeechState(TRUE);
  73. m_hSpeechEvent = m_pSpeechContext->GetNotifyEventHandle();
  74. >
  75. #ifdef _DEBUG
  76. else
  77. printf_s( "init_speech_recognizer failed\n" );
  78. #endif
  79. return hr;
  80. >

1. После завершения WAVEFORMATEX, заливка в WAVEFORMATEX, заливка в формате данных PCM.

2. SPFindBestToken инициализирует выделенную область, которая является 16-основой, материковой китайский 0x0804. Если дополнительный голос пакет, предоставляемый Kinect может быть добавлен

Набор Kinect = Туре, разделенных точкой с запятой.

3.LoadCmdFromFile Устанавливает грамматический файл, который загружает SRGS, можно также установить, является ли она динамична.

4.GetNotifyEventHandle используется для получения дескриптора события распознавания речи, эта ручка не закрыта программистом, не активный CloseHandle

Полное руководство по распознаванию речи с помощью Python

Вы когда-нибудь задумывались, как добавить распознавание речи в свой проект Python? Если да, то продолжайте читать! Это проще, чем вы думаете.

Ошеломляющий успех продуктов с поддержкой речи, таких как Amazon Alexa доказал, что это не прихоть, а поддержки речи в скором будущем станет важным элементом бытовой технике. Если задуматься, причины довольно очевидны. Включение распознавания речи в ваше приложение Python предлагает новый уровень интерактивности и доступности, с которыми могут сравниться немногие технологии.

Стоит только задуматься об улучшениях доступности. Распознавание речи позволяет пожилым людям, людям с ограниченными физическими возможностями и слабым зрением быстро и естественно взаимодействовать с современными продуктами и услугами — графический интерфейс не требуется!

Лучше всего то, что включить распознавание речи в проект Python действительно просто. В этом уроке вы узнаете, как это сделать. Вы узнаете:

  • Как работает распознавание речи,
  • какие пакеты доступны на PyPI и
  • как установить и использовать пакет SpeechRecognition — полнофункциональную и простую в использовании
  • библиотеку распознавания речи Python.

В конце концов, вы примените полученные знания в простой игре «Угадай слово» и посмотрите, как все это сочетается.

Как распознаётся речь — обзор

Прежде чем мы перейдем к деталям распознавания речи на Python, давайте поговорим о том, как работает распознавание речи. Полное обсуждение займет целую книгу, поэтому я не буду утомлять вас здесь всеми техническими деталями. Фактически, этот раздел не является обязательным для нашего урока. Если вы хотите перейти к делу, тогда смело идите вперед.

Распознавание речи уходит корнями в исследования, проведенные Bell Labs એ в начале 1950-х годов. Ранние системы были ограничены одним говорящим и имели ограниченный словарный запас примерно из дюжины слов. Современные системы распознавания речи прошли долгий путь по сравнению со своими древними аналогами. Они могут распознавать речь нескольких говорящих и обладают огромным словарным запасом на многих языках.

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

Большинство современных систем распознавания речи основаны на так называемой скрытой марковской модели (СММ એ ). Этот подход работает на предположении, что речевой сигнал, если рассматривать его в достаточно короткий промежуток времени (скажем, десять миллисекунд), можно разумно аппроксимировать как стационарный процесс, то есть процесс, где статистические свойства не меняются с течением времени.

В типичном СММ એ речевой сигнал делится на 10-миллисекундные фрагменты. Спектр мощности каждого фрагмента, который по сути представляет собой график зависимости мощности сигнала от частоты, отображается на вектор действительных чисел, известный как кепстр એ коэффициенты. Размерность этого вектора обычно мала — иногда всего 10, хотя более точные системы могут иметь размерность 32 или более. Конечным результатом СММ એ является последовательность этих векторов.

Чтобы преобразовать речь в текст, группы векторов сопоставляются с одной или несколькими фонемами — основной единицей речи. Этот расчет требует обучения, поскольку звук фонемы એ варьируется от говорящего к говорящему, и даже меняется от одного высказывания к другому одним и тем же говорящим. Затем применяется специальный алгоритм для определения наиболее вероятного слова (или слов), которые образуют данную последовательность фонем.

Можно показаться, что весь этот процесс может требует больших вычислительных мощностей. Во многих современных системах распознавания речи нейронные сети используются для упрощения речевого сигнала с помощью методов преобразования признаков и уменьшения размерности перед распознаванием СММ એ . Детекторы голосовой активности (VAD) также используются для уменьшения звукового сигнала до тех частей, которые могут содержать речь.Это предотвращает трату времени распознавателем на анализ ненужных частей сигнала.

К счастью, как программисту Python вам не о чем беспокоиться. Ряд сервисов распознавания речи доступен для использования в Интернете через API, и многие из этих сервисов предлагают Python SDK.

Выбор пакета Python для распознавания речи

На PyPI существует несколько пакетов для распознавания речи. Вот некоторые из них:

Некоторые из этих пакетов, такие как wit и apiai, предлагают встроенные функции, такие как обработка естественного языка для определения намерений говорящего, которые выходят за рамки базового распознавания речи. Другие, такие как google-cloud-speech, сосредоточены исключительно на преобразовании речи в текст.

Есть один пакет, который выделяется простотой использования: SpeechRecognition.

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

Библиотека SpeechRecognition действует как оболочка для нескольких популярных речевых API и, таким образом, является чрезвычайно гибкой. Один из них — API Google Web Speech — поддерживает ключ API по умолчанию, который жестко запрограммирован в библиотеке SpeechRecognition. Это означает, что вы можете встать с ног, не подписываясь на услугу.

Гибкость и простота использования пакета SpeechRecognition делают его отличным выбором для любого проекта Python. Тем не менее, поддержка каждой функции каждого API, который он обертывает, не гарантируется. Вам нужно будет потратить некоторое время на изучение доступных вариантов, чтобы узнать, будет ли SpeechRecognition работать в вашем конкретном случае.

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

Установка SpeechRecognition

SpeechRecognition совместим с Python 2.6, 2.7 и 3.3+, но требует некоторых дополнительных шагов по установке для Python 2. В этом уроке я думаю, что вы используете Python 3.3+.

Вы можете установить SpeechRecognition из терминала с помощью pip:

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

Примечание. Номер версии может отличаться. Версия 3.8.1 была последней на момент написания.

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

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

Класс распознавателя

Вся магия SpeechRecognition происходит с классом Recognizer .

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

Создать экземпляр Recognizer легко. В текущем сеансе SpeechRecognition введите:

Каждый экземпляр Recognizer имеет семь методов распознавания речи из источника звука с использованием различных API:

  • recognize_bing() : Microsoft Bing Speech
  • recognize_google() : Google Web Speech API
  • recognize_google_cloud() : Google Cloud Speech — требуется установка пакета google-cloud-speech
  • recognize_houndify() : Houndify от SoundHound
  • recognize_ibm() : IBM Speech to Text
  • recognize_sphinx() : CMU Sphinx — требуется установка PocketSphinx
  • recognize_wit() : Wit.ai

Из семи только recognize_sphinx() работает в автономном режиме с движком CMU Sphinx. Остальные шесть требуют подключения к Интернету. Полное обсуждение функций и преимуществ каждого API выходит за рамки этого руководства. Поскольку SpeechRecognition поставляется с ключом API по умолчанию для Google Web Speech API, вы можете сразу приступить к работе с ним. По этой причине в этом руководстве мы будем использовать API веб-речи. Все остальные шесть API требуют аутентификации с помощью ключа API или комбинации имени пользователя и пароля. Дополнительные сведения см. В документации SpeechRecognition.

Внимание! Ключ по умолчанию, предоставляемый SpeechRecognition, предназначен только для целей тестирования, и Google может отозвать его в любое время. Использовать Google Web Speech API в рабочей среде — не лучшая идея. Даже с действующим ключом API вы будете ограничены только 50 запросами в день, и нет возможности увеличить эту квоту. К счастью, интерфейс SpeechRecognition почти идентичен для каждого API, поэтому то, что вы узнаете сегодня, будет легко перевести в реальный проект.

Каждый метод распознавания _*() вызывает исключение Speech_recognition.RequestError , если API недоступен. Для recognize_sphinx() это могло произойти в результате отсутствующей, поврежденной или несовместимой установки Sphinx. Для остальных шести методов может быть сгенерировано RequestError, если достигнуты ограничения квоты, сервер недоступен или нет подключения к Интернету.

Хорошо, хватит болтовни. Давай запачкаем руки. Идите вперед и попробуйте вызвать recognize_google() в сеансе интерпретатора.

У вас наверняка получилось что-то похожее на это:

Вы могли догадаться, что ничего произойдет. Что можно получить из ничего?

Все семь методов распознавания _*() класса Recognizer требуют аргумента audio_data . В каждом случае audio_data должен быть экземпляром класса AudioData SpeechRecognition. Есть два способа создать экземпляр AudioData: из аудиофайла или аудио, записанного с микрофона. Начать работу с аудиофайлами немного проще, поэтому давайте сначала рассмотрим это.

Работа с аудиофайлами

Прежде чем продолжить, вам нужно скачать аудиофайл. Тот, который я использовал для начала, «harvard.wav» можно найти здесь. Убедитесь, что вы сохранили его в том же каталоге, в котором запущен сеанс интерпретатора Python.

SpeechRecognition упрощает работу с аудиофайлами благодаря удобному классу AudioFile. Этот класс может быть инициализирован путем указания пути к аудиофайлу и предоставляет интерфейс диспетчера контекста для чтения и работы с содержимым файла.

Поддерживаемые типы файлов

В настоящее время SpeechRecognition поддерживает следующие форматы файлов:

  • WAV: должен быть в формате PCM/LPCM;
  • AIFF
  • AIFF-C
  • FLAC: должен быть в собственном формате FLAC; OGG-FLAC не поддерживается.

Если вы работаете с Linux, macOS или Windows на базе x-86, вы сможете без проблем работать с файлами FLAC. На других платформах нужно будет установить кодировщик FLAC и убедиться, что у вас есть доступ к инструменту командной строки flac. Вы можете найти дополнительную информацию здесь, если это относится к вам.

Использование record() для захвата данных из файла

Для обработки файла «harvard.wav» в текущем сеансе интерпретатора запишите:

Диспетчер контекста открывает файл и считывает его содержимое, сохраняя данные в экземпляре AudioFile с именем source . Затем метод record() записывает данные из всего файла в экземпляр AudioData. Вы можете подтвердить это, проверив тип audio :

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

Поздравляю! Вы только что расшифровали свой первый аудиофайл!

Если вам интересно, откуда берутся фразы в файле «harvard.wav», то они являются примерами Гарвардских предложений. Эти фразы были опубликованы IEEE в 1965 году для использования при проверке разборчивости речи на телефонных линиях. Они все еще используются в тестировании VoIP и сотовой связи. Тесты Гарварда состоят из 72 списков по десять фраз в каждом. Вы можете найти в свободном доступе записи этих фраз на веб-сайте Open Speech Repository. Записи доступны на английском, китайском, французском и хинди. Они предоставляют отличный источник бесплатного материала для тестирования вашего кода.

Захват сегментов со смещением и продолжительностью

Что делать, если вы хотите сохранить в файле только часть речи? Метод record() принимает аргумент duration , который останавливает запись через указанное количество секунд.

Например, следующая запись фиксирует любую речь в первые четыре секунды файла:

Метод record() при использовании внутри блока with всегда продвигается вперед в файловом потоке. Это означает, что если вы записываете один раз в течение четырех секунд, а затем снова записываете в течение четырех секунд, второй раз вернет четыре секунды звука после первых четырех секунд.

Обратите внимание, что audio2 содержит часть третьей фразы в файле. При указании продолжительности запись может остановиться на середине фразы или даже на середине слова, что может повлиять на точность транскрипции. Подробнее об этом чуть позже.

Помимо указания продолжительности записи, методу record() может быть задана конкретная начальная точка с помощью аргумента offset . Это значение представляет количество секунд от начала файла, которое следует игнорировать перед началом записи.

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

Аргументы offset и duration полезны для сегментации аудиофайла, если у вас есть предварительные знания о структуре речи в файле. Однако их поспешное использование может привести к плохой транскрипции. Чтобы увидеть этот эффект, попробуйте в интерпретаторе сделать следующее:

Начав запись через 4,7 секунды, вы пропустите часть «it t» в начале фразы «it takes heat to bring out the odor», поэтому API получил только «akes heat», что распознаётся, как «Mesquite». ”

Точно так же в конце записи вы запечатлели «a co», что является началом третьей фразы «a cold dip restores health and zest«. Что API было распознано, как «Aiko».

Есть еще одна причина, по которой вы можете получить неточную транскрипцию. Шум! Приведенные выше примеры работали хорошо, потому что аудиофайл достаточно чистый. В реальном мире, если у вас нет возможности предварительно обработать аудиофайлы, то не стоит ожидать, что звук будет без шума.

Влияние шума на распознавание речи

Шум — это факт жизни. Все аудиозаписи содержат некоторый уровень шума, а необработанный шум может нарушить точность распознавания речи.

Чтобы понять, как шум может влиять на распознавание речи, скачайте файл «jackhammer.wav» здесь. Как всегда, убедитесь, что вы сохранили это в рабочем каталоге сеанса интерпретатора. В этом файле есть фраза «the stale smell of old beer lingers», произнесенная на заднем фоне с громким отбойным молотком.

Что происходит, когда вы пытаетесь расшифровать этот файл?

Так как же с этим справиться? Вы можете попробовать использовать метод adjust_for_ambient_noise() класса Recognizer.

Это немного приблизило вас к истинной фразе, но все еще не идеально. Кроме того, в начале фразы отсутствует «the». Это почему?

Метод adjust_for_ambient_noise() считывает первую секунду файлового потока и калибрует распознаватель по уровню шума звука. Следовательно,эта часть потока используется до того, как вы вызовете функцию record() для захвата данных.

Вы можете настроить временной интервал, который adjust_for_ambient_noise() использует для анализа, с помощью аргумента duration . Этот аргумент принимает числовое значение в секундах и по умолчанию равен 1. Попробуйте снизить это значение до 0,5.

Если вы часто сталкиваетесь с этими проблемами, возможно, вам придется прибегнуть к предварительной обработке звука. Это можно сделать с помощью программного обеспечения для редактирования аудио или пакета Python (например, SciPy), который может применять фильтры к файлам. Подробное обсуждение этого выходит за рамки данного руководства — посмотрите книгу Аллена Дауни Think DSP, если вам интересно. На данный момент просто имейте в виду, что окружающий шум в аудиофайле может вызывать проблемы и должен быть устранен, чтобы максимизировать точность распознавания речи.

При работе с зашумленными файлами может быть полезно увидеть фактический ответ API. Большинство API-интерфейсов возвращают строку JSON એ , содержащую множество возможных транскрипций. Метод accept_google() всегда будет возвращать наиболее вероятную транскрипцию, если только вы не заставите его дать вам полный ответ. Вы можете сделать это, установив для аргумента show_all метода accept_google() значение True .

Как видите, recognize_google() возвращает словарь с ключом «альтернатива», который указывает на список возможных транскриптов. Структура этого ответа может отличаться от API к API и в основном полезна для отладки.

К настоящему времени у вас есть довольно хорошее представление об основах пакета SpeechRecognition. Вы увидели, как создать экземпляр AudioFile из аудиофайла и использовать метод record() для захвата данных из файла. Вы узнали, как записывать сегменты файла, используя аргументы ключевого слова offset и duration функции record() , и испытали вредное влияние шума на точность транскрипции.

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

Работа с микрофонами

Чтобы получить доступ к микрофону с помощью SpeechRecognizer, вам необходимо установить пакет PyAudio. Закройте текущий сеанс переводчика, и давайте сделаем это.

Установка PyAudio

Процесс установки PyAudio будет зависеть от вашей операционной системы.

Debian Linux

Если вы используете Linux на базе Debian (например, Ubuntu), вы можете установить PyAudio с помощью apt:

После установки вам все равно может потребоваться запустить pip install pyaudio, особенно если вы работаете в виртуальной среде.

macOS

Для macOS сначала необходимо установить PortAudio с Homebrew, а затем установить PyAudio с помощью pip:

Windows

В Windows вы можете установить PyAudio с помощью pip:

Тестирование установки

После того, как вы установили PyAudio, вы можете протестировать установку с консоли.

Убедитесь, что ваш микрофон по умолчанию включен и не заглушен. Если установка прошла успешно, вы должны увидеть что-то вроде этого:

Поиграйте с этим немного, говоря в микрофон и наблюдая, насколько хорошо SpeechRecognition расшифровывает вашу речь.

Примечание. Если вы работаете в Ubuntu и получаете какой-то забавный вывод вроде «ALSA lib… Unknown PCM», обратитесь к этой странице за советами по подавлению этих сообщений. Этот вывод поступает из пакета ALSA, установленного вместе с Ubuntu, а не из SpeechRecognition или PyAudio. На самом деле эти сообщения могут указывать на проблему с вашей конфигурацией ALSA, но, по моему опыту, они не влияют на функциональность вашего кода. В основном они доставляют неудобства.

>>> import speech_recognition as sr >>> r = sr.Recognizer()

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

Если в вашей системе нет микрофона по умолчанию (например, на Raspberry Pi એ ) или вы хотите использовать микрофон, отличный от стандартного, вам нужно будет указать, какой из них использовать, указав индекс устройства. Вы можете получить список имен микрофонов, вызвав статический метод list_microphone_names() класса Microphone.

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

Индекс устройства микрофона — это индекс его имени в списке, возвращаемом list_microphone_names() . Например, с учетом вышеприведенного вывода, если вы хотите использовать микрофон с именем «front», который имеет индекс 3 в списке, вы должны создать экземпляр микрофона следующим образом:

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

Использование listen() для захвата входного сигнала микрофона

Теперь, когда у вас есть готовый экземпляр Microphone, пора записать звук с микрофона.

Как и класс AudioFile, Microphone является диспетчером контекста. Вы можете захватывать ввод с микрофона, используя метод listen() класса Recognizer внутри блока with.Этот метод принимает источник звука в качестве первого аргумента и записывает входные данные от источника до тех пор, пока не будет обнаружено тишина.

После выполнения блока with попробуйте сказать «hello» в микрофон. Подождите, пока снова не появится подсказка переводчика. Как только приглашение « >>> » вернется, вы будете готовы распознать речь.

Если приглашение не возвращается, скорее всего, ваш микрофон улавливает слишком много окружающего шума. Вы можете прервать процесс, нажав +ctrl+c++ , чтобы вернуть подсказку.

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

После выполнения приведенного выше кода подождите секунду, пока adjust_for_ambient_noise() выполнит свою работу, затем попробуйте сказать «Hello» в микрофон. Опять же, вам придется немного подождать, пока не вернется подсказка переводчика, прежде чем пытаться распознать речь.

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

В документации SpeechRecognition рекомендуется использовать продолжительность не менее 0,5 секунды. В некоторых случаях вы можете обнаружить, что длительность, превышающая значение по умолчанию, равное одной секунде, дает лучшие результаты. Необходимое минимальное значение зависит от окружающей среды микрофона. К сожалению, эта информация обычно неизвестна во время разработки. По моему опыту, для большинства приложений достаточно длительности по умолчанию в одну секунду.

Traceback (most recent call last): File » «, line 1, in File «/home/david/real_python/speech_recognition_primer/venv/lib/python3.5/site-packages/speech_recognition/__init__.py», line 858, in recognize_google if not isinstance(actual_result, dict) or len(actual_result.get(«alternative», [])) == 0: raise UnknownValueError() speech_recognition.UnknownValueError

Аудио, которое не может быть сопоставлено с текстом API, вызывает исключение UnknownValueError. Вы всегда должны заключать вызовы API в блоки try и except для обработки этого исключения.

Примечание. Возможно, вам придется приложить больше усилий, чем вы ожидаете, чтобы получить исключение. API очень усердно работает над расшифровкой любых звуков голоса. Даже короткое ворчание для меня было расшифровано как «how». Кашель, хлопки в ладоши и щелканье языком постоянно вызывают исключение.

Собираем все вместе: игра «Угадай слово»

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

Вот полный сценарий:

Давайте разберемся с этим немного.

Функция recognize_speech_from_mic() принимает в качестве аргументов экземпляр распознавателя и микрофона и возвращает словарь с тремя ключами. Первый ключ, success , — это логическое значение, указывающее, был ли запрос API успешным. Второй ключ, error , либо None , либо сообщение об ошибке, указывающее, что API недоступен или речь была неразборчивой. Наконец, ключ transcription содержит транскрипцию звука, записанного микрофоном.

Функция сначала проверяет, что аргументы распознавателя и микрофона имеют правильный тип, и вызывает TypeError, если один из них недопустим:

Затем метод listen() используется для записи входного сигнала микрофона:

Метод adjust_for_ambient_noise() используется для калибровки распознавателя для изменения условий шума каждый раз, когда вызывается функция identify_speech_from_mic() .

Затем вызывается recognize_google() для расшифровки любой речи в записи. Попробуй блок try. except использовать для перехвата исключений RequestError и UnknownValueError с соответствующей обработкой. Успех запроса API, любые сообщения об ошибках и транскрибированная речь хранятся в ключах success, error и transcription словаря response , который возвращается функцией recognize_speech_from_mic() .

Вы можете протестировать функцию recognize_speech_from_mic() , сохранив приведенный выше сценарий в файл с именем «guessing_game.py» и запустив следующее в сеансе интерпретатора:

Сама игра довольно простая. Сначала объявляется список слов, максимальное количество разрешенных догадок и лимит подсказок:

Затем создается экземпляр распознавателя и микрофона и случайное слово выбирается из WORDS:

После печати некоторых инструкций и ожидания в течение 3 секунд цикл for используется для управления каждой попыткой пользователя угадать выбранное слово. Первое, что находится внутри цикла for , — это еще один цикл for , который запрашивает у пользователя не более PROMPT_LIMIT раз для предположения, пытается каждый раз распознать ввод с помощью функции recognize_speech_from_mic() и сохранять словарь, возвращенный в локальную переменную guess .

Если ключ transcription guess не равен None , то речь пользователя была расшифрована, и внутренний цикл завершается прерыванием. Если речь не была расшифрована и для ключа » success » установлено значение False , то произошла ошибка API, и цикл снова завершился с прерыванием. В противном случае запрос API был успешным, но речь была неузнаваемой. Пользователь получает предупреждение, и цикл for повторяется, давая пользователю еще один шанс выполнить текущую попытку.

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

Если ошибок не было, транскрипция сравнивается со случайно выбранным словом. Метод lower() для строковых объектов используется для обеспечения лучшего соответствия предположения выбранному слову. API может возвращать речь, совпадающую со словом «apple», как «Apple» или «apple», и любой ответ должен считаться правильным. Если предположение было верным, пользователь выигрывает, и игра прекращается. Если пользователь ошибся и у него остались попытки, внешний цикл for повторяется, и получается новое предположение. В противном случае пользователь проигрывает игру.

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

Обзор и дополнительные ресурсы

В этом уроке вы увидели, как установить пакет SpeechRecognition и использовать его класс Recognizer, чтобы легко распознавать речь как из файла — с помощью record() , так и с микрофона — с помощью listen() . Вы также увидели, как обрабатывать сегменты аудиофайла, используя аргументы ключевого слова offset и duration метода record() . Вы видели, как шум может влиять на точность транскрипции, и узнали, как настроить чувствительность экземпляра Recognizer к окружающему шуму с помощью adjust_for_ambient_noise() . Вы также узнали, какие исключения может вызывать экземпляр Recognizer — RequestError для неверных запросов API и UnkownValueError для неразборчивой речи — и как их обрабатывать с помощью блоков try . except .

Распознавание речи — это глубокая тема, и то, что вы здесь узнали, едва ли поверхностно. Если вы хотите узнать больше, вот некоторые дополнительные ресурсы.

Для получения дополнительной информации о пакете SpeechRecognition:

Несколько интересных интернет-ресурсов:

    . Короткометражный фильм об обработке речи Google. от Huang, Baker и Reddy. Сообщения ACM (2014). В этой статье дается подробный и научный взгляд на эволюцию технологии распознавания речи. от Кларк Бойд из The Startup. В этом сообщении блога представлен обзор технологии распознавания речи с некоторыми мыслями о будущем..

Несколько хороших книг о распознавании речи:

    , Pieraccini, MIT Press (2012). Доступная для широкой аудитории книга, охватывающая историю и современные достижения в области обработки речи. , Rabiner and Juang, Prentice Hall (1993). Рабинер, исследователь из Bell Labs, сыграл важную роль в разработке некоторых первых коммерчески жизнеспособных распознавателей речи. Этой книге уже более 20 лет, но многие основы остаются прежними. , Yu and Deng, Springer (2014). Ю и Дэн — исследователи в Microsoft, оба очень активно работают в области обработки речи. Эта книга охватывает множество современных подходов и передовых исследований, но не для математически слабонервных..

Приложение: Распознавание речи на языках, отличных от английского

На протяжении всего этого руководства мы распознавали речь на английском языке, который является языком по умолчанию для каждого метода recognize_*() пакета SpeechRecognition. Однако распознавать речь на других языках абсолютно возможно, и это довольно просто сделать.

Чтобы распознать речь на другом языке, задайте в качестве аргумента ключевого слова языка метода recognize_*() строку, соответствующую желаемому языку. Большинство методов принимают языковой тег BCP-47, например en-US для американского английского или fr-FR для французского. Например, следующее распознает французскую речь в аудиофайле:

Только следующие методы принимают аргумент ключевого слова языка:

  • recognize_bing()
  • recognize_google()
  • recognize_google_cloud()
  • recognize_ibm()
  • recognize_sphinx()

Чтобы узнать, какие языковые теги поддерживаются используемым API, вам потребуется обратиться к соответствующей документации. Список тегов, которые принимает recognize_*() , можно найти в этом ответе на Stack Overflow.

Опубликовано Вадим В. Костерин

ст. преп. кафедры ЦЭиИТ. Автор более 130 научных и учебно-методических работ. Лауреат ВДНХ (серебряная медаль). Посмотреть больше записей

Разбираемся с современными системами распознавания речи в 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 — система, которую мы потеряли

Другие статьи в выпуске:

Xakep #206. Ключ от всех дверей

Что сегодня?

Сегодня все гораздо лучше. В последние годы, после открытия исходников 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 — стартовый портал для тех, кто хочет внести свой вклад в разработку открытых систем распознавания речи

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

HTK, Julius и Simon

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

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

Возможности HTK и Julius активно используются в приложении Simon. Проект запущен еще в 2007 году и до сих пор пребывает в перманентной бете. Движок использует библиотеки KDE, CMU Sphinx и/или Julius и акустические модели проекта VoxForge. Есть версии для Windows и Linux. Разработка Simon ведется в рамках проекта KDE в составе рабочей группы KDE Accessibility. Последняя версия Simon — 0.4.1 — вполне себе юзабельное приложение для бета-версии.

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

Помимо описанных выше, существуют и другие проекты по распознаванию речи, такие как Kaldi, наработки которого используются сейчас в других проектах. Однако в рамках данного обзора мы не будем их касаться. И дело не в том, что они не заслуживают внимания, а в том, что большинство из них скорее мертвы, чем живы. Более-менее активно развиваются лишь Sphinx и его производные, Simon, HTK и Julius. Смотри подробности на сайте Саймона.

Саймон говорит и выглядит довольно прилично

Саймон говорит и выглядит довольно прилично

Лучшие друзья человека

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

Условно все голосовые ассистенты можно разделить на две группы: те, которые так или иначе используют Google Voice API, и остальные. Остальные — это, например, ставшая уже знаменитой Cortana от Microsoft, которая, по слухам, скоро станет доступна для Android и iOS, что теоретически означает возможность портирования ее и на чистый Linux-десктоп. Или Siri — детище Apple, которое яблочная компания оберегает от любого стороннего использования как зеницу ока.

После открытия компанией Google своего API для работы с голосом персональные ассистенты для Linux начали появляться один за другим.

Вот правда. Именно так

Вот правда. Именно так

Linux Speech Recognition

В начале 2013 года, после закрытого бета-тестирования был переведен в разряд свободных проект по созданию системы распознавания речевых команд на базе Google Voice API. Система позволяет через управление голосом запускать программы, выполнять операции с файлами, открывать сайты, находить ответы на произвольные вопросы, создавать электронные письма, диктовать текст документов, запускать приложения и так далее.

Вначале проект развивался независимым энтузиастом для организации речевого управления Ubuntu, но в текущем виде его код не привязан к особенностям данной системы и может быть использован в любых дистрибутивах. Код проекта написан на языке Python и открыт под лицензией GPLv3. Распознавание речи реализовано через обращение к Google Voice API, который демонстрирует достаточно неплохие результаты для русского языка. Вся дополнительная инфа тут.

Можно установить в Ubuntu и пользоваться. Удобно, быстро

Можно установить в Ubuntu и пользоваться. Удобно, быстро

Hound

Этот голосовой ассистент, хоть и создан для Android, а не для Linux, все же заслуживает упоминания в нашем обзоре. Дело в том, что в тестах на распознавание речи этот помощник обгоняет и Siri, и Google Now, справляясь с поставленными задачами значительно эффективнее и быстрее. Самое ценное в нем то, что он воспринимает фразы именно так, как пользователь их произносит, то есть тебе не придется как-то специально формулировать свои вопросы, чтобы ассистент их понял.

Пока проект находится на стадии беты и доступен только по инвайтам и только владельцам Android-девайсов, находящимся на территории США. Разработчики обещают выпустить версии для iOS после окончания бета-тестирования. Будет ли версия для десктопов, пока неизвестно. Проект развивается уже девять лет и, по словам разработчиков, достаточно стабилен для повседневного использования. Русского языка, вестимо, нет.

Как отмечает издание The Verge, Hound пока еще не может полностью заменить Google Now или Siri, из-за того что недостаточно «персонализирован».

Hound работает почти так же, как и Google Now, только лучше

Hound работает почти так же, как и Google Now, только лучше

Betty

Это голосовой ассистент для консоли Linux. Он переводит английские слова в команды в терминале и выполняет их. Если ты фанат тру-линукса, то это решение для тебя. Страница проекта на GitHub гласит: «Миссия Betty — в предоставлении пользователю естественного языка общения с компьютером». Ведь наверняка у тебя бывали ситуации, когда при работе в командной строке ты не мог вспомнить синтаксис той или иной команды и лез в интернет за помощью. С Betty такой проблемы больше не будет.

Например, если ты забыл, как разархивировать файлы в терминале, тебе достаточно сказать по-английски «Betty uncompress archive.tar.gz» («Бетти, разархивируй файл archive.tar.gz»), и файл и правда разархивируется. Проверено автором этой статьи.

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

Вот часть команд, которые Betty версии 0.1.8 понимает уже сейчас:

  • count (подсчет, например количества символов и слов в файле);
  • config (смена имени пользователя);
  • datetime (вывод текущего времени и даты);
  • поиск (внутри файлов);
  • web (запросы, скачивание файлов, поиск информации в Сети и прочее);
  • операции с папками и файлами (архивирование/разархивирование файлов, вычисление размера файлов, изменение прав доступа и другие);
  • пользовательские команды (вывод имени пользователя, IP-адреса, имена залогинившихся в машину пользователей и так далее).

Список команд постоянно увеличивается. Над проектом работает уже семнадцать разработчиков из пяти стран. Полный список команд Betty ты можешь найти на странице проекта на GitHub.

Betty создана гиками для гиков. И работает, как гик

Betty создана гиками для гиков. И работает, как гик

Sirius

Жемчужиной среди остальных можно назвать Sirius — новое и весьма амбициозное решение от группы разработчиков Clarity Lab из университета Мичигана. Несмотря на сходство названия с Siri, проект не имеет с ней ничего общего. Sirius уже может гораздо больше, чем его аналоги. Разработку Sirius взяли под свое крыло Google, DARPA, ARM, министерство обороны США и Американский национальный научный фонд. Исходники распространяются под лицензией BSD. Система основана на нескольких свободных проектах по распознаванию речи, таких как Sphinx, Kaldi, Protobuf, Speeded Up Robust Features (SURF, работает на базе OpenCV). Таким образом, в Sirius воплотилось все то лучшее, что было разработано в сфере распознавания речи за последние 35 лет.

В состав пакета входит приложение Sirius, которое можно установить в Ubuntu, веб-фронтенд для браузера и набор базовых библиотек с реализацией различных алгоритмов поиска и распознавания. В основном код написан на С++, но для работы требуется много внешних компонентов на Java. В качестве базы данных для формирования ответов используется Википедия, а для распознавания речи — наработки проектов Sphinx, Kaldi и RASR. «Главное отличие нашей программы Sirius от ее коммерческих аналогов — она полностью бесплатна и может быть адаптирована под нужды пользователей», — поясняет автор разработки Джейсон Марс (Jason Mars).

Впервые Sirius продемонстрировали 14 марта 2015 года на технологической конференции в Стамбуле. Выпуск программы состоялся на следующий день. Sirius распознаёт не только речь, но и картинки и образы, а также понимает естественный язык человека. Например, программе можно показать фото любимого кафе и спросить, во сколько оно закрывается. Главное отличие программы от конкурентов заключается еще и в том, что пользователь может сделать Sirius узкоспециализированным помощником. К примеру, для выдачи академических консультаций ученому. Для реализации этого разработчики начали сотрудничество с IBM. «Фактически мы создали Linux среди умных цифровых помощников», — утверждает Марс.

Система вопросов и ответов была взята из проекта OpenEphyra, а способность распознавания изображений авторы позаимствовали у алгоритма SURF компании Qualcomm. По мнению создателей Sirius, уже к концу 2018 года доля голосовых запросов превысит обычные текстовые запросы. Если разработчики не сбавят темпов и у них не иссякнет энтузиазм, Sirius рискует стать лучшей в мире системой распознавания речи. За новостями проекта можно следить на сайте Джейсона Марса.

Один из создателей Sirius Джейсон Марс уверен в будущем проекта

Один из создателей Sirius Джейсон Марс уверен в будущем проекта

Заключение

Такова ситуация с распознаванием речи в Linux в данный момент. Во второй части этого обзора мы попробуем использовать некоторые из описанных проектов в повседневной работе на компьютере под управлением Linux. Прежде всего нас интересует работа с русским языком и голосовые команды для управления домашней электроникой. Получится ли превратить обычную квартиру в «умную» — узнаешь в следующей части.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *