Офлайн распознавание речи: Сверхбыстрое распознавание речи без серверов на реальном примере / Хабр
Настройка офлайн распознавания и синтеза речи из Anobic Support
- Подробности
Приложение Поддержка Anobic (Anobic Support) предоставляет простой способ установить необходимые языковые приложения и, в частности, настроить ваше устройство для работы с голосовыми функциями.
Голосовой ввод в устройствах Андроид — это не что иное, как еще один способ ввода текста, наравне с клавиатурой. Т.е. это не неотьемлемая часть голосового переводчика, а часть операционной системы. Концептуальное решение для ввода текста в Андроид: он везде может быть осуществлен любым доступным способом, будь то клавиатура, микрофон, подключаемый сканер или встроенная камера. Поэтому логично, что голосовой ввод в переводчик настраивается не в переводчике, а где-то в системе.
Для удобства пользователя эти настройки сгруппированы вместе в приложении Anobic Support, они находятся в конце списка:
Найдите в списке приложений программу Anobic Support , откройте ее и потяните список вниз до самого конца |
При нажатии на пункт «Настройки распознавания речи» появится изображение, как на картинке справа. Закладка «Все» позволяет гибко конфигурировать переводчик, скачивая новые пакеты или удаляя старые (отмечено красным). Закладка «Установленные» содержит список языков, которые уже доступны на устройстве. Под каждым из пунктов находится подпись «предустановлено/скачать/доступно обновление», являющаяся подсказкой, в каком статусе находится язык и какое действие возможно при нажатии на него. Наличие языка в закладке «Установленные» означает, что пакет успешно интегрирован в систему, и для него возможен голосовой ввод, т.е. смартфон может преобразовать речь на этом языке в текст (который, в свою очередь, в программе Мультиперевод, Словарь, Google Translate, Яндекс.Переводчик и других будет использован для перевода на другой язык). |
Аналогично, пункт «Настройки синтеза речи» выглядит как на картинке справа с той разницей, что непосредственная конфигурация каждого языка осуществляется после нажатия на выбранный пункт из списка: |
Иконка справа от языка показывает какое действие можно совершить при нажатии на нее:
Скачивание/установка
Отсутствие иконки означает, что пакет уже находится в системе и не может быть удален. Нажатие на текст «Набор голосов» позволяет открыть настройку выбор диктора:
|
Кроме того, в настроках приложения «Anobic Support» реализована фукция автоматической проверки и скачивания данных для синтеза речи (отмечено красным) |
Rhasspy — опенсорсный и полностью офлайновый речевой тулкит. Распознавание русского языка. Никаких утечек в облако
Фото из сравнения микрофонных массивов для DIY-устройств типа самодельной умной колонки
Системы вроде Amazon Echo передают в облако для хранения ваши конфиденциальные разговоры (даже записанные случайно). В некоторых случаях записи прослушиваются живыми операторами. Это не просто потеря конфиденциальности. Это как добровольно впустить в свою квартиру «товарища майора», который стоит рядом 24 часа в сутки, слушает и внимательно записывает, притворяясь услужливым ассистентом.
Вместо покупки коммерческой системы у корпораций типа Google, Amazon или «Яндекс», вы можете собрать аналогичную опенсорсную систему на базе Raspberry Pi 2-3 B/B+, персонального компьютера или ноутбука.
Rhasspy — безопасный голосовой помощник, который работает автономно. Он ничего не передаёт на удалённые сервисы, при этом успешно справлятся с распознаванием речи и голосовых команд.
У Rhasspy очень простая интеграция в любую программную или аппаратную систему, куда вы хотите добавить голосовое управление. Автор поясняет, что инструмент изначально писался для проекта Home Assistant, но теперь совместим и с большинством других систем домашней автоматизации (Hass.io, Node-RED, OpenHAB, Jeedom).
Rhasspy оптимизирован для работы с внешними сервисами по MQTT, HTTP или Websockets. Оптимизирован именно для голосовых команд с чётко определённой грамматической структурой (включить/выключить свет, сделать музыку громче/тише и т. д.)
Поддерживается 14 языков, в том числе русский.
Модель работы описана в документации. В её основе — распознавание голосовых команд через специфический язык шаблонов, специально приспособленный для данной области. Эти команды классифицируются по намерению (intent) и могут содержать слоты или теги, такие как цвет для освещения или название конкретного светильника, которому подаётся команда.
Чтобы начать работу, перечислите намерения (в квадратных скобках) и возможные способы их вызова. Шаблон выглядит примерно так:
[LightState]
states = (on | off)
turn (<states>){state} [the] light
По такому шаблону Rhasspy сгенерирует JSON-код, который может использовать система домашней автоматизации, внешнее приложение или аппаратное устройство (через Node-RED, веб-сокеты):
{
"text": "turn on the light",
"intent": {
"name": "LightState"
},
"slots": {
"state": "on"
}
}
Непосредственно распознавание речи выполняет pocketsphinx: легковесный опенсорсный движок с поддержкой русского языка. Он отлично подходит для мобильных устройств или одноплатных компьютеров типа Raspberry Pi.
Обработка звука происходит автономно на вашем устройстве. Сам звук может поступать с микрофонного массива Raspberry Pi (типа ReSpeaker 4 Mic Array или ReSpeaker 2 Mics pHAT) или из аудиопотока по сети.
Rhasspy — просто очень удобный инструмент, чтобы связать движок распознавания речи с системой автоматизации дома или какой-то другой системой, которая требует голосового управления. В принципе, его можно использовать где угодно: например, в мобильных приложениях. Или в каком-то домашнем роботе типа пылесоса или бармена.
Приятно, когда робот выполняет все те же действия, что и раньше, но теперь по голосовой команде.
Автор Rhasspy также является автором проекта voice2json: это консольная программа примерно для той же задачи, чтобы легко преобразовать человеческую речь в список компьютерных команд (или наоборот).
Кажется, будущее за голосовыми интерфейсами. В этом случае очень важно, чтобы обработка звуковых потоков проходила локально и не требовала доступа в интернет.
Использование технологии распознавания голоса в приложении ВКонтакте Offline / Хабр
Voice Search Technology
Многие знают, что несколько лет назад Google запустили технологию распознавания голоса и сделали ее доступной для простых пользователей. Про эту технологию много где писали, и что приятно, она умеет распознавать слитную русскую речь. Внешне технология крайне проста, и любой вебмастер может применить ее на своем сайте, добавив всего лишь несколько строк в свой HTML-код. Вопрос стоит в другом: где стоит применять эту технологию в вебе?
Как мы знаем, технология существует довольно давно, однако сама компания Google не столь активно использует эту технологию в вебе, несмотря на то, что применение этой технологии было бы крайне полезно для людей с ограниченными возможностями. Даже в продуктах компании редко можно найти применение голосовому вводу. И на самом деле это вполне понятно: нет смысла добавлять голосовой поиск там, где ввод текста гораздо быстрее осуществляется с клавиатуры. Самое логичное применение голосовому вводу Google нашла в сервисе Google Translate, где пользователи могут ввести текст, который нужно перевести, не только с помощью клавиатуры, но и с помощью голоса.
Как мы применяем эту технологию
Как можно увидеть, сама компания Google не встраивает эту технологию во все продукты подряд. Однако мы при разработке нашего приложения ВКонтакте Offline нашли этой технологии на наш взгляд самое лучшее применение. Если вы пользуетесь этим приложением, то вы уже наверное заметили, что очередное обновление принесло кроме исправления мелких недочетов еще и функцию ввода текста писем голосом. Ввод текста писем с помощью голоса стал действительно удобней и быстрее, а это и есть то, для чего создавалась технология распознавания голоса.
Аудитория у данной функции очень широка и разнообразна, под нее попадают даже люди, которые в силу своих возможностей не могут вводить текст, или медленно это делают. Мы считаем, что это целесообразное и важное применение голосового ввода, особенно для деловой переписки. Здесь надо отметить, что распознавание речи направлено в деловую и литературную сторону. Распознавание разговорной речи происходит не всегда гладко и, как мы выяснили, больше зависит от дальности вашего нахождения от микрофона. Но мы и создавали приложение затем, чтобы вернуть плюсы e-mail переписки, а один из них — это четкая, не разговорная формулировка мыслей. Впрочем, смотрите сами:
Распознавание текста зависит от вашей локализации Chrome. Чтобы в певую очередь распознавались русские слова, нужно выставить русский язык выше на странице настроек: chrome://settings/languages
Приложение VKontakte Offline в Chrome Web Store: http://goo.gl/D2Aei
Официальная страница ВКонтакте: http://vkontakte.ru/vkoffline
Как включить распознавание голоса оффлайн Блог пользователя Highscreen Boost
В данном телефоне присутствует распознавание речи или голосовой ввод, но работает он только через интернет, подключаясь к сервисам Google. Но телефон можно научить распознавать речь и без интернета, мы рассмотрим как включить распознавание русского языка в оффлайн. Для работы данного метода у вас должны быть установлены два приложения Voice Search и Google Search, хотя в заводской прошивки данные программки уже присутствуют.
Для прошивки
Переходим в настройки телефона и выбираем
Язык и ввод — Голосовой поиск — Распознавание речи оффлайн.
Выбираем русский язык и скачиваем его.
Для прошивки 2.8B
В новой прошивке пункт меню «Распознавание речи оффлайн» отсутствует.
Если до обновления прошивки у вас были установлены оффлайн пакеты, и вы не делали вайпов (сброса настроек) при обновлении, то они должны были сохранится. Иначе придется откатываться на прошивку 2.2, устанавливать голосовые пакеты, а уже потом обновлять систему до 2.8B.
Для устройств Rev.B
Устанавливаем апдейт через рекавери и наслаждаемся распознаванием голоса в оййлайн.
1. Необходимы Root-права
2. Скачиваем базу для русской речи, и копируем на SD-карту
Скачать Russian_offline.zip 1301
3. Войти в рекавери, зажав (Громкость + и Вкл) при выключенном телефоне.
4. Выбрать Apply update from external storage и выбираем скачанный архив.
5. По окончанию установки, выбираем Reboot system now
6. Через RootExplorer или подобный софт можно проверить наличие файлов на системном диске. В папке
.\system\usr\srec\ru-RU\ должны быть следующие файлы:
Настройка офлайн распознавания и синтеза речи из Anobic Support
Приложение Поддержка Anobic (Anobic Support) предоставляет простой способ установить необходимые языковые приложения и, в частности, настроить ваше устройство для работы с голосовыми функциями.
Голосовой ввод в устройствах Андроид — это не что иное, как еще один способ ввода текста, наравне с клавиатурой. Т.е. это не неотьемлемая часть голосового переводчика, а часть операционной системы. Концептуальное решение для ввода текста в Андроид: он везде может быть осуществлен любым доступным способом, будь то клавиатура, микрофон, подключаемый сканер или встроенная камера. Поэтому логично, что голосовой ввод в переводчик настраивается не в переводчике, а где-то в системе.
Для удобства пользователя эти настройки сгруппированы вместе в приложении Anobic Support, они находятся в конце списка:
Найдите в списке приложений программу Anobic Support , откройте ее и потяните список вниз до самого конца |
При нажатии на пункт «Настройки распознавания речи» появится изображение, как на картинке справа. Закладка «Все» позволяет гибко конфигурировать переводчик, скачивая новые пакеты или удаляя старые (отмечено красным). Закладка «Установленные» содержит список языков, которые уже доступны на устройстве. Под каждым из пунктов находится подпись «предустановлено/скачать/доступно обновление», являющаяся подсказкой, в каком статусе находится язык и какое действие возможно при нажатии на него. Наличие языка в закладке «Установленные» означает, что пакет успешно интегрирован в систему, и для него возможен голосовой ввод, т.е. смартфон может преобразовать речь на этом языке в текст (который, в свою очередь, в программе Мультиперевод, Словарь, Google Translate, Яндекс.Переводчик и других будет использован для перевода на другой язык). |
Аналогично, пункт «Настройки синтеза речи» выглядит как на картинке справа с той разницей, что непосредственная конфигурация каждого языка осуществляется после нажатия на выбранный пункт из списка: |
Иконка справа от языка показывает какое действие можно совершить при нажатии на нее:
Скачивание/установка
Отсутствие иконки означает, что пакет уже находится в системе и не может быть удален. Нажатие на текст «Набор голосов» позволяет открыть настройку выбор диктора:
|
Кроме того, в настроках приложения «Anobic Support» реализована фукция автоматической проверки и скачивания данных для синтеза речи (отмечено красным) |
очень краткий вводный курс / Блог компании Toshiba / Хабр
Рассказать неспециалисту максимально просто о работе компьютерного распознавания речи и преобразовании её в текст — задача почти непосильная. Ни один рассказ об этом не обходится без сложных формул и математических терминов. Мы попробуем максимально понятно и немного упрощённо объяснить, как ваш смартфон понимает речь, когда машины научились распознавать человеческий голос и в каких неожиданных областях используется эта технология.
Необходимое предуведомление: если вы разработчик или, тем более, математик, вы едва ли узнаете из поста что-то новое и даже посетуете на недостаточную научность материала. Наша цель — самым простым образом познакомить непосвящённых читателей с речевыми технологиями и рассказать, как и зачем Toshiba взялась за создание своего голосового ИИ.
Важные вехи в истории распознавания речи
История распознавания электронными машинами человеческой речи началась чуть раньше, чем принято думать: в большинстве случаев принято вести отсчёт с 1952 года, но на самом деле одним из первых устройств, реагировавшим на голосовые команды, был робот Televox, о котором мы уже писали. Созданный в 1927 году в США робот Герберт Телевокс представлял собой несложное устройство, в котором различные реле реагировали на звуки разной частоты. В роботе было три камертона, каждый из которых отвечал за свою тональность. В зависимости от того, какой камертон срабатывал, включалось то или иное реле.
Фактически вся «начинка» Телевокса, включая систему распознавания команд, располагалась на стойке в районе туловища «робота». Закрыть её крышкой было нельзя, иначе камертоны не смогли бы корректно «слышать» звуки. Источник: Acme Telepictures / Wikimedia
С Телевоксом можно было общаться как отдельными сигналами с помощью свистка, так и короткими словесными репликами — их камертоны тоже раскладывали на последовательность звуков. Создатель робота Рой Уэнсли даже устраивал фантастическую по тем временам демонстрацию, говоря команду «Сезам, откройся», по которой Телевокс включал реле, отвечающее за открытие двери. Никаких цифровых технологий, нейросетей, ИИ и машинного обучения — только аналоговая техника!
Следующим ключевым изобретением, открывшим путь к настоящему распознаванию человеческой речи, стала машина Audrey, разработанная в 1952 году в кузнице инноваций Bell Labs. Огромная Audrey потребляла кучу электроэнергии и была размером с хороший шкаф, но вся её функциональность сводилась к распознаванию произнесённых цифр от нуля до девяти. Всего десять слов, да, но не будем забывать, что и Audrey была аналоговой машиной.
К сожалению, история не сохранила публичных фотографий Audrey, есть только принципиальная схема. Простая на бумаге, сложная в воплощении — по воспоминаниям современников, компоненты Audrey занимали целый шкаф. Источник: Bell Labs
Работало это так: диктор проговаривал в микрофон цифры, делая между словами интервалы не менее 350 мс, Audrey переводила услышанные звуки в электрические сигналы и сравнивала их с записанными в аналоговой памяти образцами. По результатам сравнения машина подсвечивала цифру на приборной панели.
Это был прорыв, но реальной пользы от Audrey не было и быть не могло — машина распознавала голос своего создателя с точностью до 97%, другие специально тренированные дикторы получали точность 70-80%. Посторонние люди, впервые контактирующие с Audrey, как бы ни старались, видели на табло свою цифру только в 50% случаев.
Несмотря на революционные для своего времени результаты, Audrey не нашла, да и не могла найти практического применения. Предполагалось, что систему можно приспособить вместо телефонных операторов, но всё же услуги человека оказались удобней, быстрее и гораздо надёжней, чем Audrey.
Презентация похожей на Audrey, только гораздо меньших размеров, машины — IBM Shoebox. Хорошо видна скорость работы Shoebox. Машина также могла выполнять простейшие математические операции сложения и вычитания
В начале 1960-х работы по созданию машин для распознавания речи велись в Японии, Великобритании, США и даже СССР, где изобрели очень важный алгоритм динамической трансформации временной шкалы (DTW), с помощью которого удалось построить систему, знающую около 200 слов. Но все наработки были похожи друг на друга, а общим недостатком стал принцип распознавания: слова воспринимались как целостные звуковые отпечатки, и затем их сверяли с базой образцов (словарём). Любые изменения скорости, тембра и чёткости проговаривания слов значительно влияли на качество распознавания. Перед учёными встала новая задача: научить машину слышать отдельные звуки, фонемы или слоги и затем составлять из них слова. Такой подход позволил бы нивелировать эффект смены диктора, когда в зависимости от говорящего уровень распознавания резко различался.
Фонемы — это звук или множество звуков, которыми обозначается буква слова в разговорной речи в зависимости от контекста. Например, в словосочетании «пока что» буква «ч» в разговоре чаще всего звучит как «ш». А предлог «с» в словосочетаниях «с сестрой» и «с братом» в первом случае звучит как «с», а во втором — как «з». То есть, буква одна, но фонемы разные.
В 1971 году Управление перспективных исследовательских проектов Министерства обороны США (DARPA) запустило пятилетнюю программу с бюджетом $15 млн, в рамках которой была поставлена задача создать систему распознавания, знающую не менее 1000 слов. К 1976 году Университет Карнеги — Меллона представил Harpy, способную оперировать словарём из 1011 слов. Harpy не сличала целиком услышанные слова с образцами, а разделяла их на аллофоны (образец звучания фонемы в зависимости от окружающих её букв). Это был очередной успех, подтвердивший, что будущее за распознаванием отдельных фонем, а не цельных слов. Впрочем, среди недостатков Harpy был крайне низкий уровень корректного распознавания аллофонов (вариантов произношения фонем) — около 47%. При такой высокой погрешности доля ошибок росла вслед за объёмом словаря.
Описание принципа работы Harpy. Видео работы программы не сохранилось.
Опыт Harpy показал, что наращивать словари целостных звуковых отпечатков бесполезно — это лишь увеличивает время распознавания и радикально снижает точность, поэтому исследователи всего мира пошли по другому пути — распознавания фонем. В середине 1980-х машина IBM Tangora могла научиться понимать речь любого диктора с любым акцентом, диалектом и особенностями произношения, для этого лишь требовалась 20-минутная тренировка, в ходе которой накапливалась база образцов фонем и аллофонов. Применение скрытой марковской модели повысило словарный запас IBM Tangora до впечатляющих 20 000 слов — в 20 раз больше, чем было у Harpy, и уже сравнимо со словарным запасом подростка.
Все системы распознавания речи с 1950-х до середины 1990-х годов не умели считывать естественную разговорную речь человека — слова приходилось произносить отдельно, делая паузы между ними. По-настоящему революционным событием стало внедрение разработанной в 1980-х скрытой марковской модели — статистической модели, строившей точные предположения о неизвестных элементах на основе вытекающих из них известных. Упрощённо говоря, с помощью всего нескольких распознанных фонем в одном слове скрытая марковская модель очень точно подбирает недостающие фонемы, тем самым значительно повышая точность распознавания речи.
В 1996 году появилась первая коммерческая программа, способная различать не отдельные слова, а беспрерывный поток естественной речи — IBM MedSpeak/Radiology. Продукт IBM был специализированным, он использовался в медицине для стенографирования описания результатов рентгенограммой, произносимых врачом в ходе исследования. Тут мощность компьютеров наконец стала достаточной для того, чтобы распознавать отдельные слова «на лету». Плюс алгоритмы стали более совершенными, появилось корректное распознавание микропауз между произносимыми словами.
Первым универсальным движком распознавания естественной речи стала программа Dragon NaturallySpeaking 1997-го года. При работе с нею диктору (т. е. пользователю) не требовалось проходить тренировку или оперировать определённым лексиконом, как в случае с MedSpeak, — с NaturallySpeaking мог работать любой человек, даже ребёнок, программа не ставила никаких правил произношения.
Несмотря на уникальность Dragon NaturallySpeaking, ИТ-обозреватели не выказывали особого восторга от распознавания естественной речи. Среди недостатков отмечались ошибки распознавания и некорректная обработка команд, обращённых к самой программе. Источник: itWeek
Примечательно, что движок распознавания был готов ещё в 1980-х, но из-за недостаточной мощности компьютеров разработка Dragon Systems (сейчас компанией владеет Nuance Communications) не успевала «на лету» определять промежутки между словами, что необходимо для распознавания естественной речи. Без этого слова «пока лечится», например, могли быть услышаны компьютером как «покалечится».
Впереди был рост популярности систем распознавания речи, нейросети, появление голосового поиска Google на мобильных устройствах и, наконец, голосовой ассистент Siri, не просто конвертирующий речь в текст, но и адекватно отвечающий на построенные любым естественным образом запросы.
Как услышать сказанное и додумать нерасслышанное?
В наше время лучшим средством для создания движка распознавания речи стала рекуррентная нейросеть (RNN), на которой построены все современные сервисы распознавания голоса, музыки, изображений, лиц, объектов, текста. RNN позволяет с высочайшей точностью понимать слова, а также предсказывать наиболее вероятное слово в рамках контекста, если оно не было распознано.
Нейросетевая темпоральная классификация модели (CTC) выделяет в записанном аудиопотоке (слове, фразе) отдельные фонемы и расставляет их в том порядке, в котором они были произнесены. После многократного анализа, CTC очень чётко выделяет определённые фонемы, а их текстовая запись сравнивается с базой слов нейросети и затем превращается в распознанное слово.
Нейросети потому так и называются, что принцип их работы похож на работу человеческого мозга. Обучение нейросети очень похоже на обучение человека. Например, чтобы совсем маленький ребёнок научился узнавать автомобили и отличать их от мотоциклов, нужно как минимум несколько раз обратить его внимание на различные машины и каждый раз произносить соответствующее слово: это большое и красное — машина, и эта низкая чёрная — машина, а вот это и это мотоциклы. В какой-то момент ребёнок обнаружит закономерности и общие признаки для разных автомобилей, и научится безошибочно узнавать, где легковушка, где джип, где мотоцикл, а где квадроцикл, даже если мимолётом увидит их на рекламном плакате на улице. Так же и нейросеть нужно обучить базой примеров — заставить «изучить» сотни и тысячи вариантов произношения каждого слова, буквы, фонемы.
Рекуррентная нейросеть для распознавания речи хороша тем, что после длительной тренировки базой различных произношений она научится с высокой точностью различать фонемы и составлять из них слова вне зависимости от качества и характера произношения. И даже «додумывать» с высокой точностью в рамках контекста слова, которые не удалось распознать однозначно из-за фоновых шумов или нечёткого произношения.
Но с предсказаниями RNN есть нюанс — рекуррентная нейросеть может «додумать» пропущенное слово только опираясь на самый ближайший контекст примерно в пять слов. За пределами этого пространства анализ вестись не будет. А он порой ох как нужен! Например, для распознавания мы произнесли фразу «Великий русский поэт Александр Сергеевич Пушкин», в которой слово «Пушкин» (специально выделено курсивом) сказали настолько неразборчиво, что ИИ не смог точно распознать его. Но рекуррентная нейросеть, опираясь на имеющийся опыт, полученный в ходе обучения, может предположить, что рядом со словами «русский», «поэт», «Александр» и «Сергеевич» чаще всего встречается слово «Пушкин». Это достаточно простая задача для обученной на русских текстах RNN, потому что очень конкретный контекст позволяет делать предположения с высочайшей точностью.
А если контекст расплывчатый? Возьмём другой текст, в котором одно слово не сможет быть распознано: «Наше всё, Александр Сергеевич Пушкин, трагически погиб в расцвете лет после дуэли с Дантесом. Именем поэта назван Пушкинский театральный фестиваль». Если убрать слово «Пушкинский», RNN попросту не сможет угадать его, опираясь на контекст предложения, ведь в нём упомянуты лишь театральный фестиваль и отсылка к имени неизвестного поэта — возможных вариантов масса!
Вот тут вступает в дело архитектура долгой краткосрочной памяти (Long short-term memory, LSTM) для рекуррентных нейросетей, созданная в 1997 году (подробная статья о LSTM). Она специально разрабатывалась для того, чтобы добавить RNN умение учитывать контекст, удалённый от обрабатываемого события, — результаты решения предыдущих задач (то есть, распознаваний слов) проносятся сквозь весь процесс распознавания, сколь бы длинным не был монолог, и учитываются в каждом случае сомнений. Причём расстояние удаления почти не влияет на эффективность работы архитектуры. С помощью LSTM нейросеть при необходимости угадать слово будет учитывать весь имеющийся в рамках задачи опыт: в нашем примере RNN заглянет в предыдущее предложение, обнаружит, что ранее упоминались Пушкин и Дантес, поэтому «Именем поэта» скорее всего указывает на кого-то из них. Так как нет никаких данных о существовании театрального фестиваля Дантеса, то речь идёт о Пушкинском (тем более что звуковой отпечаток нераспознанного слова очень похож) — такой фестиваль был в базе для обучения нейросети.
«Исповедь голосового помощника». Когда в дело вступает хорошо обученная нейросеть, голосовой ассистент может точно додумать, что же нужно сделать с «зелёными тапочками»
Как распознавание речи делает мир лучше?
В каждом случае применения по-разному — кому-то оно помогает общаться с гаджетами, причём по данным PricewaterhouseCoopers более половины пользователей смартфонов отдают устройствам голосовые команды — среди взрослых людей (25-49 лет) доля тех, кто постоянно пользуется голосовыми интерфейсами, даже выше, чем среди молодёжи (18-25) — 65% против 59%. А в России хотя бы раз с Siri, Google Assitant или «Алисой» общались не менее 71% населения. 45 млн россиян постоянно общаются с «Алисой» от «Яндекса», причём на долю «Яндекс.Карт»/«Яндекс.Навигатора» приходится только 30% запросов.
Кому-то распознавание речи реально помогает в работе — например, как мы говорили выше, врачам: в медицине с 1996 года (когда вышел IBM MedSpeak) распознавание применяется для записи анамнеза и при исследовании снимков — медик может продолжать работу, не отвлекаясь на записи в компьютер или бумажную карту. Кстати, работа над диктовкой в медицине ведётся не только на Западе — в России существует программа Voice2Med от «Центра речевых технологий».
Есть и иные примеры — в том числе наш собственный. Организация бизнеса Toshiba подразумевает полную инклюзию, то есть равные права и возможности для людей с различными ограничениями здоровья, в том числе для сотрудников с нарушениями слуха. У нас есть корпоративная программа Universal Design Advisor System, в рамках которой люди с различными видами инвалидности участвуют в разработке продуктов Toshiba, внося предложения для повышения их удобства людям с ограничениями здоровья — то есть мы не предполагаем, как можно сделать лучше, а оперируем реальным опытом и отзывами сотрудников.
Несколько лет назад в главном офисе Toshiba в Японии мы столкнулись с очень интересной задачей, потребовавшей разработать новую систему распознавания речи. Во время работы Universal Design Advisor System мы получили важный инсайт: сотрудники с нарушениями слуха хотят участвовать в обсуждениях на встречах и лекциях в реальном времени, а не ограничиваться чтением обработанной стенограммы часы или дни спустя. Запуск распознавания речи через смартфон в таких случаях даёт очень слабый результат, поэтому специалистам Toshiba пришлось взяться за разработку специализированной системы распознавания. И, конечно, мы сразу столкнулись с проблемами.
Разговорная речь колоссально отличается от речи письменной — мы не говорим так, как пишем письма, а реальный разговор, переведённый в текст, выглядит очень неаккуратным и даже нечитабельным. То есть, если мы будем даже с высокой точностью конвертировать диалоги на утренней планёрке в текст, то получим бессвязную мешанину, изобилующую словами-паразитами, междометиями и задумчивыми «ааа», «эээ» и «ммм». Чтобы избавиться в тексте от транскрибирования ненужных звуков, слов и выражения эмоций, мы решили разработать ИИ, способный максимально безошибочно распознавать не всегда нужные элементы разговорной речи, в том числе эмоциональный окрас некоторый слов (например, «да ну» может звучать как скепсис или как искренне удивление, а это буквально противоположные значения).
Так выглядит ноутбук с комплектом периферии для распознавания голоса с помощью ИИ Toshiba (слева) и приложение с результатами для конечных устройств (справа). Источник: Toshiba
Тут пригодилась LSTM, без которой точность распознавания была недостаточной для того, чтобы полученный текст можно было читать и понимать без усилий. Причём LSTM пригодилась не только для более точного предугадывания слов в контексте, но и для корректной обработки пауз в середине предложения и междометий-паразитов — для этого мы обучили нейросеть вот этим паразитам и паузам, естественным для разговорной речи.
Значит ли это, что теперь нейросеть может убирать из стенограмм междометия? Да, может, но делать этого не нужно. Дело в том, что (ещё один полученный инсайт) люди с нарушениями слуха ориентируются в том числе на движения губ говорящего. Если губы движутся, но на экране не появляется соответствующий этим движениям текст, возникает ощущение, будто система распознавания упустила часть беседы. То есть для того, кто не может слышать, важно получать максимум информации о разговоре, включая злосчастные паузы и меджометия. Поэтому движок Toshiba оставляет эти элементы в стенограмме, но в реальном времени приглушает яркость букв, давая понять, что это необязательные для понимания текста детали.
Вот так на клиентском устройстве выглядит результат распознавания на лету. В серый цвет окрашиваются не несущие смысловой нагрузки части монолога
Сейчас ИИ Toshiba работает с английской, японской и китайской речью, причём возможен даже перевод между языками на лету. Его не обязательно использовать для стенографирования на лету — ИИ может быть адаптирован для работы с голосовыми ассистентами, которые наконец научатся адекватно воспринимать междометия, паузы и запинки при произношении человеком команды. В марте 2019 года система успешно использовалась для добавления субтитров к видеотрансляции IPSJ National Convention, проводимой в Японии. В ближайших планах — превращение ИИ Toshiba в общедоступный сервис и опыты с внедрением распознавания голоса на производствах.
Make talk. Доклад Яндекса / Блог компании Яндекс / Хабр
Cтандартные библиотеки распознавания речи и озвучки текста в iOS дают массу возможностей. Из доклада VolkovRoman вы узнаете, как за счёт минимального количества кода научить ваше приложение проговаривать текст и кастомизировать озвучку. Рома рассмотрел API распознавания речи, его ограничения и особенности, lifecycle запроса на распознавание и методы работы в офлайн-режиме. Вас ждут примеры UX, обход существующих багов и особенности работы с аудиосессией.
— Всем привет, меня зовут Роман Волков. Сегодня мы поговорим о том, как научить ваше мобильное приложение общаться с вашими пользователями.
Прежде чем мы начнем, коротко обо мне. До iOS-разработки я занимался разработкой интеграционных систем в банковской сфере и разработкой аналитических систем в нефтяной сфере. Я не понаслышке знаю, что такое стандарт PCI DSS и, например, как инженеры понимают, что происходит в скважине во время бурения, только лишь на основе температурных данных.
С 2016 года я занимаюсь iOS-разработкой. У меня есть опыт как фриланса, так и удаленки, опыт участия в запуске нескольких стартапов. В том числе я делал брендовое приложение для компании Rolls Royce.
В 2018 году я присоединился к команде Prisma, развивал приложение Prisma и участвовал в разработке и запуске фоторедактора Lensa. С 2019 года я перешел в Яндекс в качестве iOS-разработчика. С 2020 года я руковожу группой мобильной разработки Яндекс.Переводчика. Приложение Переводчик перестало быть просто приложением для работы с текстом. У нас есть много классных фич, таких как перевод по фото, диалоговый режим, ввод голосом, озвучка и многое другое.
Только начав погружаться в тему работы со звуком в iOS, я не нашел какого-то компактного материала, который включал бы в себя и работу с аудиосессией, и с синтезом, и с распознаванием речи. Именно поэтому я решил сделать этот доклад.
Он будет состоять из четырех частей. Сначала мы поговорим о том, что такое аудиосессия, как с ней правильно работать, как она влияет на работу вашего приложения. Далее перейдем к синтезу речи. Рассмотрим, как можно в несколько строк кода озвучить людей текст прямо на телефоне. Далее мы переключимся на распознавание речи. И в заключение посмотрим, как все эти возможности можно предоставить пользователю в офлайн-режиме и какие у этого особенности.
Вариантов использования озвучки и распознавания речи довольно-таки много. Мое самое любимое — конвертация чужих аудиосообщений в текст. И меня радует, что, например, команда Яндекс.Мессенджера как раз таки сделала такую фичу. Надеюсь, другие мессенджеры подтянутся и сделают это у себя тоже.
Мы плавно переходим к первой части доклада, это AVAudioSession.
Аудиосессия — прослойка между нашим приложением и операционной системой. Точнее — между вашим приложением и железом для работы со звуком: динамиком и микрофоном. В iOS, watchOS и tvOS каждое приложение имеет преднастроенную аудиосессию по умолчанию. Эта преднастройка варьируется от одной ОС к другой.
Если говорить именно про iOS, аудиосессия по умолчанию поддерживает воспроизведение звука, но запрещает любую запись. Если переключатель беззвучного режима выставлен в режим «без звука», то глушатся абсолютно все звуки внутри вашего приложения. И третье: блокировка устройства останавливает проигрывание всех звуков внутри вашего приложения.
Настройка аудиосессии состоит из трех пунктов: это выбор категории, режима и дополнительных опций. Мы рассмотрим каждый из пунктов по отдельности.
Начнем с категории. Категория — это некий набор настроек базового поведения аудиосессии. Категория представляет из себя набор параметров, которые позволяют операционной системе максимально соответствовать, скажем так, названию этой категории. Поэтому Apple рекомендует выбирать для своего приложения категорию, максимально приближенную из доступных. На данный момент в iOS 13 доступно шесть категорий. Есть еще седьмая категория, но она помечена как deprecated, ее не стоит использовать.
В докладе мы рассмотрим три категории: playback, record и playAndRecord. Режим позволяет дополнять возможности установленной категории, так как некоторые режимы доступны только для определенных категорий.
Например, на слайде вы видите режим moviePlayback, и его можно установить только для категории Playback.
Установка режима moviePlayback позволяет аудиосессии автоматически улучшать качество проигрываемого звука для встроенных динамиков и для наушников. В докладе мы будем использовать только режим «по умолчанию». Но я хочу отметить, что если вы будете использовать несовместимую пару категории и режима, то будет использован дефолтный Mode.
Третье — options, точечные настройки работы аудиосессии. Например, можно настроить то, как звук с вашего приложения будет миксоваться со звуком из других приложений, настроить правильную деактивацию аудиосессии так, чтобы другие приложения могли узнать, что ваше приложение закончило работу со звуком.
Сначала мы рассмотрим установку категории для проигрывания, а именно playback. Это одна из категорий, предназначенных только для проигрывания звука. Если она установлена, то активация аудиосессии прерывает другие проигрываемые аудио, например, из других приложений.
Важно еще и то, что аудио будет проигрываться, даже если переключатель беззвучного режима переведен в беззвучный режим.
Также для этой категории доступна опция проигрывания в бэкграунд-состоянии, но для этого у вашего приложения должен быть включен Audio, AirPlay, and Picture in Picture.
Рассмотрим две опции, которые видны на слайде. Первая — mixWithOthers. Если вы активируете аудиосессию с данной опцией, то проигрывание звука внутри вашего приложения будет смиксовано с текущим проигрываемым звуком, например с музыкой, с одним уровнем громкости. Но если вы хотите, чтобы ваш звук превалировал в плане громкости над текущим проигрыванием, вы можете использовать опцию duckOthers. Она понижает громкость звука, который проигрывается в бэкграунде, и возвращает обратно, когда проигрывание звука внутри вашего приложения закончилось.
Например, такое можно наблюдать в навигационных приложениях: для анонса маршрута то, что вы слушаете сейчас, приглушается, проигрывается анонс, и затем все возвращается в первоначальное состояние.
Рассмотрим вариант настройки аудиосессии для распознавания с микрофона. Категория Record заглушает все проигрываемые аудио, пока аудиосессия с этой категорией активна в приложении. Record не может заглушить системные звуки, такие как звонки, будильники — в общем, стандартные звуки, которые имеют более высокий приоритет.
Также вы можете добавить опцию allowBluetoothA2DP, это позволяет использовать гарнитуры типа AirPods для записи звука с микрофона и для проигрывания звука в них. Для этого существует более старая опция, которая звучит просто как allowBluetooth, но с ее использованием сильно падает качество звука.
У нас раньше использовалась старая опция, и были жалобы от пользователей, что их не устраивает качество проигрываемого и записываемого звука внутри приложения. Мы поменяли опцию, все стало лучше.
Если вы хотите использовать одновременно и распознавание, и синтез речи, используйте категорию playAndRecord. Тогда в рамках активированной аудиосессии можно использовать и запись, и проигрывание звука.
Отдельно стоит рассмотреть опцию notifyOthersOnDeactivation. Используется она в методе активации аудиосессии. Почему она так важна?
Если аудиосессия была деактивирована с этой опцией, то другие приложения получат идентификацию AVAudioSessionInterruptionNotification с параметром AVAudioSessionInterruptionTypeEnded с параметром, что прерывание их аудиосессии закончилось и они могут продолжить работу со звуком, начатую до того, как они были прерваны.
Такой сценарий возможен, если вы используете категорию playback в приложении без опции mixWithOthers, потому что в противном случае вы не будете прерывать звук другого приложения, ваше аудио просто будет замиксовано с другим приложением.
Использование этой опции и правильная обработка модификации позволяет предоставить пользователям комфортный user experience при работе с вашим приложением.
На слайде можно увидеть пример, как правильно обрабатывать нотификацию о том, что ваше приложение было прервано другим в рамках аудиосессии, и ситуацию, когда прерывание закончилось. То есть мы подписываемся на определенную нотификацию и, может быть, два типа: когда прерывание только началось и когда оно закончилось.
В первом случае вы можете сохранить состояние, а во втором можете продолжить проигрывание звука, который был прерван другим приложением.
Вот пример, как это может работать:
Видео будет проигрываться с того момента, где демонстрируется пример
В этом примере музыка проигрывалась в другом приложении, а именно в VLC, затем я запустил озвучку внутри нашего приложения. Музыка прервалась, произошло проигрывание синтезированной речи, затем музыка автоматически продолжила проигрываться.
Хочу отметить, что не все приложения правильно обрабатывают ситуацию, когда их звук прерывается. Например, некоторые популярные мессенджеры не возобновляют проигрывание звука.
Подытожим. Мы разобрали принцип работы аудиосессии. Рассмотрели возможности конфигурации аудиосессии под требования ваших приложений и научились комфортно для пользователя активировать и деактивировать аудиосессию.
Идем дальше. Синтез речи.
На слайде условно представлена диаграмма задействованных классов в процессе синтеза речи. Основными классами являются AVSpeechSynthesiser, AVSpeechUtterance и AVSpeechSynthesisVoice с его настройками.
Отдельно отмечу, что есть AVSpeechSynthesizerDelegate, который позволяет вам получать уведомления о жизненном цикле всего запроса. Поскольку озвучивание текста — это проигрывание звука, неявной зависимостью здесь будет рассмотренная ранее AVAudioSession.
Можно сделать запрос на распознавание и без настройки аудиосессии, но для любых продакшен-приложений важно понимать, как ее настраивать. Мы говорили об этом ранее.
Самый коротенький пример того, как можно быстро сделать запрос на синтез речи. Вам нужно создать объект класса AVSpeechUtterance, где вы указываете текст, который хотите озвучить, желаемый голос и язык. Если вы не укажете локаль языка при создании голоса, то будет использоваться локаль вашего телефона по умолчанию. Но о выборе голосов и о том, как с ними работать, мы поговорим в следующих слайдах.
Далее вы создаете объект класса AVSpeechSynthesizer и вызываете метод speak. Всё. После этого текст будет синтезирован и проигран, вы услышите результат.
Но на самом деле, это только начало. У синтеза речи намного больше возможностей, о которых мы сейчас и поговорим.
Первое — можно задать скорость при приеме звука. Скорость задается в виде вещественного числа в диапазоне от нуля до единицы. Фактическая скорость изменяется в значении от нуля до единицы, если вы устанавливаете свойство rate в диапазоне от 0 до 0,5.
Если же вы устанавливаете значение rate в диапазоне от 0,5 до 1, то скорость меняется пропорционально в значениях от 1X до 4X.
Пример того, как можно работать со скоростью.
В AVFoundation существует константа AVSpeechUtteranceDefault, которая на самом деле равняется 0,5, что эквивалентно обычной скорости проигрывания звука.
Также вы можете указать скорость вдвое меньше обычной, вам нужно указать значение 0,25. Если вы укажете 0,75, скорость будет увеличена в 2,5 раза от нормальной. Также для удобства есть константы на минимальную скорость и на максимальную.
Сейчас я проиграю несколько примеров:
Видео будет проигрываться с того момента, где демонстрируется пример
Это был пример того, как Макинтош в первый раз заговорил собственным голосом на одной из презентаций Apple. И это был пример нормальной скорости синтезированной речи.
Это — замедленная в 2 раза.
Это — ускоренная в 2,5 раза.
Отдельно последними строчками я вывел свойства preUtteranceDelay и postUtteranceDelay. Это задержка перед тем, как звук начнет проигрываться, и задержка после того, как он закончил проигрываться. Удобно использовать, когда вы миксуете свое приложение со звуком из других приложений и хотите, чтобы громкость понизилась, прошло какое-то время и вы проиграли свой результат. Потом подождали еще какое-то время, и только после этого громкость в другом приложении вернулась на исходную позицию.
Посмотрим следующий параметр — выбор голоса. Голоса для синтеза речи голоса делятся в основном по локали, языку и качеству. AVFoundation предлагает несколько способов создать или получить объект AVSpeechSynthesisVoice. Первый — по идентификатору голоса. У каждого голоса есть свой уникальный ID, и список всех доступных голосов можно узнать, обратившись к статическому свойству SpeechVoice. Получение этого свойства имеет некоторые особенности, мы поговорим о них далее.
Стоит отметить, что если вы передадите не валидный идентификатор в конструктор, то конструктор вернет «нет».
Второй вариант — получить по коду языка или локали. Также хочу отметить, что Apple говорит, что голоса Siri недоступны, но это не совсем правда: нам удалось получить идентификаторы некоторых голосов, которые используются в Siri на некоторых устройствах. Возможно, это баг.
У голосов бывает два качества — дефолтное и улучшенное. Для некоторых голосов можно скачать улучшенную версию, мы поговорим об этом в последнем разделе, обсудим, как можно докачать необходимые голоса.
Пример того, как можно выбрать конкретный голос. Первый способ — по конкретному идентификатору, второй — по строке, обозначающей код языка, третий — по конкретной локали.
Хочу вам сейчас проиграть два примера озвучивания одного и того же текста разными локалями.
Видео будет проигрываться с того момента, где демонстрируется пример
Второй вариант, мне кажется, ближе к российскому произношению.
Также в iOS 13 появился Gender. И это свойство доступно только на iOS 13 и больше, оно работает только для голосов, которые были добавлены в iOS 13. Поэтому Gender задается в виде enum и имеет три свойства: Female, Male и Unspecified.
В нашем приложении можно выбрать пол голоса, которым будет озвучиваться текст. Для старых голосов мы сами составили список и храним его у нас в приложении. Разделение того, какой голос мы считаем мужским, какой женским, для тех голосов, для которых система возвращает Unspecified.
В iOS 13.1 список голосов может вернуть пустой список при первом обращении. Решение: вы можете перезапрашивать раз в какое-то количество секунд весь этот список. Как только он возвращается не пустой, считаем, что мы наконец-то получили актуальный список голосов.
В последующих версиях iOS этот баг был исправлен, но не удивляйтесь, если встретите такое в своих приложениях.
Интересный момент, на который я натолкнулся, когда исследовал документацию: существует статическое свойство AVSpeechSynthesisVoiceAlexIdentifier. Это очень интересный идентификатор, потому что, во-первых, далеко не на всех устройствах можно с этим идентификатором создать голос. Во-вторых, мне непонятно, почему он находится отдельно. В-третьих, если же все-таки получить голос с этим идентификатором, то этот голос имеет уникальный и отличный от других класс.
При этом исследование хедеров фреймворков ничего полезного и интересного мне недало. Если вы знаете какую-то информацию про этот идентификатор — зачем он нужен, почему появился, — расскажите мне, пожалуйста. Я так и не смог найти ответ на этот вопрос.
Здесь можно наблюдать пример того, как мы сделали в интерфейсе выбор голоса на основе локали, пола и как мы даем возможность указывать скорость озвучки для конкретного языка.
Коротко расскажу про систему знаков для записи транскрипции на основе латинского языка. Когда вы отдаете текст на озвучку, то можете указать произношение конкретных слов внутри него. В iOS это делается через NSAttributedString, с указанием специального ключа. Генерация этого произношения доступна прямо на iOS-устройстве в разделе Accessibility. Но для больших объемов, мне кажется, это очень неудобно, и можно автоматизировать генерацию фонетической транскрипции другими способами.
Например, вот репозиторий, в котором для английского языка есть большой словарь соотношения слова и его произношения.
На слайде — пример того, как можно для одной локали заменить произношение конкретного слова. В данном случае это |təˈmɑːtəʊ|, tomato.
Видео будет проигрываться с того момента, где демонстрируется пример
Сейчас был проигран вариант с установкой атрибута на произношение и без.
Итого мы рассмотрели способы создания запроса на синтез речи. Научились работать с голосами. Рассмотрели обход одного из багов, который вам может встретиться, и посмотрели на фонетическую транскрипцию, как ее можно использовать.
Плавно переходим к распознаванию речи. Оно в iOS представлено в виде фреймворка под названием Speech, и оно позволяет осуществлять распознавание речи прямо на ваших устройствах.
Поддерживается приблизительно 50 языков и диалектов, доступно начиная с iOS 10. Обычно распознавание речи требует подключения к интернету. Но для некоторых устройств и для некоторых языков распознавание может работать в офлайн-режиме. Мы поговорим об этом в четвертой части моего доклада.
Распознавание речи доступно как с микрофона, так и из аудиофайла. Если вы хотите предоставить пользователю возможность распознавать речь с микрофона, то пользователь должен дать разрешение на два permissions. Первое — на доступ к микрофону, второе — на то, что его речь будет передана на сервера Apple для проведения распознавания.
К сожалению, нельзя там, где вы можете использовать только офлайн-распознавание, не запрашивать этот permission. Его нужно запросить в любом случае.
Список взят с сайта Apple. Это те языки и локали, которые доступны для распознавания речи. Но на самом деле это список языков и локалей, доступных для диктовки на стандартной клавиатуре. И API фреймворка Speech под капотом ссылается на реализацию диктовки из стандартной клавиатуры.
Распознавание речи бесплатно для нас как для разработчиков, но оно имеет лимит на использование. Первое — лимит по устройствам и запросам в день. Второе — общий лимит для приложения. И третье — распознать можно максимум одну минуту. Исключение составляет офлайн-режим. В нем вы можете делать распознавание длинных записанных аудиосообщений.
Apple, конечно, не говорит конкретные цифры по лимитам, и как было написано или было сказано на докладе WWDC, нужно быть готовым к обработке ошибок писать им, если вы часто, скажем так, утыкаетесь в эти лимиты. Но у нас такой проблемы нет. Мы для русского языка используем SpeechKit в качестве движка для распознавания речи. А большая часть наших пользователей русскоязычная, поэтому мы так и не столкнулись с лимитами.
Еще обязательно думайте о приватности. Не позволяйте проводить озвучку данных — паролей, данных кредитных карт. Любая sensitive или приватная информация не должна быть доступна для распознавания.
На слайде можно увидеть условную диаграмму задействованных классов в процессе распознавания речи. Аналогично синтезу, работа с распознанием — это работа с аудиожелезом, поэтому здесь тоже явной зависимостью выступает AVAudioSession.
Поддержка. Чтобы получить набор всех поддерживаемых локалей, вам нужно обратиться к страничному свойству supportedLocales. Поддержка определенной локали в целом не гарантирует того, что в данный момент распознавание речи для нее доступно. Например, может требоваться постоянное соединение с серверами Apple.
Поддержка локалей для распознавания соответствует списку локалей для диктовки в клавиатуре на iOS. Вот полный список. Чтобы убедиться, что данная локаль может быть обработана прямо сейчас, вы можете использовать свойство isAvailable.
В распознавании речи на iOS нет приоритета локалей для каждого языка, в отличие от синтеза. Поэтому если из списка всех локалей брать первую локаль конкретного языка, то там может быть какая-нибудь не самая популярная локаль. Поэтому для некоторых языков в Переводчике мы сделали приоритет конкретной локали для конкретного языка.
Например, для английского мы используем en-US. Когда пользователь первый раз пытается что-то распознавать на английском языке, мы используем американскую локаль.
Запрос на распознавание из файла. Здесь все просто. Вам нужно получить и составить ссылку на файл, создать объект SFSpeechRecognizer с указанием локали, которую вы хотите использовать. Проверить, что распознавание доступно в данный момент. Создать SFSpeechURLRecognitionRequest, используя конструкты, в которые вы передаете путь к файлу. И запустить задачу на распознавание.
В итоге вы получите либо ошибку при распознавании, либо результат. У результата есть свойство isFinal, которое обозначает, что этот результат является конечным и его можно использовать далее.
Здесь чуть более сложный пример — запрос на распознавание с микрофона. Чтобы его делать, нам еще нужен объект AVAudioEngine, который отвечает за работу с микрофоном. Не будем вдаваться в детали, как это работает. Вы устанавливаете нужную категорию — либо .record, либо .playRecord. Включаете аудиосессию. Настраиваете AudioEngine и подписываетесь на получение звуковых буферов с микрофона. Вы добавляете их к запросу на распознавание и, когда вы закончили распознавание, можете завершить работу с микрофоном.
Стоит отметить, что свойство shouldReportPartialResults, которое отвечает за выдачу временных результатов распознавания, установлено в true. Давайте посмотрим варианты: как может выглядеть приложение с установленным флагом shouldReportPartialResults и без него.
Видео будет проигрываться с того момента, где демонстрируется пример
В примере слева я оставил реагирование микрофона на звук, на изменение громкости. Там видно, что я что-то говорю. Но пока я не закончу говорить, вы ничего не видите. Проходит достаточно долгое время, пока пользователь получает результат того, что же он надиктовал.
Если же выставить shouldReportPartialResults в true и правильно это обрабатывать, то пользователь будет видеть, что он говорит, по мере своей речи. Это очень удобно и это правильный путь к тому, как нужно делать интерфейс в плане диктовки.
Вот пример того, как мы у себя обрабатываем работу с аудиосессией. Внутри Переводчика мы используем не только работу со звуком, который написали мы, но и другие фреймворки, которые что-то могут делать с аудиосессией.
Мы написали контроллер, который, во-первых, проверяет, что настройки, категории те, которые нам нужны, и во-вторых, не делает того, что постоянно включает и выключает аудиосессию.
Еще до разработки диалогового режима ввод голосом и озвучка у нас сами включали и выключали аудиосессию. Когда мы начали делать диалоговый режим, получилось, что эти включения-выключения добавляют лишнюю задержку между тем, как ты что-то произнес, и получением озвучки.
У запроса на распознавание речи можно указать подсказку — тип распознаваемой речи. Это может быть unspecified, может быть диктовка, поиск или короткое подтверждение. Чаще всего, если ваш пользователь будет говорить что-то длинное, лучше использовать dictation.
Начиная с iOS 13 нам доступна аналитика аудио. На слайде представлены те параметры, которые можно получить в результате распознанной речи. То есть вам в качестве результата придет не только то, что пользователь сказал, но и то, каким голосом он это говорил.
Не будем на этом долго останавливаться. Вот пример того, как можно получить аналитику в результате распознанного текста.
Итого мы изучили возможности фреймворка Speech для распознавания речи, научились давать подсказки для распознавания речи и быстро посмотрели на возможности аналитики.
И последнее по списку, но не по важности: работа в офлайн-режиме. Первое, о чем хочется рассказать, — это список офлайн-языков для синтеза речи. Нигде в документации я не нашел упоминания того, как можно явно скачать голоса для работы в офлайне. Что на докладах, что в документации говорится о том, что эти голоса могут быть докачены, но где — не написано.
Я поискал по системе и нашел, что если зайти в Настройки, в раздел Accessibility, далее «Устный контент» и «Голоса», то вы увидите, во-первых, список языков, для которых это доступно. Во-вторых, перейдя в конкретный язык, можно докачать новые голоса.
И этот список четко совпадает с тем, что возвращает AVSpeechSynthesisVoice.speechVoices внутри приложения. Это означает, что вы можете научить ваших пользователей, что они могут докачать нужные языки, чтобы пользоваться синтезом речи в офлайне.
Список офлайн-языков для распознавания. Нигде в документации он явно не указан, но судя по разным форумам и по тому, с чем мы сталкивались, так выглядит список языков и локалей для них, которые могут работать в офлайне без доступа в интернет.
Стоит отметить, что распознавание в офлайне доступно на устройствах с чипом A9 и старше.
Теперь самое интересное. Список офлайн-языков для распознавания речи. В отличие от синтеза, здесь вообще нет возможности явно скачать себе языки. Если добавить язык в стандартную клавиатуру, для него может быть скачать офлайн-пакет. Но к сожалению, это не детерминировано. Перейдем в Настройки > Основные > Клавиатура > Диктовка. Я, например, добавлял испанский. После этого под «Диктовкой» появляется маленькая подсказка, что диктовка может быть доступна вот для этих языков. Там появился испанский.
Затем я перешел в наше приложение, отключил интернет, и к моей радости в офлайн-режиме распознавание на испанском работало.
К сожалению, на это можно повлиять только косвенно, единственный способ — добавить язык в стандартную клавиатуру. Но это не гарантирует того, что офлайн-пакет для распознавания будет скачан.
В iOS, даже если у вас есть доступ к интернету на телефоне, вы можете зафорсить устройство и делать распознавание речи на нем, если распознавание, конечно же, доступно.
Есть свойство supportsOnDeviceRecognition, оно доступно начиная с iOS 13. Но это свойство работает некорректно, я справа внизу показал скриншот ошибки. Ошибка была исправлена только в 13.2. Свойство всегда возвращает false при первом запросе. Согласно Apple, оно вернет корректное значение спустя несколько секунд.
Причем это свойство может отдавать false, но в то же время установка флага requiresOnDeviceRecognition в true работает успешно. Значит, распознавание полностью работает на устройстве, даже если этот проверочный флаг возвращает false.
Здесь может быть несколько решений. Во-первых, вы можете делать офлайн-распознавание только на iOS 13.2. Во-вторых, можете подобрать какое-то количество секунд для перезапроса этого свойства и обновлять интерфейс для пользователя. И в-третьих, вы можете забить на это свойство: пробовать распознавать голос в офлайне, а в случае ошибки просто показывать ее пользователю.
Мы посмотрели, как можно явным образом скачать пакеты для синтеза речи в офлайне, и нашли способ попробовать заставить iOS скачать офлайн-пакеты для распознавания.
Теперь вы знаете, как быстро добавить в ваши приложения синтез и распознавание речи. У меня всё, спасибо за внимание.
Распознавание речи в автономном режиме в Android
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
swift — есть ли способ использовать распознавание речи iOS в автономном режиме?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
Автономное распознавание голоса Google на android
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.
Полное руководство по распознаванию речи с помощью Python — Real Python
Вы когда-нибудь задумывались, как добавить распознавание речи в свой проект Python? Если да, то продолжайте читать! Это проще, чем вы думаете.
Далеко не увлечение, ошеломляющий успех продуктов с поддержкой речи, таких как Amazon Alexa, доказал, что некоторая степень поддержки речи станет важным аспектом бытовых технологий в обозримом будущем. Если задуматься, причины довольно очевидны.Включение распознавания речи в ваше приложение Python предлагает уровень интерактивности и доступности, с которым могут сравниться немногие технологии.
Стоит задуматься только об улучшениях доступности. Распознавание речи позволяет пожилым людям, людям с ограниченными физическими возможностями и слабым зрением быстро и естественно взаимодействовать с современными продуктами и услугами — графический интерфейс не требуется!
Лучше всего, включить распознавание речи в проект Python действительно просто. В этом руководстве вы узнаете, как это сделать.Вы узнаете:
- Как работает распознавание речи,
- Какие пакеты доступны в PyPI; и
- Как установить и использовать пакет SpeechRecognition — полнофункциональную и простую в использовании библиотеку распознавания речи Python.
В конце концов, вы примените то, что вы узнали, к простой игре «Угадай слово» и посмотрите, как все это сочетается.
Как работает распознавание речи — обзор
Прежде чем мы перейдем к мельчайшим деталям распознавания речи в Python, давайте поговорим о том, как работает распознавание речи.Полное обсуждение займет целую книгу, поэтому я не буду утомлять вас всеми техническими деталями здесь. Фактически, этот раздел не является обязательным для остальной части руководства. Если вы хотите сразу перейти к делу, можете пропустить.
Распознавание речи уходит корнями в исследования, проведенные Bell Labs в начале 1950-х годов. Ранние системы были ограничены одним говорящим и имели ограниченный словарный запас, содержащий около дюжины слов. Современные системы распознавания речи прошли долгий путь по сравнению со своими древними аналогами.Они могут распознавать речь нескольких носителей и обладают огромным словарным запасом на многих языках.
Первым компонентом распознавания речи, конечно же, является речь. Речь должна быть преобразована из физического звука в электрический сигнал с помощью микрофона, а затем в цифровые данные с помощью аналого-цифрового преобразователя. После оцифровки можно использовать несколько моделей для преобразования звука в текст.
Большинство современных систем распознавания речи основаны на так называемой скрытой марковской модели (HMM).Этот подход работает на предположении, что речевой сигнал при просмотре в достаточно коротком временном масштабе (скажем, десять миллисекунд) может быть разумно аппроксимирован как стационарный процесс, то есть процесс, статистические свойства которого не меняются с течением времени.
В типичном HMM речевой сигнал делится на 10-миллисекундные фрагменты. Спектр мощности каждого фрагмента, который, по сути, представляет собой график зависимости мощности сигнала от частоты, отображается на вектор действительных чисел, известный как кепстральные коэффициенты.Размерность этого вектора обычно мала — иногда всего 10, хотя более точные системы могут иметь размерность 32 или более. Конечным результатом HMM является последовательность этих векторов.
Для преобразования речи в текст группы векторов сопоставляются с одной или несколькими фонемами — основной единицей речи. Этот расчет требует обучения, поскольку звук фонемы варьируется от говорящего к говорящему и даже меняется от одного высказывания к другому одним и тем же говорящим. Затем применяется специальный алгоритм для определения наиболее вероятного слова (или слов), которые образуют заданную последовательность
.