Help — C# голосовое управление


Содержание

Делаем Soft Phone на c# (Голосовой движок)

Опубликовано Константин Туйков в 19.12.2020 19.12.2020

Итак, в прошлый раз мы остановились на голосовом движке для создания аудио — файлов. Речь велась об опенсорсном голосовом движке, который позволит нам уйти от необходимости озвучивать что-либо самостоятельно. RHVoice (по этому названию мы можем найти и скачать этот движок) дает в наше полное распоряжение аж четыре варианта голоса. На тембр и интонацию можно подобрать под себя, что чертовски приятно. И пускай этот движок во многом уступает по качеству звука и грамотности выговора своим платным товарищам (типа движка от acapela group), после некоторых манипуляций с звуком на выходе мы можем получить вполне внятное аудио-сообщение, которое донесет до человека все, что мы хотели сказать.

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

Для разработки нам понадобится Visual Studio. Для демонстрации работы нам будет достаточно консольного приложения. Создаем новый проект. Первое, что нам нужно сделать, это добавить ссылку на System.Speech. Указываем using System.Speech.Synthesis. Большего нам не понадобится.

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

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

  • SpeechSynthesizer.SelectVoice() — отвечает за выбор голоса, которым будет озвучено сообщение. Для выбора конкретного звучания передается имя голоса.
  • SpeechSynthesizer.Rate — темп, с которым будет говорить наша программа. Изменяется в диапазоне от -10 до 10. Чем ниже указывается это свойство, тем медленнее будем говорить. Однако следует учитывать, что значения меньше -4 на выходе дадут нечто вроде «пьяного робота», а при значение больше 7 скорости могут позавидовать и начинающие хип-хоп исполнители.
  • SpeechSynthesizer.Volume — громкость звучания. Указывается в пределах от 0 до 100. Думаю, тут пояснения излишни.
  • SpeechSynthesizer.SetOutputToWaveFile(path). Используется для указания пути, по которому должен быть сохранен аудио-файл. Стоит заметить, что для данный подход дает нам файлы с расширением .wav. Если использован этот метод, мы не услышим сообщение от программы.
  • SpeechSynthesizer.Speak(text). Именно эта команда отвечает за запуск озвучивания указанного текста. Если до нее не был указан метод SetOutputToWaveFile, мы незамедлительно услышим то, что написали, в обратном случае по указанному нами пути появится соответствующий файл.

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

Управление голосовыми командами на базе модуля распознавания голоса FZ0475

А помните, как несколько лет назад (а может быть и сейчас) была популярна идея управления светом в комнате при помощи хлопков в ладоши? А, ведь, это очень удобно, лежишь в постели, лень встать и хлопком в ладоши выключается свет или заходим домой, темно, нащупать выключатель долго, а тут с самого порога хлопок или два и свет уже горит. Мне кажется, что эта концепция актуальна до сих пор, но к ней можно применить уже более высокие технологии по сравнению с теми, что были 5 лет, 10 лет назад. Теперь за сравнительно небольшую сумму можно купить несколько деталей и запрограммировать конструкцию на подобные функции, о чем пойдет речь ниже.

Сегодня рассмотрим модуль, предназначенный для распознавания голосовых команд (в том числе и просто голоса в рамках записанной голосовой команды) – Voice recognition module V3.1 (V3) или часто встречающуюся кодировку название FZ0475.

В комплект поставки входит сам модуль (печатная плата очень хорошего качества), микрофон на гибкой ножке с разъемом 3,5 мм jack и угловые PLS контакты с шагом 2,56 мм для платы модуля (их можно не использовать, если подключаться к контактам модуля другим способом).

На сегодняшний день существует несколько видов модулей с аналогичным функционалом разных производителей и разработчиков или исполнений. Данный модуль распознавания голоса, на мой взгляд, имеет некий баланс между стоимостью, функционалом, удобством. Более мощным и существенно более дорогим будет модуль EasyVR. Более дешевыми и неудобными будут модули на базе LD3320 (неудобные как минимум потому, что нормальное описания на них найти не просто, а в остальном это уже субъективно).

Характеристики модуля Voice recognition module V3.1 (V3):

  • Напряжение питания – 5 вольт
  • Потребляемый ток – до 40 мА
  • Интерфейсы – UART, GPIO
  • Точность распознавания – 99% (в идеальных условиях)
  • Дальность действия – зависит от используемого микрофона, для штатного микрофона из комплекта дальность составляет 0,5 – 1 метр максимального расстояния при достаточно громком голосе, если же голос тихий, то придется подносить микрофон поближе ко рту

Модуль представляет собой небольшую аккуратную плату, на которой расположены главный микроконтроллер (черная клякса), разъем jack 3,5 мм для подключения микрофона, микросхема flash памяти, контакты GPIO, UART и питания, пара светодиодов и остальной необходимый обвес, необходимый для работы схемы – резисторы, конденсаторы, кварц. Компактный размер платы позволит без особых трудностей встраивать модуль в собственные разработки. Для увеличения дальности работы голосовых команд предположительно необходимо использовать микрофон с усилителем. При достижении приемлемой дальности модуль пригоден для использования в системах умного дома. Без доработок по улучшению дальности работы модуль можно использовать в настольных системах управления, а также в системах охраны (контроля и ограничения доступа). Со штатным микрофоном из-за небольшой дальности надежнее всего использовать модуль распознавания голоса как гарнитуру и беспроводным способом передавать команды контроллеру, который чем-то управляет, используя аккумулятор и беспроводные модули (например, HC-05 или HC-12 или подходящие любые другие). Модуль способен работать без внешнего микроконтроллера, так как производителем заложена функциональная самостоятельность, необходимо лишь однократно записать голосовые команды и задать настройки для самостоятельной работы при помощи внешнего устройства (ПК или МК).

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

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

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

Для функционирования и конфигурации модуля используется система команд. Общий вид кадра выглядит следующим образом:

Первые четыре команды 00, 01, 02, 03 используются для проверки состояния модуля и его настроек. Следующие шесть команд 10, 11, 12, 13, 14, 15 используются для изменения настроек модуля, среди которых управление портами вывода и настройки автостарта (auto load). Далее три команды 20,21, 22 используются для записи голосовых команд. Следующие три команды 30,31,32 используются для управления распознаванием голосовых команд. Команды 0A, 0D, FF используются только при возвращении данных самим модулем. Команд на самом деле не много и все это не так страшно, как кажется на первый взгляд в документации на модуль. Рассмотрим команды, необходимые для работы с модулем распознавания голоса. Не все из существующих команд несут практический характер.

Примечательно то, что модуль может работать без внешнего управляющего микроконтроллера, а также самостоятельно управлять чем-нибудь своими портами вывода. Для этого необходимо их настроить (команды 12, 13, 14).

Команда 12 – настроить порты вывода. Этой командой настраивается режим работы портов вывода модуля распознавания голоса.

Формат: | AA | 03 | 12 | MODE | 0A |

Где MODE может принимать четыре значения: 0 – импульсный режим (при срабатывании голосовой команды соответствующий команде вывод изменит свое состояние на время, устанавливаемое командой 13), 1 – режим переключателя (toggle или flip) (при каждом срабатывании голосовой команды вывод, соответствующий голосовой команде инвертируется), 2 – режим включения (при срабатывании голосовой команды вывод перейдет в состояние логической единицы и больше не перейдет в состояние логического нуля, сброс осуществляется командой 14), 3 – режим выключения (аналогично режиму включения только, наоборот, при срабатывании голосовой команды вывод переходит в состояние логического нуля).

Наиболее практичным является режим переключателя, не требующий лишних команд. Импульсный режим был бы хорош, но логика этого режима такова, что при срабатывании голосовой команды он однократно выдает логическую единицу, на время от 10 мс до 1 с. Это мало. Хотя, смотря какие требования к этому режиму, может быть полезно. Режимы включения и выключения реализованы неудобно, так как требуют исполнение дополнительных команд.

Команда 13 – задание длительности импульса соответствующего режима.

Формат: | AA | 03 | 13 | LEVEL | 0A |

Где LEVEL принимает значение от 00 до 0F (соответствует длительности от 10 мс до 1 с).

LEVEL длительность
0x00 10 мс
0x01 15 мс
0x02 20 мс
0x03 25 мс
0x04 30 мс
0x05 35 мс
0x06 40 мс
0x07 45 мс
0x08 50 мс
0x09 75 мс
0x0A 100 мс
0x0B 200 мс
0x0C 300 мс
0x0D 400 мс
0x0E 500 мс
0x0F 1 с

Команда 14 – сброс портов вывод до состояния заданного режимами включения или выключения.

Формат: | AA| 03 | 14 | FF | 0A | — сброс всех портов вывода

| AA| 03+n | 14 | IO0 | . | IOn | 0A | — сброс выбранных портов вывода

Где n – количество выводов, которые сбрасываются выборочно, IO0…IOn – перечисление этих выводов в кадре отправки данных.

Далее чтобы голосовые команды выполнялись их необходимо записать в модуль (обучить модуль). Здесь есть ограничение. Одновременно распознаваться могут только семь команд, хотя записать их можно значительно больше. Для того чтобы расширить диапазон голосовых команд, которые будут распознаваться используется система группировки (команда 32), которая управляется портами ввода модуля. Устанавливая конфигурацию сигналов на этих контактах, осуществляется выбор группы команд, которая будет распознаваться. Это обусловлено ограниченностью производительности используемого голосового контроллера модуля.

Итак, для того, чтобы записать голосовую команду необходимо воспользоваться командой 20 или 21 и при необходимости 22.

Команда 20 — запись одной или нескольких голосовых команд.

Формат: | AA| 03+n | 20 | R0 | . | Rn | 0A |

Где n — это количество записываемых голосовых команд (если записывается одна команда n=0, две команды n=1 и так далее в соответствии с общим форматом передачи команд Lenght — длина), R0. Rn номера голосовых команд (AA 03 20 03 0A — команда для записи третьей голосовой команды).

Команда 21 — запись одной голосовой команды и установка для нее подписи.

Формат: | AA| 03+SIGLEN | 21 | RECORD | SIG | 0A |

Где RECORD — номер голосовой команды, SIG — подпись (может состоять из нескольких байт, таким образом, что каждый байт может соответствовать кодировке символа алфавита при необходимости), SIGLEN — количество байт, из которых состоит подпись.

Команда 22 — добавление или удаление подписи для выбранной голосовой команды.

Формат: | AA | 03+SIGLEN | 22 | RECORD | SIG | 0A | — добавление подписи

| AA | 03 | 22 | RECORD | 0A | — удаление подписи

Где RECORD — номер голосовой команды, SIG — подпись, SIGLEN — количество байт, из которых состоит подпись

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

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

После того, как в модуле записаны голосовые команды ничего происходить не будет до тех пор, пока эти команды не поместить в «распознаватель» (Recognizer) модуля. Для этого необходимо воспользоваться командой 30. После выполнения этой команды модуль начнет ожидать совпадения голосовой команды с сохраненными образцами. Одновременно распознавать можно лишь сем команд. При этом будет медленно моргать желтый (оранжевый) светодиод на плате модуля.

Команда 30 — загрузить записи в «распознаватель» (Recognizer) модуля.

Формат: | AA| 2+n | 30 | R0 | . | Rn | 0A |

Где R0. Rn — сохраненные голосовые команды, n — количество голосовых команд (не может быть больше 7).


Если будет произнесена голосовая команда и модуль ее распознает по UART будут отправлены данные с командой 0D и информацией о распознанной команде.

Формат ответа следующий: | AA | 07 | 0D | 00 | GRPM | R | RI | SIGLEN | SIG | 0A |

Где GRPM — информация о группе, к которой относится команда (если используется), R — распознанная голосовая команда (по этим данным можно различать команда между собой если не используются подписи), RI — индекс команды в распознавателе, SIGLEN — длина подписи в байтах, SIG — подпись (если используется).

Ну и наконец, если модуль должен работать самостоятельно, то необходимо воспользоваться командой 15 для автоматического запуска по преднастройкам распознавателя. В этом случае модуль распознавания голоса будет работать самостоятельно без необходимости инициализации после включения.

Команда 15 — установка автозапуска распознавателя при включении.

Формат: | AA| 03 | 15 | 00 | 0A | — отключение функции автозапуска

| AA| 03+n | 15 | BITMAP | R0 | . | Rn | 0A | — установка функции автозапуска

Где BITMAP — метка количества голосовых команд, помещаемых в распознаватель, R0. Rn — сохраненные голосовые команды, помещаемые в распознаватель, n — количество команд.

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

Таким образом, при помощи системы команд можно достаточно гибко настраивать модуль распознавания голоса для использования в различных целях. Если же простого управления портами вывода модуля недостаточно, то модуль распознавания голоса можно подключать к другим устройствам посредством UART или GPIO. Для беспроводного подключения можно использовать ранее рассмотренные модули HC-12.

При помощи беспроводных модулей можно подключать модуль распознавания голоса к любым устройствам, где это необходимо. Например, подключим его к микроконтроллеру, который относительно получаемых данные о распознавании голосовых команд будет управлять светодиодами. Беспроводные модули HC-12 позволяют передавать данные в двух направлениях, поэтому при необходимости для микроконтроллера можно написать код инициализации голосового модуля и записи голосовых команд. В нашем случае под управлением ПК в модуле уже записано несколько голосовых команд и настроен автозапуск распознавания при включении питания, поэтому для микроконтроллера пропишем только прием данных и управление светодиодами относительно этих данных. Микроконтроллер STM32F103C8T6 использует USART1 для приема данных и контакты PB10. PB15, настроенные на выход, которыми управляет светодиодами. Исходный код расположен в приложения в конце статьи.

Немного о результатах

Распознавание голоса идет не совсем точное. Это зависит от выбранных команд и голоса пользователя. При тестировании мною было обнаружено несколько отрицательных моментов. При обучении командам модуля были выбраны голосовые команды «раз» и «два». Команда «два» проходила всегда четко, а вот команда «раз» достаточно часто определялась как команда «два» и соответственно выполнялся код второй команды. Далее при попытке отдавать голосовые команды по-английски (а они не записывались в голосовой модуль) практически всегда команда «one» определялась как «два». Возможно, все дело в произношении, интонации и прочих аспектах человеческого голоса, заложенных в алгоритм кодировки голосового модуля произносимых команд. Однако эти секреты производители в открытом доступе не дают. Кроме этого на качество распознавания влияют внешние шумовые условия – гул с улицы, шум вентилятора, случайные звуки и прочее. Производитель заостряет внимание на то, что высокий уровень точности распознавания имеет место в идеальных условиях. Идея использования микрофона с усилителем, конечно, увеличит дальность работы устройства, но так же увеличит вероятность и ошибки, так как усиление голоса будет происходить и с усилением шумов.

Модуль распознавания голоса четко чувствует интонацию и искажение собственного голоса, однако у людей с похожими голосами модуль сработает одинаково – распознает команду, в противном случае этого не произойдет.

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

Распознавание речи с применением настольных .NET-приложений

Продукты и технологии:

Visual Studio, C#, .NET Speech Libraries

В статье рассматриваются:

  • добавление поддержки распознавания речи к консольному приложению;
  • обработка распознаваемой речи;
  • установка библиотек для распознавания речи;
  • сравнение Microsoft.Speech и System.Speech;
  • добавление поддержки распознавания речи к приложению Windows Forms.

С появлением Windows Phone Cortana, персонального помощника, активируемого речью (равно как и аналога от фруктовой компании, о котором нельзя упоминать всуе), приложения с поддержкой речи стали занимать все более значимое место в разработке ПО. В этой статье я покажу, как начать работу с распознаванием и синтезом речи в консольных Windows-приложениях, приложениях Windows Forms и Windows Presentation Foundation (WPF).

Заметьте, что также можете добавить речевые возможности в приложения Windows Phone, веб-приложения ASP.NET, приложения Windows Store, Windows RT и Xbox Kinect, но соответствующие методики отличаются от рассматриваемых в этой статье.

Хороший способ понять, что именно будет обсуждаться в этой статье, — взглянуть на экранные снимки двух разных демонстрационных программ на рис. 1 и 2. После запуска консольное приложение на рис. 1 немедленно произносит фразу «I am awake». Конечно, вы не сможете услышать демонстрационное приложение, читая эту статью, поэтому оно отображает текст того, что говорит компьютер. Потом пользователь произносит команду «Speech on». Демонстрационное приложение откликается распознанным текстом, а затем на внутреннем уровне включает прослушивание и реагирует на запросы сложить два числа.

Рис. 1. Распознавание и синтез речи в консольном приложении

Рис. 2. Распознавание речи в приложении Windows Forms

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

Далее пользователь сказал «Speech off» — голосовую команду, которая деактивирует прослушивание команд для сложения чисел, но не отключает полностью распознавание речи. После этой речевой команды следующая команда на сложение единицы с двойкой была проигнорирована. Наконец, пользователь снова включил прослушивание команд и произнес бессмысленную команду «Klatu barada nikto», которую приложение распознало как команду на полную деактивацию распознавания речи и свое завершение.

На рис. 2 показано приложение Windows Forms с включенным холостым распознаванием речи (dummy speech-enabled). Это приложение распознает произносимые команды, но не реагирует на них голосовым выводом. При первом запуске приложения флажок Speech On не был установлен, указывая на то, что распознавание речи не активно. Пользователь установил этот флажок, а затем произнес «Hello». Приложение откликнулось выводом распознанного текста в элементе управления ListBox в нижней части окна.

Затем пользователь произнес: «Set text box 1 to red». Приложение распознало речь и откликнулось: «Set text box 1 red», что почти (но не совсем) точно соответствует тому, что сказал пользователь. Хотя на рис. 2 этого не видно, текст в элементе управления TextBox в верхней части окна стал действительно красным.

Потом пользователь произнес: «Please set text box 1 to white». Приложение распознало это как «set text box 1 white» и сделало именно это. В заключение пользователь сказал: «Good-bye», и приложение вывело этот текст, но ничего не стало делать с Windows Forms, хотя могло бы, например, сбросить флажок Speech On.

Использовать объект синтезатора довольно просто.

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

Добавление поддержки распознавания речи в консольное приложение

Чтобы создать демонстрацию, показанную на рис. 1, я запустил Visual Studio и создал новое консольное приложение на C# с названием ConsoleSpeech. Я успешно использовал речевые средства с Visual Studio 2010 и 2012, но должна подойти любая сравнительно недавняя версия. После загрузки кода шаблона в редактор я переименовал файл Program.cs в окне Solution Explorer в более описательный ConsoleSpeechProgram.cs, и Visual Studio переименовала класс Program за меня.

Далее я добавил ссылку на файл Microsoft.Speech.dll, который находится в C:\ProgramFiles (x86)\Microsoft SDKs\Speech\v11.0\Assembly. Эта DLL отсутствовала на моем компьютере, и мне пришлось скачивать ее. Установка файлов, необходимых для добавления распознавания и синтеза речи в приложение, не столь уж и тривиальна. Я подробно объясню процесс установки в следующем разделе, а пока допустим, что Microsoft.Speech.dll есть в вашей системе.

Добавив ссылку на речевую DLL, я удалил из верхней части кода все выражения using, кроме указывавшего на пространство имен System верхнего уровня. Потом я добавил выражения using для пространств имен Microsoft.Speech.Recognition, Microsoft.Speech.Synthesis и System.Globalization. Первые два пространства имен сопоставлены с речевой DLL. Заметьте: существуют и такие пространства имен, как System.Speech.Recognition и System.Speech.Synthesis, что может сбить с толку. Вскоре я поясню разницу между ними. Пространство имен Globalization было доступно по умолчанию и не требовало добавления новой ссылки в проект.

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

Рис. 3. Исходный код демонстрационного консольного приложения

После выражений using демонстрационный код начинается так:

Объект SpeechSynthesizer на уровне класса дает возможность приложению синтезировать речь. Объект SpeechRecognitionEngine позволяет приложению прослушивать и распознавать произносимые слова или фразы. Булева переменная done определяет, когда завершается приложение в целом. Булева переменная speechOn управляет тем, слушает ли приложение какие-то команды, кроме команды на выход из программы.

Здесь идея в том, что консольное приложение не принимает набираемый с клавиатуры ввод, поэтому оно всегда слушает команды. Однако, если speechOn равна false, распознается и выполняется только команда на выход из программы; прочие команды распознаются, но игнорируются.

Метод Main начинается так:

Экземпляр объекта SpeechSynthesizer был создан при его объявлении. Использовать объект синтезатора довольно просто. Метод SetOutputToDefaultAudioDevice отправляет вывод на динамики, подключенные к вашему компьютеру (вывод можно отправлять и в файл). Метод Speak принимает строку, а затем произносит ее. Вот так все несложно.

Распознавание речи гораздо сложнее ее синтеза. Метод Main продолжает созданием объекта распознавателя:

Сначала в объекте CultureInfo указывается распознаваемый язык, в данном случае United States English. Объект CultureInfo находится в пространстве имен Globalization, на которое мы сослались с помощью выражения using. Затем после вызова конструктора SpeechRecognitionEngine голосовой ввод назначается аудиоустройству по умолчанию — чаще всего микрофону. Заметьте, что в большинстве лэптопов есть встроенный микрофон, но на настольных компьютерах потребуется внешний микрофон (в наши дни он часто комбинируется с наушниками).

Ключевым методом для объекта распознавателя является обработчик событий SpeechRecognized. При использовании Visual Studio, если вы введете «sre.SpeechRecognized +=» и подождете долю секунды, IntelliSense автоматически закончит ваше выражение именем обработчика событий — sre_SpeechRecognized. Советую нажать клавишу Tab, чтобы согласиться с предложенным вариантом и использовать это имя по умолчанию.

Цукерберг рекомендует:  Скрипт - Что лучше изучать Node.js+CoffeeScript or Python

Далее демонстрационная программа настраивает возможность распознавания команд для сложения двух чисел:

Три основных объекта здесь — это набор Choices, шаблон GrammarBuilder и управляющий Grammar. Когда я создаю Grammar для распознавания, я начинаю с перечисления некоторых конкретных примеров того, что мне нужно распознавать. Скажем, «What is one plus two?» и «What is three plus four?».

Потом я определяю соответствующий универсальный шаблон, например «What is plus ?». Шаблоном является GrammarBuilder, а конкретные значения, которые передаются шаблону, — это набор Choices. Объект Grammar инкапсулирует шаблон и Choices.

В демонстрационной программе я ограничиваю для сложения от 1 до 4 и добавляю их как строки в набор Choices. Более эффективный подход:

Я представляю вам менее эффективный подход к созданию набора Choices по двум причинам. Во-первых, добавление одной строки единовременно было единственным подходом, который я видел в других примерах с распознаванием речи. Во-вторых, вы могли подумать, что добавление одной строки единовременно вообще не должно работать; Visual Studio IntelliSense в реальном времени показывает, что одна из перегрузок Add принимает параметр типа params string[] phrases. Если вы не заметили ключевое слово params, то, возможно, сочли, что метод Add принимает только массивы строк, а одну строку — нет. Но это не так: он принимает и то, и другое. Я советую передавать массив.

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

После создания Choices для заполнения слотов GrammarBuilder демонстрационная программа создает GrammarBuilder, а затем управляющий Grammar:


Похожий шаблон демонстрационная программа использует при создании Grammar для команд, относящихся к старту и остановке:

Грамматики можно определять очень гибко. Здесь команды «speech on», «speech off» и «klatu barada nikto» помещаются в одну грамматику, так как они логически связаны. Эти три команды можно было бы определить в трех разных грамматиках или поместить команды «speech on» и «speech off» в одну грамматику, а команду «klatu barada nikto» — во вторую.

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

Аргумент RecognizeMode.Multiple необходим, когда у вас более одной грамматики, что будет во всех программах, кроме самых простейших. Метод Main завершается следующим образом:

Странно выглядящий пустой цикл while позволяет сохранить работающей оболочку консольного приложения. Цикл будет завершен, когда булева переменная done уровня класса будет установлена в true обработчиком событий распознавания речи.

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

Код обработки событий, связанных с распознаванием речи, начинается так:

Распознанный текст хранится в свойстве Result.Text объекта SpeechRecognizedEventArgs. Кроме того, можно использовать набор Result.Words. Свойство Result.Confidence хранит значение от 0.0 до 1.0, которое является примерной оценкой того, насколько произнесенный текст соответствует любой из грамматик, связанных с распознавателем. Демонстрационная программа инструктирует обработчик событий игнорировать текст с низкой достоверностью (low confidence) распознанного текста.

Значения Confidence сильно зависят от сложности ваших грамматик, качества микрофона и других факторов. Например, если демонстрационной программе нужно распознавать лишь числа от 1 до 4, то значения достоверности на моем компьютере обычно находятся на уровне 0.75. Но, если грамматика должна распознавать числа от 1 до 100, значения достоверности падают приблизительно до 0.25. Если в двух словах, то обычно вы должны экспериментировать со значениями достоверности, чтобы добиться хороших результатов распознавания речи.

Далее обработчик событий распознавателя речи включает и отключает распознавание:

Хотя, возможно, это не совсем очевидно поначалу, эта логика должна иметь смысл, если вдуматься в нее. Затем обрабатывается секретная команда выхода:

Заметьте, что механизм распознавания речи может на самом деле распознавать бессмысленные слова. Если объект Grammar содержит слова, отсутствующие во встроенном словаре этого объекта, Grammar пытается по возможности идентифицировать такие слова, используя семантическую эвристику, и обычно весьма успешно. Вот почему я использовал «klatu» вместо правильного «klaatu» (из одного старого научно-фантастического фильма).

Также заметьте, что вы не обязаны обрабатывать весь распознанный Grammar текст («klatu barada nikto») — нужно лишь иметь достаточно информации для уникальной идентификации грамматической фразы («klatu» и «barada»).

Далее обрабатываются команды сложения двух чисел, и обработчик событий, класс Program и пространство имен заканчиваются следующим кодом:

Обратите внимание на то, что текст в Results.Text чувствителен к регистру букв («What» и «what»). Распознав фразу, ее можно разобрать на конкретные слова. В данном случае распознанный текст имеет форму «What is x plus y», поэтому «What» помещается в words[0], а два складываемых числа (как строки) сохраняются в words[2] и words[4].

Установка библиотек

Объяснение демонстрационной программы подразумевает, что все необходимые речевые библиотеки установлены на вашем компьютере. Чтобы создавать и запускать демонстрационные программы, нужно установить четыре пакета: SDK (обеспечивает возможность создания демонстраций в Visual Studio), исполняющую среду (выполняет демонстрации после их создания), распознаваемый и синтезируемый (произносимый программой) языки.

Чтобы установить SDK, поищите в Интернете по словосочетанию «Speech Platform 11 SDK». Это приведет вас на нужную страницу в Microsoft Download Center (рис. 4). Щелкнув кнопку Download, вы увидите варианты, показанные на рис. 5. SDK поставляется в 32- и 64-разрядной версиях. Я настоятельно советую использовать 32-разрядную версию независимо от разрядности вашей системы. 64-разрядная версия не взаимодействует с некоторыми приложениями.

Рис. 4. Основная страница установки SDK в Microsoft Download Center

Рис. 5. Установка Speech SDK

Вам не нужно ничего, кроме одного файла .msi под x86 (для 32-разрядных систем). Выбрав этот файл и щелкнув кнопку Next, вы можете запустить программу установки прямо отсюда. Речевые библиотеки не дают особой обратной связи насчет того, когда установка закончена, поэтому не ищите никаких сообщений об успешном завершении.

Далее вы должны установить исполняющую среду. Найдя основную страницу и щелкнув кнопку Next, вы увидите варианты, показанные на рис. 6.

Рис. 6. Установка исполняющей среды

Крайне важно выбрать ту же версию платформы (в демонстрации — 11) и разрядность (32 [x86] или 64 [x64]), что и у SDK. И вновь я настоятельно советую 32-разрядную версию, даже если вы работаете в 64-разрядной системе.

Затем можно установить распознаваемый язык (recognition language). Страница скачивания приведена на рис. 7. В демонстрационной программе используется файл MSSpeech_SR_en-us_TELE.msi (English-U.S.). SR расшифровывается как распознавание речи (speech recognition), а TELE — как телефония; это означает, что распознаваемый язык предназначен для работы с низкокачественным аудиовходом, например от телефона или настольного микрофона.

Рис. 7. Установка распознаваемого языка

Наконец, вы можете установить язык и голос для синтеза речи. Страница скачивания приведена на рис. 8. Демонстрационная программа использует файл MSSpeech_TTS_en-us_Helen.msi. TTS (text-to-speech), по сути, является синонимом синтеза речи (speech synthesis). Обратите внимание на два доступных голоса English, U.S. Есть и другие голоса English, но не U.S. Создание файлов языка синтеза — задача весьма сложная. Однако можно приобрести и установить другие голоса от множества компаний.

Рис. 8. Установка голоса и языка синтеза

Любопытно, что, хотя язык распознавания речи и голос/язык синтеза речи на самом деле являются совершенно разными вещами, оба пакета являются вариантами на одной странице скачивания. Download Center UI позволяет отметить как язык распознавания, так и язык синтеза, но попытка одновременной их установки оказалась для меня катастрофичной, поэтому я рекомендую устанавливать их по отдельности.

Сравнение Microsoft.Speech с System.Speech

Если вы новичок в распознавании и синтезе речи для Windows-приложений, вы можете легко запутаться в документации, потому что существует несколько речевых платформ. В частности, помимо библиотеки Microsoft.Speech.dll, используемой демонстрационными программами в этой статье, есть библиотека System.Speech.dll, являющаяся частью операционной системы Windows. Эти две библиотеки похожи в том смысле, что их API почти, но не полностью идентичны. Поэтому, если вы отыскиваете примеры обработки речи в Интернете и видите фрагменты кода, а не полные программы, то совершенно не очевидно, относится данный пример к System.Speech или Microsoft.Speech.

Если вы новичок в обработке речи, используйте для добавления поддержки речи в .NET-приложение библиотеку Microsoft.Speech, а не System.Speech.

Хотя обе библиотеки имеют общую основную кодовую базу и похожие API, они определенно разные. Неокторые ключевые различия суммированы в табл. 1.

Табл. 1. Основные различия между Microsoft.Speech и System.Speech

Microsoft.Speech.dll System.Speech.dll
Требует отдельной установки Часть ОС (Windows Vista+)
Можно паковать с приложениями Не подлежит редистрибуции
Требует конструирования объектов Grammar Использует объекты Grammar или свободную диктовку
Без обучения пользователем Обучение под конкретного пользователя
API с управляемым кодом (C#) API с неуправляемым кодом (C++)

System.Speech DLL — часть ОС, поэтому она установлена в каждой системе Windows. Microsoft.Speech DLL (и связанные с ней исполняющая среда и языки) нужно скачивать и устанавливать в систему. Распознавание с применением System.Speech обычно требует обучения под конкретного пользователя, когда пользователь начитывает какой-то текст, а система учится понимать произношение, свойственное этому пользователю. Распознавание с применением Microsoft.Speech работает сразу для любого пользователя. System.Speech может распознавать практически любые слова (это называет свободной диктовкой). Microsoft.Speech будет распознавать лишь те слова и фразы, которые имеются в объекте Grammar, определенном в программе.

Добавление поддержки распознавания речи к приложению Windows Forms

Процесс добавления поддержки распознавания и синтеза речи к приложению Windows Forms или WPF похож на таковой для консольного приложения. Чтобы создать демонстрационную программу, показанную на рис. 2, я запустил Visual Studio, создал новое приложение C# Windows Forms и переименовал его в WinFormSpeech.

После загрузки кода шаблона в редактор я добавил ссылку на файл Microsoft.Speech.dll в окне Solution Explorer — так же, как я сделал это в консольной программе. В верхней части исходного кода я удалил ненужные выражения using, оставив только ссылки на пространства имен System, Data, Drawing и Forms. Затем добавил два выражения using для пространств имен Microsoft.Speech.Recognition и System.Globalization.

Демонстрация на основе Windows Forms не использует синтез речи, поэтому я не ссылаюсь на библиотеку Microsoft.Speech.Synthesis. Добавление синтеза речи в приложение Windows Forms осуществляется точно так же, как и в консольном приложении.

В Visual Studio в режиме проектирования я перетащил на Form элементы управления TextBox, CheckBox и ListBox. Дважды щелкнул CheckBox, и Visual Studio автоматически создал скелет метода-обработчика событий CheckChanged.

Вспомните, что демонстрационная консольная программа сразу же начинала прослушивать произносимые команды и продолжала делать это вплоть до своего завершения. Этот подход можно применить и в приложении Windows Forms, но вместо него я решил дать возможность пользователю включать и выключать распознавание речи с помощью элемента управления CheckBox (т. е. с помощью флажка).

Исходный код в файле Form1.cs демонстрационной программы, где определен частичный класс, представлен на рис. 9. Объект механизма распознавания речи объявляется и создается как член Form. В конструкторе Form я подключаю обработчик событий SpeechRecognized, а затем создаю и загружаю два объекта Grammars:

Рис. 9. Добавление поддержки распознавания речи в Windows Forms

Я мог бы создать два объекта Grammar напрямую, как в консольной программе, но вместо этого, что сделать код чуточку понятнее, определил два вспомогательных метода (GetHelloGoodbyeGrammar и GetTextBox1TextGrammar), которые и выполняют эту работу.

Заметьте, что конструктор Form не вызывает метод RecognizeAsync, а значит, распознавание речи не будет активно сразу после запуска приложения.

Вспомогательный метод GetHelloGoodbyeGrammar следует тому же шаблону, описанному ранее в этой статье:

Аналогично вспомогательный метод, который создает объект Grammar для присваивания текста элементу управления TextBox в Windows Forms, не несет никаких сюрпризов:

Этот вспомогательный метод будет распознавать фразу «set text box 1 red». Однако пользователь не обязан точно проговаривать эту фразу. Например, он мог бы произнести: «Please set the text in text box 1 to red», и механизм распознавания речи все равно опознал бы фразу как «set text box 1 red» — пусть и с более низким значением достоверности, чем при точном совпадении с шаблоном Grammar. Другими словами, создавая объекты Grammar, вы не обязаны принимать во внимание все вариации фразы. Это радикально упрощает использование распознавания речи.

Обработчик событий для CheckBox определен так:

Объект механизма распознавания речи, sre (speech recognition engine), всегда существует в течение всего срока жизни приложения Windows Forms. Этот объект активируется и деактивируется вызовами методов RecognizeAsync и RecognizeAsyncCancel, когда пользователь соответственно переключает CheckBox.

Определение обработчика событий SpeechRecognized начинается с:

Помимо более-менее постоянно используемых свойств Result.Text и Result.Confidence, объект Result имеет несколько других полезных, но более сложных свойств, которые вы, возможно, захотите исследовать; например, Homophones и ReplacementWordUnits. Кроме того, механизм распознавания речи предоставляет несколько полезных событий вроде SpeechHypothesized.

Обработчик событий завершается таким кодом:


Распознанный текст выводится в ListBox, используя делегат MethodInvoker. Поскольку распознаватель речи выполняется в другом потоке, отличном от UI-потока Windows Forms, попытка прямого доступа к ListBox наподобие:

закончится неудачей и приведет к генерации исключения. Альтернатива делегату MethodInvoker — применение делегата Action:

Теоретически, в этой ситуации использование делегата MethodInvoker чуть эффективнее, чем Action, так как MethodInvoker является частью пространства имен Windows.Forms, а значит, специфичен для приложений Windows Forms. Делегат Action более универсален. Этот пример показывает, что вы можете полностью манипулировать приложением Windows Forms через механизм распознавания речи — это невероятно мощная и полезная возможность.

Заключение

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

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

Другое возможное применение речи в консольной программе — распознавание команд вроде «Launch Notepad» и «Launch Word». Иначе говоря, такая консольная программа может использоваться на вашем компьютере для выполнения действий, которые в ином случае потребовали бы множества манипуляций с клавиатурой и мышью.

Джеймс Маккафри (Dr. James McCaffrey) работает на Microsoft Research в Редмонде (штат Вашингтон). Принимал участие в создании нескольких продуктов Microsoft, в том числе Internet Explorer и Bing. С ним можно связаться по адресу jammc@microsoft.com.

Выражаю благодарность за рецензирование статьи экспертам Microsoft Research Робу Грюну (Rob Gruen), Марку Маррону (Mark Marron) и Кертису фон Ве (Curtis von Veh).

Краткое руководство. Распознавание речи с микрофона Quickstart: Recognize speech from a microphone

В этом кратком руководстве для интерактивного распознавания речи из звуковых данных, полученных с микрофона, используется пакет SDK службы «Речь». In this quickstart you will use the Speech SDK to interactively recognize speech from audio data captured from a microphone. После выполнения нескольких предварительных требований для распознавания речи с микрофона необходимо выполнить всего четыре шага: After satisfying a few prerequisites, recognizing speech from a microphone only takes four steps:

Если вы предпочитаете сразу перейти к работе, просмотрите или скачайте все примеры для пакета SDK службы «Речь» для C# на сайте GitHub. If you prefer to jump right in, view or download all Speech SDK C# Samples on GitHub. В противном случае ознакомьтесь с инструкциями. Otherwise, let’s get started.

Выберите целевую среду Choose your target environment

Предварительные требования Prerequisites

Перед началом работы нужно: Before you get started, make sure to:

Откройте проект в Visual Studio. Open your project in Visual Studio

Сначала необходимо убедиться, что проект открыт в Visual Studio. The first step is to make sure that you have your project open in Visual Studio.

  1. Запустите Visual Studio 2020. Launch Visual Studio 2020.
  2. Загрузите проект и откройте Program.cs . Load your project and open Program.cs .

Добавление стандартного кода Start with some boilerplate code

Добавим код, который выступает в качестве основы для нашего проекта. Let’s add some code that works as a skeleton for our project. Имейте в виду, что вы создали асинхронный метод RecognizeSpeechAsync() . Make note that you’ve created an async method called RecognizeSpeechAsync() .

Создание конфигурации службы «Речь» Create a Speech configuration

Перед инициализацией объекта SpeechRecognizer необходимо создать конфигурацию, использующую ключ и регион подписки. Before you can initialize a SpeechRecognizer object, you need to create a configuration that uses your subscription key and subscription region. Вставьте код в метод RecognizeSpeechAsync() . Insert this code in the RecognizeSpeechAsync() method.

В этом примере для создания SpeechConfig используется метод FromSubscription() . This sample uses the FromSubscription() method to build the SpeechConfig . Полный список доступных методов см. в статье SpeechConfig Class (Класс SpeechConfig). For a full list of available methods, see SpeechConfig Class.

Инициализация SpeechRecognizer Initialize a SpeechRecognizer

Теперь создадим объект SpeechRecognizer . Now, let’s create a SpeechRecognizer . Этот объект создается внутри оператора using для обеспечения надлежащего выпуска неуправляемых ресурсов. This object is created inside of a using statement to ensure the proper release of unmanaged resources. Вставьте этот код в метод RecognizeSpeechAsync() непосредственно под конфигурацией службы «Речь». Insert this code in the RecognizeSpeechAsync() method, right below your Speech configuration.

Распознавание фразы Recognize a phrase

В объекте SpeechRecognizer необходимо вызвать метод RecognizeOnceAsync() . From the SpeechRecognizer object, you’re going to call the RecognizeOnceAsync() method. С помощью этого метода служба «Речь» узнает, что для распознавания отправляется одна фраза и что после идентификации фразы необходимо остановить распознавание речи. This method lets the Speech service know that you’re sending a single phrase for recognition, and that once the phrase is identified to stop recognizing speech.

В операторе using добавьте этот код: [!code-csharp ] Inside the using statement, add this code: [!code-csharp ]

Отображение результатов распознавания (или ошибок) Display the recognition results (or errors)

Когда служба «Речь» возвращает результат распознавания, необходимо с ним что-то сделать. When the recognition result is returned by the Speech service, you’ll want to do something with it. Мы оставим его как есть и выведем результат в консоли. We’re going to keep it simple and print the result to console.

В операторе using под RecognizeOnceAsync() добавьте этот код: [!code-csharp ] Inside the using statement, below RecognizeOnceAsync() , add this code: [!code-csharp ]

Проверка кода Check your code

На этом этапе код должен выглядеть так: [!code-csharp ] At this point, your code should look like this: [!code-csharp ]

Создание и запуск приложения Build and run your app

Теперь можно приступать к созданию приложения и проверке распознавания речи, используя службу «Речь». Now you’re ready to build your app and test our speech recognition using the Speech service.

  1. Скомпилируйте код. В строке меню Visual Studio последовательно выберите Сборка >Собрать решение. Compile the code — From the menu bar of Visual Studio, choose Build >Build Solution.
  2. Запустите приложение. В строке меню выберите Отладка >Начать отладку или нажмите клавишу F5. Start your app — From the menu bar, choose Debug >Start Debugging or press F5.
  3. Начните распознавание. Вам будет предложено произнести фразу на английском языке. Start recognition — It’ll prompt you to speak a phrase in English. Речь, записанная в виде текста, отправляется в службу «Речь» и выводится в консоли. Your speech is sent to the Speech service, transcribed as text, and rendered in the console.

Дополнительная информация Next steps

Пакет SDK службы «Речь» для Unity поддерживает Windows Desktop (x86 и x64) или универсальную платформу Windows (x86, x64, ARM и ARM64), Android (x86, ARM32/64) и iOS (симулятор x64, ARM32 и ARM64). The Speech SDK for Unity supports Windows Desktop (x86 and x64) or Universal Windows Platform (x86, x64, ARM/ARM64), Android (x86, ARM32/64) and iOS (x64 simulator, ARM32 and ARM64)

Предварительные требования Prerequisites

Перед началом работы нужно: Before you get started, make sure to:

  • Создать ресурс службы «Речь» Azure. Create an Azure Speech Resource
  • Настроить среду разработки. Setup your development environment
  • Создать пустой пример проекта. Если вы уже сделали это, отлично. Create an empty sample project If you’ve already done this, great. Давайте продолжим. Let’s keep going.

Создание проекта Unity Create a Unity project

Откройте Unity. Open Unity. Если вы используете Unity в первый раз, появится окно Unity Hub . If you’re using Unity for the first time, the Unity Hub window appears. (Можно непосредственно открыть Unity Hub, чтобы отобразилось это окно.) (You can also open Unity Hub directly to get to this window.)

Нажмите кнопку Создать. Select New. Отобразится окно создания проекта Unity . The Create a new project with Unity window appears.

В поле Project Name (Имя проекта) введите csharp-unity. In Project Name, enter csharp-unity.

В области Templates (Шаблоны) выберите 3D. In Templates, if 3D isn’t already selected, select it.

В поле Location (Расположение) укажите или создайте папку, в которой будет сохранен проект. In Location, select or create a folder to save the project in.

Нажмите кнопку Создать. Select Create.


Через некоторое время отобразится окно Unity Editor. After a bit of time, the Unity Editor window appears.

Добавление пользовательского интерфейса Add UI

Теперь добавим в сцену минимальный пользовательский интерфейс. Now let’s add a minimal UI to our scene. Он состоит из кнопки для запуска распознавания речи и текстового поля для отображения результата. This UI consists of a button to trigger speech recognition and a text field to display the result. В окне иерархии показан пример сцены, создаваемой в проекте Unity. In the Hierarchy window, a sample scene is shown that Unity created with the new project.

В верхней части окна Hierarchy (Иерархия) выберите Create > UI > Button (Создать > Пользовательский интерфейс > Кнопка). At the top of the Hierarchy window, select Create > UI > Button.

Будут созданы три игровых объекта, отображаемых в окне Hierarchy (Иерархия): объект Button, вложенный в объект Canvas, и объект EventSystem. This action creates three game objects that you can see in the Hierarchy window: a Button object, a Canvas object containing the button, and an EventSystem object.

В окне Inspector (Инспектор), расположенном по умолчанию справа, задайте значение свойствам Pos X и Pos Y, чтобы кнопка была расположена посередине холста. In the Inspector window (by default on the right), set the Pos X and Pos Y properties to , so the button is centered in the middle of the canvas.

В окне Hierarchy (Иерархия) выберите Create > UI > Text (Создать > Пользовательский интерфейс > Текст), чтобы создать объект Text. In the Hierarchy window, select Create > UI > Text to create a Text object.

В окне Inspector (Инспектор) свойствам Pos X и Pos Y задайте значения и 120, а свойствам Width (Ширина) и Height (Высота) — значения 240 и 120. In the Inspector window, set the Pos X and Pos Y properties to and 120, and set the Width and Height properties to 240 and 120. При таких значениях текстовое поле и кнопка не будут перекрываться. These values ensure that the text field and the button don’t overlap.

По завершении представление сцены должно выглядеть примерно так: When you’re done, the Scene view should look similar to this screenshot:

Добавление примеров кода Add the sample code

Чтобы добавить пример кода скрипта в проект Unity, выполните следующие действия: To add the sample script code for the Unity project, follow these steps:

В окне проекта выберите Create > C# script (Создать > Скрипт C#), чтобы добавить новый скрипт C#. In the Project window, select Create > C# script to add a new C# script.

Назовите скрипт HelloWorld . Name the script HelloWorld .

Дважды щелкните HelloWorld , чтобы изменить только что созданный скрипт. Double-click HelloWorld to edit the newly created script.

Чтобы настроить редактор кода для использования в Unity для редактирования, выберите Edit > Preferences (Правка > Настройки) и перейдите к настройкам External Tools (Внешние инструменты). To configure the code editor to be used by Unity for editing, select Edit > Preferences, and then go to the External Tools preferences. Дополнительные сведения см. в руководстве пользователя по Unity. For more information, see the Unity User Manual.

Замените имеющийся скрипт следующим кодом. Replace the existing script with the following code:

Найдите строку YourSubscriptionKey и замените ее ключом подписки службы «Речь». Find and replace the string YourSubscriptionKey with your Speech Services subscription key.

Найдите строку YourServiceRegion и замените ее на регион своей подписки. Find and replace the string YourServiceRegion with the region associated with your subscription. Например, если вы используете бесплатную пробную версию, ваш регион — westus . For example, if you’re using the free trial, the region is westus .

Сохраните изменения в скрипте. Save the changes to the script.

Теперь вернитесь в Unity Editor и добавьте скрипт в качестве компонента одного из игровых объектов: Now return to the Unity Editor and add the script as a component to one of your game objects:

В окне Hierarchy (Иерархия) выберите объект Canvas. In the Hierarchy window, select the Canvas object.

В окне Inspector (Инспектор) нажмите кнопку Add Component (Добавить компонент). In the Inspector window, select the Add Component button.

В раскрывающемся списке найдите скрипт HelloWorld , который мы создали ранее, и добавьте его. In the drop-down list, search for the HelloWorld script we created above and add it. В окне Inspector (Инспектор) появится раздел скрипта Hello World (Script) с двумя неинициализированными свойствами Output Text и Start Reco Button. A Hello World (Script) section appears in the Inspector window, listing two uninitialized properties, Output Text and Start Reco Button. Эти свойства компонента Unity соответствуют открытым свойствам класса HelloWorld . These Unity component properties match public properties of the HelloWorld class.

Щелкните средство выбора объектов у свойства Start Reco Button (маленький круглый значок справа от свойства) и выберите ранее созданный объект Button. Select the Start Reco Button property’s object picker (the small circle icon to the right of the property), and choose the Button object you created earlier.

Щелкните средство выбора объектов у свойства Output Text и выберите ранее созданный объект Text. Select the Output Text property’s object picker, and choose the Text object you created earlier.

Кнопка также имеет вложенный текстовый объект. The button also has a nested text object. Убедитесь, что вы случайно не выбрали его для вывода текста (или переименуйте один из текстовых объектов, используя поле Name (Имя) в окне Inspector (Инспектор), чтобы избежать этой путаницы). Make sure you do not accidentally pick it for text output (or rename one of the text objects using the Name field in the Inspector window to avoid confusion).

Запуск приложения в Unity Editor Run the application in the Unity Editor

Теперь все готово для запуска приложения в Unity Editor. Now you’re ready to run the application within the Unity Editor.

Нажмите кнопку Play (Воспроизвести) на панели инструментов Unity Editor (треугольная стрелка вправо). In the Unity Editor toolbar (below the menu bar), select the Play button (a right-pointing triangle).

Перейдите к игровому представлению и дождитесь, пока объект Text отобразит кнопку для распознавания речи. Go to Game view, and wait for the Text object to display Click button to recognize speech. Если приложение не запущено или не готово к работе, отображается надпись New Text (Новый текст). (It displays New Text when the application hasn’t started or isn’t ready to respond.)

Цукерберг рекомендует:  Библиотеки - Библиотека для регистрации и авторизации на PHP

Нажмите кнопку и произнесите в микрофон компьютера фразу или предложение по-английски. Select the button and speak an English phrase or sentence into your computer’s microphone. Ваша речь будет передана в службу «Речь» и преобразуется в текст, который отобразится в игровом представлении. Your speech is transmitted to the Speech Services and transcribed to text, which appears in the Game view.

Проверьте окно консоли на наличие сообщений отладки. Check the Console window for debug messages. Если окно консоли не отображается, в строке меню выберите Window > General > Console (Окно > Общее > Консоль), чтобы отобразить его. If the Console window isn’t showing, go to the menu bar and select Window > General > Console to display it.

По завершении распознавания речи нажмите кнопку Play (Воспроизвести) на панели инструментов Unity Editor, чтобы остановить приложение. When you’re done recognizing speech, select the Play button in the Unity Editor toolbar to stop the application.

Дополнительные параметры для запуска этого приложения Additional options to run this application

Это приложение также можно развернуть как приложение Android, автономное приложение Windows или приложение UWP. This application can also be deployed to as an Android app, a Windows stand-alone app, or a UWP application. Дополнительные сведения см. в репозитории с примерами. For more information, see our sample repository. В папке quickstart/csharp-unity содержится описание конфигурации для этих дополнительных целевых объектов. The quickstart/csharp-unity folder describes the configuration for these additional targets.

Дополнительная информация Next steps

Предварительные требования Prerequisites

Перед началом работы нужно сделать следующее: Before you get started, make sure to:

Если вы уже сделали это, отлично. If you’ve already done this, great. Давайте продолжим. Let’s keep going.

Откройте проект в Visual Studio. Open your project in Visual Studio

Сначала необходимо убедиться, что проект открыт в Visual Studio. The first step is to make sure that you have your project open in Visual Studio.

Использование стандартного кода Start with some boilerplate code

Добавим код, который выступает в качестве основы для нашего проекта. Let’s add some code that works as a skeleton for our project.

Откройте MainPage.xaml в обозревателе решений. In Solution Explorer, open MainPage.xaml .

В представлении XAML конструктора вставьте следующий фрагмент кода XAML в тег Grid (между и ): In the designer’s XAML view, insert the following XAML snippet into the Grid tag (between and ):

В Обозревателе решений откройте исходный файл кода программной части MainPage.xaml.cs . In Solution Explorer, open the code-behind source file MainPage.xaml.cs . (Он сгруппирован в MainPage.xaml .) (It’s grouped under MainPage.xaml .)

Замените код приведенным ниже базовым кодом: Replace the code with the following base code:

Создание конфигурации службы «Речь» Create a Speech configuration

Перед инициализацией объекта SpeechRecognizer необходимо создать конфигурацию, использующую ключ и регион подписки. Before you can initialize a SpeechRecognizer object, you need to create a configuration that uses your subscription key and subscription region. Вставьте код в метод RecognizeSpeechAsync() . Insert this code in the RecognizeSpeechAsync() method.

В этом примере для создания SpeechConfig используется метод FromSubscription() . This sample uses the FromSubscription() method to build the SpeechConfig . Полный список доступных методов см. в статье SpeechConfig Class (Класс SpeechConfig) [!code-csharp ]. For a full list of available methods, see SpeechConfig Class [!code-csharp ]

Инициализация SpeechRecognizer Initialize a SpeechRecognizer

Теперь создадим объект SpeechRecognizer . Now, let’s create a SpeechRecognizer . Этот объект создается внутри оператора using для обеспечения надлежащего выпуска неуправляемых ресурсов. This object is created inside of a using statement to ensure the proper release of unmanaged resources. Вставьте этот код в метод RecognizeSpeechAsync() непосредственно под конфигурацией службы «Речь». Insert this code in the RecognizeSpeechAsync() method, right below your Speech configuration.

Распознавание фразы Recognize a phrase

В объекте SpeechRecognizer необходимо вызвать метод RecognizeOnceAsync() . From the SpeechRecognizer object, you’re going to call the RecognizeOnceAsync() method. С помощью этого метода служба «Речь» узнает, что для распознавания отправляется одна фраза и что после идентификации фразы необходимо остановить распознавание речи. This method lets the Speech service know that you’re sending a single phrase for recognition, and that once the phrase is identified to stop recognizing speech.

В операторе using добавьте этот код: [!code-csharp ] Inside the using statement, add this code: [!code-csharp ]


Отображение результатов распознавания (или ошибок) Display the recognition results (or errors)

Когда служба «Речь» возвращает результат распознавания, необходимо с ним что-то сделать. When the recognition result is returned by the Speech service, you’ll want to do something with it. Мы оставим его как есть и выведем результат на панели состояния. We’re going to keep it simple and print the result to the status panel.

Создание и запуск приложения Build and run the application

Теперь все готово для сборки и тестирования приложения. Now you are ready to build and test your application.

В строке меню выберите Сборка > Построить решение, чтобы создать приложение. From the menu bar, choose Build > Build Solution to build the application. Теперь код должен компилироваться без ошибок. The code should compile without errors now.

Выберите Отладка > Начать отладку(или нажмите клавишу F5), чтобы запустить приложение. Choose Debug > Start Debugging (or press F5) to start the application. Откроется окно helloworld. The helloworld window appears.

Выберите Включить микрофон, а когда появится запрос на разрешение доступа, выберите Да. Select Enable Microphone, and when the access permission request pops up, select Yes.

Щелкните Распознавание речи с помощью микрофона и произнесите фразу или предложение на английском языке в микрофон вашего устройства. Select Speech recognition with microphone input, and speak an English phrase or sentence into your device’s microphone. Ваша речь передается в службу «Речь» и преобразуется в текст, который появляется в том же окне. Your speech is transmitted to the Speech Services and transcribed to text, which appears in the window.

Дополнительная информация Next steps

Предварительные требования Prerequisites

Перед началом работы нужно: Before you get started, make sure to:

Если вы уже сделали это, отлично. If you’ve already done this, great. Давайте продолжим. Let’s keep going.

Добавление примера кода для общего проекта helloworld Add sample code for the common helloworld project

Общий проект helloworld содержит не зависящие от платформы реализации для вашего кросс-платформенного приложения. The common helloworld project contains platform-independent implementations for your cross-platform application. Теперь добавьте XAML-код, определяющий пользовательский интерфейс приложения, и реализацию кода C# программной части. Now add the XAML code that defines the user interface of the application, and add the C# code behind the implementation.

В обозревателе решений в рамках общего проекта helloworld откройте MainPage.xaml . In Solution Explorer, under the common helloworld project, open MainPage.xaml .

В представлении XAML конструктора вставьте следующий фрагмент кода XAML в тег Grid (между и ): In the designer’s XAML view, insert the following XAML snippet into the Grid tag between and :

В Обозревателе решений откройте исходный файл кода программной части MainPage.xaml.cs . In Solution Explorer, open the code-behind source file MainPage.xaml.cs . Он сгруппирован в MainPage.xaml . It’s grouped under MainPage.xaml .

Замените все содержимое следующим фрагментом кода: Replace all the code in it with the following snippet:

В обработчике OnRecognitionButtonClicked исходного файла найдите строку YourSubscriptionKey и замените ее своим ключом подписки. In the source file’s OnRecognitionButtonClicked handler, find the string YourSubscriptionKey , and replace it with your subscription key.

В обработчике OnRecognitionButtonClicked найдите строку YourServiceRegion и замените ее названием региона, связанного с вашей подпиской. In the OnRecognitionButtonClicked handler, find the string YourServiceRegion , and replace it with the region associated with your subscription. (Например, используйте westus для подписки с бесплатной пробной версией.) (For example, use westus for the free trial subscription.)

Далее необходимо создать сервис Xamarin Service, который используется для запроса разрешений на доступ к микрофону с различных проектов платформы (UWP, Android и iOS). Next, you need to create a Xamarin Service, which is used to query microphone permissions from different platform projects, such as UWP, Android, and iOS. Для этого добавьте в проект helloworld новую папку с именем Службы и создайте в ней новый исходный файл C#. To do that, add a new folder named Services under the helloworld project, and create a new C# source file under it. Вы можете щелкнуть правой кнопкой мыши папку Службы и выбрать пункт Добавить > Новый элемент > Файл кода. You can right-click the Services folder, and select Add > New Item > Code File. Переименуйте файл IMicrophoneService.cs и поместите в него весь код из следующего фрагмента: Rename the file IMicrophoneService.cs , and place all code from the following snippet in that file:

Добавление примера кода для проекта helloworld.Android Add sample code for the helloworld.Android project

Теперь добавьте код C#, определяющий специфическую часть приложения для Android. Now add the C# code that defines the Android-specific part of the application.

В обозревателе решений в рамках общего проекта helloworld.Android откройте MainActivity.cs . In Solution Explorer, under the helloworld.Android project, open MainActivity.cs .

Замените все содержимое следующим фрагментом кода: Replace all the code in it with the following snippet:

Затем добавьте реализацию Android для MicrophoneService , создав папку Службы в рамках проекта helloworld.Android. Next, add Android-specific implementation for MicrophoneService by creating the new folder Services under the helloworld.Android project. После этого создайте в нем новый исходный файл C#. After that, create a new C# source file under it. Переименуйте файл на MicrophoneService.cs . Rename the file MicrophoneService.cs . Скопируйте следующий фрагмент кода и вставьте его в файл: Copy and paste the following code snippet into that file:

После этого откройте AndroidManifest.xml в папке Свойства. After that, open AndroidManifest.xml under the Properties folder. Добавьте следующие настройки разрешения на использование микрофона между и : Add the following uses-permission setting for the microphone between and :

Добавление примера кода для проекта helloworld.iOS Add sample code for the helloworld.iOS project

Теперь добавьте код C#, определяющий специфическую часть приложения для iOS. Now add the C# code that defines the iOS-specific part of the application. Кроме того, создайте специфические конфигурации для устройств Apple в проекте helloworld.iOS. Also create Apple device-specific configurations to the helloworld.iOS project.

В обозревателе решений в рамках проекта helloworld.iOS откройте AppDelegate.cs . In Solution Explorer, under the helloworld.iOS project, open AppDelegate.cs .

Замените все содержимое следующим фрагментом кода: Replace all the code in it with the following snippet:

Затем добавьте реализацию iOS для MicrophoneService , создав папку Службы в рамках проекта helloworld.iOS. Next, add iOS-specific implementation for MicrophoneService by creating the new folder Services under the helloworld.iO project. После этого создайте в нем новый исходный файл C#. After that, create a new C# source file under it. Переименуйте файл на MicrophoneService.cs . Rename the file MicrophoneService.cs . Скопируйте следующий фрагмент кода и вставьте его в файл: Copy and paste the following code snippet into that file:

Откройте Info.plist в проекте helloworld.iOS в текстовом редакторе. Open Info.plist under the helloworld.iOS project in the text editor. Добавьте следующую пару «ключ — значение» в раздел dict: Add the following key value pair under the dict section:

NSMicrophoneUsageDescription Этот пример приложения требует доступа к микрофону NSMicrophoneUsageDescription This sample app requires microphone access

Если вы выполняете сборку для устройства iPhone, убедитесь, что Bundle Identifier соответствует идентификатору приложения для профиля подготовки устройства. If you’re building for an iPhone device, ensure that Bundle Identifier matches your device’s provisioning profile app ID. В противном случае произойдет сбой сборки. Otherwise, the build will fail. С iPhoneSimulator вы можете оставить его как есть. With iPhoneSimulator, you can leave it as is.

Если вы работаете на компьютере с Windows, вам необходимо установить соединение с устройством Mac для сборки, выбрав элементы Инструменты > iOS > Связать с Mac. If you’re building on a Windows PC, establish a connection to the Mac device for building via Tools > iOS > Pair to Mac. Следуйте инструкциям мастера Visual Studio, чтобы включить подключение к устройству Mac. Follow the instruction wizard provided by Visual Studio to enable the connection to the Mac device.

Добавление примера кода для проекта helloworld.UWP Add sample code for the helloworld.UWP project

Добавление примера кода для проекта helloworld.UWP Add sample code for the helloworld.UWP project

Теперь добавьте код C#, определяющий специфическую часть приложения для UWP. Now add the C# code that defines the UWP-specific part of the application.

В обозревателе решений в рамках проекта helloworld.UWP откройте MainPage.xaml.cs . In Solution Explorer, under the helloworld.UWP project, open MainPage.xaml.cs .

Замените все содержимое следующим фрагментом кода: Replace all the code in it with the following snippet:

Затем добавьте реализацию UWP для MicrophoneService , создав папку Службы в рамках проекта helloworld.UWP. Next, add a UWP-specific implementation for MicrophoneService by creating the new folder Services under the helloworld.UWP project. После этого создайте в нем новый исходный файл C#. After that, create a new C# source file under it. Переименуйте файл на MicrophoneService.cs . Rename the file MicrophoneService.cs . Скопируйте следующий фрагмент кода и вставьте его в файл: Copy and paste the following code snippet into that file:

Затем дважды щелкните файл Package.appxmanifest в проекте helloworld.UWP в Visual Studio. Next, double-click the Package.appxmanifest file under the helloworld.UWP project inside Visual Studio. В разделе Возможности убедитесь, что выбран параметр Микрофон, и сохраните файл. Under Capabilities, make sure that Microphone is selected, and save the file.

Далее дважды щелкните файл Package.appxmanifest под проектом helloworld.UWP внутри Visual Studio и под Возможности > Микрофон и сохраните файл. Next double click Package.appxmanifest file under the helloworld.UWP project inside Visual Studio and under Capabilities > Microphone is checked and save the file.

Примечание. На случай, если вы увидите предупреждение: «Файла сертификата не существует: helloworld.UWP_TemporaryKey.pfx», пожалуйста, проверьте преобразование речи в текст для получения дополнительной информации. Note: In case you see warning : Certificate file does not exist: helloworld.UWP_TemporaryKey.pfx, please check speech to text sample for more information.

В строке меню выберите Файл > Сохранить все, чтобы сохранить изменения. From the menu bar, select File > Save All to save your changes.

Создание и запуск приложения UWP Build and run the UWP application

Задайте helloworld.UWP в качестве запускаемого проекта. Set helloworld.UWP as a startup project. Щелкните проект helloworld.UWP правой кнопкой мыши и выберите пункт Сборка, чтобы выполнить сборку приложения. Right-click the helloworld.UWP project, and select Build to build the application.

Выберите Отладка > Начать отладку (или нажмите клавишу F5), чтобы запустить приложение. Select Debug > Start Debugging (or select F5) to start the application. Откроется окно helloworld. The helloworld window appears.

Выберите Включить микрофон. Select Enable Microphone. Когда появится запрос на доступ, выберите Да. When the access permission request appears, select Yes.

Щелкните Начать распознавание речи и произнесите фразу или предложение на английском языке в микрофон вашего устройства. Select Start Speech recognition, and speak an English phrase or sentence into your device’s microphone. Ваша речь передается в службу «Речь» и преобразуется в текст, который появляется в том же окне. Your speech is transmitted to Speech Services and transcribed to text, which appears in the window.

Создание и запуск приложений для Android и iOS Build and run the Android and iOS applications

Создание и запуск приложений для Android и iOS на устройстве или симуляторе происходит так же, как на UWP. Building and running Android and iOS applications in the device or simulator happen in a similar way to the UWP. Важно убедиться, что все пакеты SDK установлены правильно, как указано в разделе «Необходимые условия» этой статьи. Make sure all SDKs are installed correctly as required in the «Prerequisites» section of this article.

Дополнительная информация Next steps


В этом кратком руководстве для интерактивного распознавания речи из звуковых данных, полученных с микрофона, используется пакет SDK службы «Речь». In this quickstart you will use the Speech SDK to interactively recognize speech from audio data captured from a microphone. После выполнения нескольких предварительных требований для распознавания речи с микрофона необходимо выполнить всего четыре шага: After satisfying a few prerequisites, recognizing speech from a microphone only takes four steps:

  • Создайте объект SpeechConfig , содержащий ключ и регион подписки. Create a SpeechConfig object from your subscription key and region.
  • Создайте объект SpeechRecognizer , используя приведенный выше объект SpeechConfig . Create a SpeechRecognizer object using the SpeechConfig object from above.
  • С помощью объекта SpeechRecognizer запустите процесс распознавания для одного речевого фрагмента. Using the SpeechRecognizer object, start the recognition process for a single utterance.
  • Проверьте возвращенный результат SpeechRecognitionResult . Inspect the SpeechRecognitionResult returned.

Если вы предпочитаете сразу перейти к практике, просмотрите или скачайте все примеры для пакета SDK службы «Речь» для C ++ на сайте GitHub. If you prefer to jump right in, view or download all Speech SDK C++ Samples on GitHub. В противном случае приступим к работе. Otherwise, let’s get started.

Выбор целевой среды Choose your target environment

Предварительные требования Prerequisites

Перед началом работы нужно: Before you get started, make sure to:

Добавление примеров кода Add sample code

Создайте исходный файл C++ с именем helloworld.cpp и вставьте в него следующий код. Create a C++ source file named helloworld.cpp , and paste the following code into it.

В этом новом файле замените строку YourSubscriptionKey на ключ подписки службы «Речь». In this new file, replace the string YourSubscriptionKey with your Speech Services subscription key.

Замените строку YourServiceRegion значением региона, связанного с подпиской (например, westus для бесплатной пробной подписки). Replace the string YourServiceRegion with the region associated with your subscription (for example, westus for the free trial subscription).

Сборка приложения Build the app

Обязательно введите приведенные ниже команды в виде одной командной строки. Make sure to enter the commands below as a single command line. Для этого проще всего скопировать команду с помощью кнопки Копировать рядом с каждой из команд, а затем вставить ее в строку оболочки. The easiest way to do that is to copy the command by using the Copy button next to each command, and then paste it at your shell prompt.

В системе x64 (64-разрядная) выполните сборку приложения с помощью следующей команды. On an x64 (64-bit) system, run the following command to build the application.

В системе x86 (32-разрядная) выполните сборку приложения с помощью следующей команды. On an x86 (32-bit) system, run the following command to build the application.

В системе ARM64 (64-разрядная) выполните сборку приложения с помощью следующей команды. On an ARM64 (64-bit) system, run the following command to build the application.

Запуск приложения Run the app

Настройте путь к библиотеке загрузчика так, чтобы он указывал на библиотеку пакета SDK для службы «Речь». Configure the loader’s library path to point to the Speech SDK library.

В системе x64 (64-разрядная) введите следующую команду. On an x64 (64-bit) system, enter the following command.

В системе x86 (32-разрядная) введите следующую команду. On an x86 (32-bit) system, enter this command.

В системе ARM64 (64-разрядная) введите следующую команду. On an ARM64 (64-bit) system, enter the following command.

Запустите приложение. Run the application.

В окне консоли появится подсказка, запрашивающая сказать что-то. In the console window, a prompt appears, requesting that you say something. Произнесите фразу или предложение на английском языке. Speak an English phrase or sentence. Ваша речь передается в службу «Речь» и преобразовывается в текст, который появляется в том же окне. Your speech is transmitted to the Speech Services and transcribed to text, which appears in the same window.

Дополнительная информация Next steps

Предварительные требования Prerequisites

Перед началом работы нужно: Before you get started, make sure to:

Добавление примеров кода Add sample code

Создайте исходный файл C++ с именем helloworld.cpp и вставьте в него следующий код. Create a C++ source file named helloworld.cpp , and paste the following code into it.

В этом новом файле замените строку YourSubscriptionKey на ключ подписки службы «Речь». In this new file, replace the string YourSubscriptionKey with your Speech Services subscription key.

Замените строку YourServiceRegion значением региона, связанного с подпиской (например, westus для бесплатной пробной подписки). Replace the string YourServiceRegion with the region associated with your subscription (for example, westus for the free trial subscription).

Сборка приложения Build the app

Обязательно введите приведенные ниже команды в виде одной командной строки. Make sure to enter the commands below as a single command line. Для этого проще всего скопировать команду с помощью кнопки Копировать рядом с каждой из команд, а затем вставить ее в строку оболочки. The easiest way to do that is to copy the command by using the Copy button next to each command, and then paste it at your shell prompt.

Запустите сборку приложения с помощью следующей команды. Run the following command to build the application.

Запуск приложения Run the app

Настройте путь к библиотеке загрузчика так, чтобы он указывал на библиотеку пакета SDK для службы «Речь». Configure the loader’s library path to point to the Speech SDK library.

Запустите приложение. Run the application.

В окне консоли появится подсказка, запрашивающая сказать что-то. In the console window, a prompt appears, requesting that you say something. Произнесите фразу или предложение на английском языке. Speak an English phrase or sentence. Ваша речь передается в службу «Речь» и преобразовывается в текст, который появляется в том же окне. Your speech is transmitted to the Speech Services and transcribed to text, which appears in the same window.

Дополнительная информация Next steps

Предварительные требования Prerequisites

Перед началом работы нужно: Before you get started, make sure to:

Добавление примеров кода Add sample code

Откройте исходный файл helloworld.cpp. Open the source file helloworld.cpp.

Замените все содержимое следующим фрагментом кода: Replace all the code with the following snippet:

В том же файле замените строку YourSubscriptionKey своим ключом подписки. In the same file, replace the string YourSubscriptionKey with your subscription key.

Замените строку YourServiceRegion значением региона, связанного с подпиской (например, westus для бесплатной пробной подписки). Replace the string YourServiceRegion with the region associated with your subscription (for example, westus for the free trial subscription).

В строке меню выберите Файл > Сохранить все. From the menu bar, choose File > Save All.

Создание и запуск приложения Build and run the application

В строке меню выберите Сборка > Построить решение, чтобы создать приложение. From the menu bar, select Build > Build Solution to build the application. Теперь код должен компилироваться без ошибок. The code should compile without errors now.

Выберите Отладка > Начать отладку (или нажмите клавишу F5), чтобы запустить приложение helloworld. Choose Debug > Start Debugging (or press F5) to start the helloworld application.

Произнесите фразу или предложение на английском языке. Speak an English phrase or sentence. Приложение передает речь в речевую службу, которая расшифровывает речь в текст и отправляет его обратно в приложение для отображения. The application transmits your speech to the Speech Services, which transcribes to text and sends it back to the application for display.


Дополнительная информация Next steps

В этом кратком руководстве для интерактивного распознавания речи из звуковых данных, полученных с микрофона, используется пакет SDK службы «Речь». In this quickstart you will use the Speech SDK to interactively recognize speech from audio data captured from a microphone. После выполнения нескольких предварительных требований для распознавания речи с микрофона необходимо выполнить всего четыре шага: After satisfying a few prerequisites, recognizing speech from a microphone only takes four steps:

  • Создайте объект SpeechConfig , содержащий ключ и регион подписки. Create a SpeechConfig object from your subscription key and region.
  • Создайте объект SpeechRecognizer , используя приведенный выше объект SpeechConfig . Create a SpeechRecognizer object using the SpeechConfig object from above.
  • С помощью объекта SpeechRecognizer запустите процесс распознавания для одного речевого фрагмента. Using the SpeechRecognizer object, start the recognition process for a single utterance.
  • Проверьте возвращенный результат SpeechRecognitionResult . Inspect the SpeechRecognitionResult returned.

Если вы предпочитаете сразу перейти к работе, просмотрите или скачайте все образцы для пакета SDK службы «Речь» для Java на сайте GitHub. If you prefer to jump right in, view or download all Speech SDK Java Samples on GitHub. В противном случае ознакомьтесь с инструкциями. Otherwise, let’s get started.

Выберите целевую среду Choose your target environment

Предварительные требования Prerequisites

Добавление примеров кода Add sample code

Выберите Файл > Создать > Класс, чтобы добавить пустой класс в проект Java. To add a new empty class to your Java project, select File > New > Class.

В окне New Java Class (Новый класс Java) введите speechsdk.quickstart в поле Пакет и Main в поле Имя. In the New Java Class window, enter speechsdk.quickstart into the Package field, and Main into the Name field.

Замените весь код в файле Main.java на следующий фрагмент: Replace all code in Main.java with the following snippet:

Замените строку YourSubscriptionKey своим ключом подписки. Replace the string YourSubscriptionKey with your subscription key.

Замените строку YourServiceRegion значением региона, связанного с подпиской (например, westus для бесплатной пробной подписки). Replace the string YourServiceRegion with the region associated with your subscription (for example, westus for the free trial subscription).

Сохраните внесенные в проект изменения. Save changes to the project.

Создание и запуск приложения Build and run the app

Нажмите клавишу F11 или выберите Запустить > Отладка. Press F11, or select Run > Debug. Слова, произносимые в микрофон, в течение следующих 15 секунд будут распознаны и записаны в окне консоли. The next 15 seconds of speech input from your microphone will be recognized and logged in the console window.

Дополнительная информация Next steps

Предварительные требования Prerequisites

Перед началом работы нужно: Before you get started, make sure to:

Создание пользовательского интерфейса Create a user interface

Теперь для этого приложения мы создадим базовый пользовательский интерфейс. Now we’ll create a basic user interface for the application. Измените макет для основного действия, activity_main.xml . Edit the layout for your main activity, activity_main.xml . В макете должны отображаться имя вашего приложения в заголовке окна и элемент TextView, содержащий текст «Hello World!». Initially, the layout includes a title bar with your application’s name, and a TextView that contains the text «Hello World!».

Выберите элемент TextView. Select the TextView element. Измените его атрибут ID в правом верхнем углу, указав hello . Change its ID attribute in the upper-right corner to hello .

Перетащите элемент button (кнопка) из палитры в левом верхнем углу окна activity_main.xml на пустое место над текстом. From the palette in the upper left of the activity_main.xml window, drag a button into the empty space above the text.

В области атрибутов кнопки справа для атрибута onClick введите значение onSpeechButtonClicked . In the button’s attributes on the right, in the value for the onClick attribute, enter onSpeechButtonClicked . Мы создадим метод с таким именем для обработки события кнопки. We’ll write a method with this name to handle the button event. Измените его атрибут ID в правом верхнем углу, указав button . Change its ID attribute in the upper-right corner to button .

Цукерберг рекомендует:  Help - Как исправить ошибку

Используйте значок волшебной палочки в верхней части окна конструктора, чтобы вывести ограничения макета. Use the magic wand icon at the top of the designer to infer layout constraints.

Теперь текстовая и графическая версии пользовательского интерфейса должны выглядеть следующим образом: The text and graphical representation of your UI should now look like this:

Добавление примеров кода Add sample code

Откройте исходный файл MainActivity.java . Open the source file MainActivity.java . Замените все содержимое этого файла приведенным ниже кодом: Replace all the code in this file with the following:

Метод onCreate содержит код, который запрашивает разрешения на использование микрофона и подключения к интернету, а также инициализирует привязки собственной платформы. The onCreate method includes code that requests microphone and internet permissions, and initializes the native platform binding. Настроить привязки собственной платформы нужно только один раз. Configuring the native platform bindings is only required once. Это следует сделать в начале инициализации приложения. It should be done early during application initialization.

Метод onSpeechButtonClicked , как упоминалось ранее, является обработчиком нажатия кнопки. The method onSpeechButtonClicked is, as noted earlier, the button click handler. Нажатие кнопки активирует преобразование речи в текст. A button press triggers speech-to-text transcription.

В том же файле замените строку YourSubscriptionKey своим ключом подписки. In the same file, replace the string YourSubscriptionKey with your subscription key.

Кроме того, замените строку YourServiceRegion на регион, связанный с вашей подпиской. Also replace the string YourServiceRegion with the region associated with your subscription. Например, используйте westus для подписки с бесплатной пробной версией. For example, use westus for the free trial subscription.

Создание и запуск приложения Build and run the app

Подключите устройство Android к компьютеру разработки. Connect your Android device to your development PC. Убедитесь, что вы включили на устройстве режим разработки и отладку по USB. Make sure that you enabled development mode and USB debugging on the device.

Чтобы выполнить сборку приложения, нажмите комбинацию клавиш Ctrl+F9 или выберите в строке меню Сборка > Make Project (Создать проект). To build the application, select Ctrl+F9, or select Build > Make Project from the menu bar.

Чтобы запустить приложение, нажмите комбинацию клавиш Shift+F10 или выберитеЗапуск > Run ‘app’ (Запустить «приложение»). To launch the application, select Shift+F10, or select Run > Run ‘app’.

В отобразившемся окне целей развертывания выберите свое устройство Android. In the deployment target window that appears, select your Android device.

Чтобы начать процесс распознавания речи, нажмите кнопку в приложении. Select the button in the application to begin a speech recognition section. Последующие 15 секунд английской речи будут отправлены в службу «Речь» для распознавания. The next 15 seconds of English speech will be sent to Speech Services and transcribed. Его результат отображается в приложении Android и в окне «logcat» в Android Studio. The result appears in the Android application, and in the logcat window in Android Studio.

Дополнительная информация Next steps

В этом кратком руководстве для интерактивного распознавания речи из звуковых данных, полученных с микрофона, используется пакет SDK службы «Речь». In this quickstart you will use the Speech SDK to interactively recognize speech from audio data captured from a microphone. После выполнения нескольких предварительных требований для распознавания речи с микрофона необходимо выполнить всего четыре шага: After satisfying a few prerequisites, recognizing speech from a microphone only takes four steps:

  • Создайте объект SpeechConfig , содержащий ключ и регион подписки. Create a SpeechConfig object from your subscription key and region.
  • Создайте объект SpeechRecognizer , используя приведенный выше объект SpeechConfig . Create a SpeechRecognizer object using the SpeechConfig object from above.
  • С помощью объекта SpeechRecognizer запустите процесс распознавания для одного речевого фрагмента. Using the SpeechRecognizer object, start the recognition process for a single utterance.
  • Проверьте возвращенный результат SpeechRecognitionResult . Inspect the SpeechRecognitionResult returned.

Если вы предпочитаете сразу перейти к практике, просмотрите или скачайте все примеры для пакета SDK службы «Речь» для Python на сайте GitHub. If you prefer to jump right in, view or download all Speech SDK Python Samples on GitHub. В противном случае приступим к работе. Otherwise, let’s get started.

Предварительные требования Prerequisites

Перед началом работы нужно: Before you get started, make sure to:

Поддержка и обновления Support and updates


Обновления пакета SDK службы «Речь» для Python распространяются с помощью PyPI, о чем указывается в заметках о выпуске. Updates to the Speech SDK Python package are distributed via PyPI and announced in the Release notes. Если новая версия доступна, вы можете обновить ее с помощью команды pip install —upgrade azure-cognitiveservices-speech . If a new version is available, you can update to it with the command pip install —upgrade azure-cognitiveservices-speech . Проверьте, какая версия установлена в данный момент, просмотрев переменную azure.cognitiveservices.speech.__version__ . Check which version is currently installed by inspecting the azure.cognitiveservices.speech.__version__ variable.

Если у вас возникла проблема или отсутствует функция, ознакомьтесь со статьей Возможности получения поддержки и справки. If you have a problem, or you’re missing a feature, see Support and help options.

Создание приложения Python, использующего пакет SDK для службы «Речь» Create a Python application that uses the Speech SDK

Запуск примера Run the sample

Вы можете скопировать пример кода из этого краткого руководства в исходный файл quickstart.py и запустить его в интегрированной среде разработки или в консоли. You can copy the sample code from this quickstart to a source file quickstart.py and run it in your IDE or in the console:

Кроме того, можно скачать это краткое руководство как записную книжку Jupyter из репозитория с примером пакета SDK для службы «Речь» и запустить его как записную книжку. Or you can download this quickstart tutorial as a Jupyter notebook from the Speech SDK sample repository and run it as a notebook.

Пример кода Sample code

Установка и использование пакета SDK для службы «Речь» с помощью Visual Studio Code Install and use the Speech SDK with Visual Studio Code

Скачайте и установите 64-разрядную версию Python (версия 3.5 или более поздняя) на компьютере. Download and install a 64-bit version of Python, 3.5 or later, on your computer.

Скачайте и установите Visual Studio Code. Download and install Visual Studio Code.

Откройте Visual Studio Code и установите расширение Python. Open Visual Studio Code and install the Python extension. В меню выберите Файл > Параметры > Расширения. Select File > Preferences > Extensions from the menu. Выполните поиск по запросу Python. Search for Python.

Создайте папку для хранения проекта. Create a folder to store the project in. Например, с помощью проводника. An example is by using Windows Explorer.

В Visual Studio Code щелкните значок Файл. In Visual Studio Code, select the File icon. Затем откройте созданную папку. Then open the folder you created.

Создайте исходный файл Python speechsdk.py , выбрав значок создания файла Create a new Python source file, speechsdk.py , by selecting the new file icon.

Скопируйте, вставьте и сохраните код Python в созданный файл. Copy, paste, and save the Python code to the newly created file.

Вставьте сведения о подписках на службы речи Insert your Speech Services subscription information.

Если интерпретатор Python выбран, он отображается в левой части строки состояния в нижней части окна. If selected, a Python interpreter displays on the left side of the status bar at the bottom of the window. В противном случае откроется список доступных интерпретаторов Python. Otherwise, bring up a list of available Python interpreters. Откройте палитру команд (CTRL+SHIFT+P) и введите Python: Select Interpreter (Python: выбор интерпретатора). Open the command palette (Ctrl+Shift+P) and enter Python: Select Interpreter. Выберите соответствующий интерпретатор. Choose an appropriate one.

Вы можете установить пакет SDK службы «Речь» для Python в Visual Studio Code. You can install the Speech SDK Python package from within Visual Studio Code. Сделайте это, если он еще не установлен для выбранного интерпретатора Python. Do that if it’s not installed yet for the Python interpreter you selected. Чтобы установить пакет SDK для службы «Речь», откройте окно терминала. To install the Speech SDK package, open a terminal. Откройте палитру команд еще раз (CTRL+SHIFT+P) и введите Терминал: создание нового интегрированного терминала. Bring up the command palette again (Ctrl+Shift+P) and enter Terminal: Create New Integrated Terminal. В открывшемся окне терминала введите команду python -m pip install azure-cognitiveservices-speech или команду, соответствующую вашей системе. In the terminal that opens, enter the command python -m pip install azure-cognitiveservices-speech or the appropriate command for your system.

Чтобы запустить пример кода, щелкните правой кнопкой мыши в редакторе. To run the sample code, right-click somewhere inside the editor. Выберите пункт Run Python File in Terminal (Запустить файл Python в окне терминала). Select Run Python File in Terminal. Когда появится запрос, произнесите несколько слов. Speak a few words when you’re prompted. Вскоре после этого отобразится расшифрованный текст. The transcribed text displays shortly afterward.

При возникновении проблемы в процессе работы с данной инструкцией см. более подробное руководство по Visual Studio Code для Python. If you have issues following these instructions, refer to the more extensive Visual Studio Code Python tutorial.

Дополнительная информация Next steps

Просмотрите или скачайте все примеры для пакета SDK службы «Речь» на сайте GitHub. View or download all Speech SDK Samples on GitHub.

Поддержка дополнительных языков и платформ Additional language and platform support

Если вы щелкнули эту вкладку, вы, вероятно, не увидели краткого руководства для предпочитаемого языка программирования. If you’ve clicked this tab, you probably didn’t see a quickstart in your favorite programming language. Не беспокойтесь. У нас есть дополнительные материалы по быстрому запуску и примеры кода, доступные на сайте GitHub. Don’t worry, we have additional quickstart materials and code samples available on GitHub. Используйте таблицу, чтобы найти правильный пример для своего сочетания языка программирования, платформы и ОС. Use the table to find the right sample for your programming language and platform/OS combination.

Сверхбыстрое распознавание речи без серверов на реальном примере

В этой статье я подробно расскажу и покажу, как правильно и быстро прикрутить распознавание русской речи на движке Pocketsphinx (для iOS порт OpenEars) на реальном Hello World примере управления домашней техникой.
Почему именно домашней техникой? Да потому что благодаря такому примеру можно оценить ту скорость и точность, которой можно добиться при использовании полностью локального распознавания речи без серверов типа Google ASR или Яндекс SpeechKit.
К статье я также прилагаю все исходники программы и саму сборку под Android.

С чего вдруг?

Наткнувшись недавно на статью о прикручивании Яндекс SpeechKit-а к iOS приложению, я задал вопрос автору, почему для своей программы он захотел использовать именно серверное распознавание речи (по моему мнению, это было излишним и приводило к некоторым проблемам). На что получил встречный вопрос о том, не мог бы я поподробней описать применение альтернативных способов для проектов, где нет необходимости распознавать что угодно, а словарь состоит из конечного набора слов. Да еще и с примером практического применения…

Зачем нам что-то еще кроме Яндекса и Google?

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

  • Скорость — мы не зависим от серверов и поэтому не зависим от их доступности, пропускной способности и т.п. факторов
  • Точность — наш движок работает только с тем словарем, который интересует наше приложение, повышая тем самым качество распознавания
  • Стоимость — нам не придется платить за каждый запрос к серверу
  • Голосовая активация — как дополнительный бонус к первым пунктам — мы можем постоянно «слушать эфир», не тратя при этом свой трафик и не нагружая сервера
Так Android же умеет распознавать речь без интернета!

Да-да… Только на JellyBean. И только с полуметра, не более. И это распознавание — это та же диктовка, только с использованием гораздо меньшей модели. Так что управлять ею и настраивать ее мы тоже не можем. И что она вернет нам в следующий раз — неизвестно. Хотя для СМС-ок в самый раз!

Что будем делать?

Будем реализовывать голосовой пульт управления домашней техникой, который будет работать точно и быстро, с нескольких метров и даже на дешевом тормозном хламе очень недорогих Android смартфонах, планшетах и часах.
Логика будет простой, но очень практичной. Активируем микрофон и произносим одно или несколько названий устройств. Приложение их распознает и включает-выключает их в зависимости от текущего состояния. Либо получает от них состояние и произносит его приятным женским голосом. Например, текущая температура в комнате.

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

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

Что такое Pocketsphinx

Pocketsphinx — это движок распознавания с открытым исходным кодом под Android. У него также имеется порт под iOS, WindowsPhone, и даже JavaScript.
Он позволит нам запустить распознавание речи прямо на устройстве и при этом настроить его именно под наши задачи. Также он предлагает функцию голосовой активации «из коробки» (см далее).

Мы сможем «скормить» движку распознавания русскую языковую модель (вы можете найти ее в исходниках) и грамматику пользовательских запросов. Это именно то, что будет распознавать наше приложение. Ничего другого оно распознать не сможет. А следовательно, практически никогда не выдаст что-то, чего мы не ожидаем.

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

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

Транскрипции

Грамматика описывает то, что может говорить пользователь. Для того, чтобы Pocketsphinx знал, как он это будет произносить, необходимо для каждого слова из грамматики написать, как оно звучит в соответствующей языковой модели. То есть транскрипцию каждого слова. Это называется словарь.

Транскрипции описываются с помощью специального синтаксиса. Например:

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

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

Голосовая активация

Это возможность движка распознавания речи все время «слушать эфир» с целью реакции на заранее заданную фразу (или фразы). При этом все другие звуки и речь будут отбрасываться. Это не то же самое, что описать грамматику и просто включить микрофон. Приводить здесь теорию этой задачи и механику того, как это работает, я не буду. Скажу лишь только, что недавно программисты, работающие над Pocketsphinx, реализовали такую функцию, и теперь она доступна «из коробки» в API.

Одно стоит упомянуть обязательно. Для активационной фразы нужно не только указать транскрипцию, но и подобрать подходящее значение порога чувствительности. Слишком маленькое значение приведет к множеству ложных срабатываний (это когда вы не говорили активационную фразу, а система ее распознает). А слишком высокое — к невосприимчивости. Поэтому данная настройка имеет особую важность. Примерный диапазон значений — от 1e-1 до 1e-40 в зависимости от активационной фразы.

Запускаем распознование

Pocketsphinx предоставляет удобный API для конфигурирования и запуска процесса распознавания. Это классы SppechRecognizer и SpeechRecognizerSetup.
Вот как выглядит конфигурация и запуск распознавания:

Здесь мы сперва копируем все необходимые файлы на диск (Pocketpshinx требует наличия на диске аккустической модели, грамматики и словаря с транскрипциями). Затем конфигурируется сам движок распознавания. Указываются пути к файлам модели и словаря, а также некоторые параметры (порог чувствительности для активационной фразы). Далее конфигурируется путь к файлу с грамматикой, а также активационная фраза.


Как видно из этого кода, один движок конфигурируется сразу и для грамматики, и для распознавания активационной фразы. Зачем так делается? Для того, чтобы мы могли быстро переключаться между тем, что в данный момент нужно распознавать. Вот как выглядит запуск процесса распознавания активационной фразы:

А вот так — распозанвание речи по заданной грамматике:

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

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

Чтобы получить результат распознавания, нужно также указать слушателя событий, имплементирующего интерфейс RecognitionListener.
У него есть несколько методов, которые вызываются pocketsphinx-ом при наступлении одного из событий:

  • onBeginningOfSpeech — движок услышал какой-то звук, может быть это речь (а может быть и нет)
  • onEndOfSpeech — звук закончился
  • onPartialResult — есть промежуточные результаты распознавания. Для активационной фразы это значит, что она сработала. Аргумент Hypothesis содержит данные о распознавании (строка и score)
  • onResult — конечный результат распознавания. Этот метод будет вызыван после вызова метода stop у SpeechRecognizer. Аргумент Hypothesis содержит данные о распознавании (строка и score)

Реализуя тем или иным способом методы onPartialResult и onResult, можно изменять логику распознавания и получать окончательный результат. Вот как это сделано в случае с нашим приложением:

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

Здесь мы сперва играем небольшой сигнал для оповещения пользователя, что мы его услышали и готовы к его команде. На это время микрофон долже быть выключен. Поэтому мы запускаем распознавание после небольшого таймаута (чуть больше, чем длительность сигнала, чтобы не услышать его эха). Также запускается поток, который остановит распознавание принудительно, если пользователь говорит слишком долго. В данном случае это 3 секунды.

Как превратить распознанную строку в команды

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

Как синтезировать речь

Синтез речи — это операция, обратная распознаванию. Здесь наоборот — нужно превратить строку текста в речь, чтобы ее услышал пользователь.
В случае с термостатом мы должны заставить наше Android устройство произнести текущую температуру. С помощью API TextToSpeech это сделать довольно просто (спасибо гуглу за прекрасный женский TTS для русского языка):

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

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

И это все?

Да! Как видите, быстро и качественно распознать речь прямо на устройстве совсем несложно, благодаря наличию таких замечательных проектов, как Pocketsphinx. Он предоставляет очень удобный API, который можно использовать в решении задач, связанных с распознаванием голосовых команд.

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

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

управление C#Распознавание речи-это то, что сказал пользователь?

speech c# (9)

Попробуйте Microsoft Speech Server , который, я думаю, теперь является частью Office Communication Server 2007 . Он содержит механизмы SR / TTS, API C # и инструменты, которые интегрируются с Visual Studio.

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

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

Было бы также замечательно, если бы это могло работать в Windows XP или в меньших версиях Windows Vista.

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

Может ли кто-нибудь мне что-то рекомендовать?

Если двигатель — это то, о чем вы спрашиваете, то я нашел (остерегайтесь, я просто перечисляю, я не пробовал ни одного из них):

у вас также есть SDK SAPI от самой Microsoft, я только пробовал его для текстовых сообщений, но в соответствии с его определением:

SDK также включает свободно распространяемые текстовые (TTS) двигатели (на английском и устном китайском) и системы распознавания речи (SR) (на английском, китайском и японском языках).

Текст в речь доступен с помощью Speech API . Лично мне, вероятно, потребуется Vista и использовать управляемые интерфейсы для System.Speech.SpeechRecognition и System.Speech.Synthesis.TtsEngine , но P / Invoke должен быть доступен в неуправляемых API, если вам действительно нужна поддержка XP.

Аналогичный вопрос был задан на Joel on Software некоторое время назад. Вы можете использовать пространство имен System.Speech.Recognition для этого . с некоторыми ограничениями. Добавьте System.Speech (должен быть в GAC) в ваш проект. Вот пример кода для приложения WinForms:

Это распознает числа от 1 до 100 и отображает итоговое число в форме. Вам понадобится форма с ярлыком lblLetter.

System.Speech работает только с заранее определенным списком слов или фраз; это не совсем NaturallySpeaking, будь то универсальность или качество распознавания. Но вам не нужно обучать его голосу пользователя, и если у вас есть только несколько разных вещей, которые пользователь может сказать, он работает достаточно хорошо. И это бесплатно! (если у вас есть Visual Studio)

Это не сработает, если вы используете очень короткие фразы; Я сделал программу для моего ребенка, чтобы сказать буквы алфавита и увидеть их на экране, но это не очень хорошо, так как многие буквы звучат одинаково (особенно из уст четырехлетнего ребенка).

Что касается более гибких вариантов . ну, то есть вышеупомянутое NaturallySpeaking, в котором есть SDK. Но вам нужно связаться с продавцами, чтобы получить какой-либо доступ к нему, и ни одна цена не указана, поэтому она встречается как одна из тех, «сколько это стоит?» Ну, сколько у вас есть? » Подобные вещи. Кажется, что нет опции «скачать и играть с ней». :(

Что касается текста в речь, System.Speech.Synthesis делает это. Это еще проще, чем распознавание речи. Я написал небольшую программу, чтобы разрешить мне вводить текст, нажать Enter и прочитать текст вслух. Мой четырехлетний ребенок загипнотизирован. :) («Папочка, я хочу поучаствовать в wobot»).

Это статья из журнала MSDN, в которой впервые обсуждались использование API System.Speech для Vista. Некоторые из них устарели, потому что API изменился между бета-версиями (когда статья была написана) и выпуском Vista, но это все еще один из лучших ресурсов, которые я нашел, и хорошо вписывается в пространство имен System.Speech , См. Http://msdn.microsoft.com/en-us/magazine/cc163663.aspx

[Примечание. Я был лидером разработки для управляемого управляемого распознавания речи в .NET 3.0]

System.Speech является частью .NET 3.0, поэтому он доступен как для Vista, так и для XP. В Vista у вас есть дополнительное преимущество — наличие механизма распознавания речи, предварительно установленного ОС. В XP вы выбираете: используйте SAPI 5.1 SDK с очень старым движком (но может работать достаточно хорошо для вашего сценария управления и управления), установите Office 2003, который устанавливает более новую версию распознавателя. Существует также несколько доступных для SAPI 5 систем распознавания речи.

Если вам нужно переключать языки, вы захотите использовать класс System.Speech.Recognition.SpeechRecognitionEngine, который позволяет вам выбрать механизм SR для языка, который вам нужен для поддержки. Обратите внимание, что двигатели определяются набором поддерживаемых им языков (они могут использовать один и тот же двоичный файл, заменяя только файлы данных для поддержки дополнительных языков).

Комментарий, если вам нужно знать больше.

Dragon Naturally Speaking SDK, возможно, стоит посмотреть. Этот проект выглядел интересным.

progtask.ru

Всё про программирование

Озвучка текста в C#

В данной статье я покажу как при помощи C# можно озвучить текст.

Работать будем только с английским текстом. Для работы нам понадобится подключить библиотеку Speech.

Прокомментированный код ниже:

Также есть способ озвучивания текста при помощи Amazon Polly. Данный способ поддерживает большое количество языков. Статья по работе с данным сервисом находится тут.

Если что-то непонятно, тогда можете спросить меня в комментариях к данной статье.

Другое «Голосовой чат на C# л»,
Программирование, си-шарп

Эта работа успешно выполнена на онлайн-сервисе помощи студентам «Всё сдал!».

  • Задание
  • Обсуждение

Голосовой чат на C# л

Голосовой чат на C# либо сделать с нуля, либо допилить имеющийся (выдает ошибку при работе), предлагайте ваши цены

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

Help — C# голосовое управление

Здраствуйте немогу найти голосовую библиотеку для с# Winform или WCF помогите .

  • Перемещено Vector BCO 12 декабря 2015 г. 9:15 Вопрос про разработку

Ответы

Наверное потому что никто не знает что такое «голосовая библиотека».

Ищите «text to speech C#» или «speech recognition C#» в зависимости от того что именно вам требуется.

This posting is provided «AS IS» with no warranties, and confers no rights.

Голосовое управление Ардуино через ПК на C#

Об этом кворке

Сделаю голосовое управление Ардуино через компьютер на C#. Время работы зависит от сложности скетча.

От вас нужен скетч и голосовые команды. И связаться со мной. Если нет скетчи то я могу написать без доп. оплаты

Рекомендуем также

Отзывы по кворку

Гарантия возврата

Средства моментально вернутся на счет, если что‑то пойдет не так

Kwork переводит деньги продавцу, только когда покупатель проверил и принял заказ.

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