Android Speech Recognition: полное руководство по распознаванию речи

Голосовой ввод на Android перестаёт работать чаще всего из-за трёх причин: отсутствует разрешение на использование микрофона, не загружен языковой пакет офлайн-распознавания или сервис Google Speech Services отключён либо устарел. Проверка начинается с раздела Настройки → Приложения → Разрешения, где у приложения с голосовым вводом должен стоять активный доступ к микрофону.

Система Android Speech Recognition построена вокруг двух компонентов: системного API SpeechRecognizer для разработчиков и пользовательского голосового ввода через клавиатуру и голосовой ассистент. В этой статье разберём, как работает технология, как настроить её на смартфоне, какие ошибки встречаются чаще всего и что делать, если распознавание не отвечает или выдаёт неточный текст.

Как устроено распознавание речи в Android

За преобразование звука в текст отвечает сервис распознавания речи — по умолчанию это Speech Services by Google, хотя производители прошивок иногда подставляют собственные движки. Приложение (клавиатура, ассистент, мессенджер) отправляет аудиопоток в этот сервис через системный интерфейс, а получает назад текстовые гипотезы с оценкой уверенности.

Распознавание может работать в двух режимах. Онлайн-режим отправляет аудио на серверы и обычно даёт более точный результат. Офлайн-режим использует загруженный на устройство языковой пакет — он работает без интернета, но качество зависит от языка и версии пакета. Какой режим реально используется, зависит от настроек и доступности сети.

Настройка голосового ввода на смартфоне

Чтобы голосовой ввод заработал, убедитесь, что включён сервис распознавания и выбран правильный язык. Типичный путь выглядит так: Настройки → Система → Языки и ввод → Экранная клавиатура, далее — настройки голосового ввода вашей клавиатуры (чаще всего Gboard). Точные названия пунктов зависят от версии Android и оболочки производителя, поэтому сверяйтесь с документацией своей модели.

☑️ Проверка голосового ввода

Выполнено: 0 / 5

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

⚠️ Внимание: одновременный доступ к микрофону у двух приложений невозможен. Если распознавание «молчит», проверьте, не работает ли в фоне диктофон, видеозвонок или ассистент — закройте их и повторите попытку.

Типичные ошибки и их решения

Разработчики, использующие SpeechRecognizer API, сталкиваются с набором стандартных кодов ошибок, которые возвращает метод onError(). Понимание этих кодов помогает быстро локализовать проблему.

ОшибкаВероятная причинаЧто проверить
ERROR_AUDIOСбой записи звукаЗанят ли микрофон другим приложением
ERROR_NETWORK / NETWORK_TIMEOUTНет связи с серверомИнтернет-соединение, VPN, файрвол
ERROR_NO_MATCHРечь не распознанаШум, громкость, язык распознавания
ERROR_INSUFFICIENT_PERMISSIONSНет разрешения RECORD_AUDIOРазрешения приложения в настройках
ERROR_LANGUAGE_NOT_SUPPORTEDЯзык не поддерживаетсяЗагружен ли офлайн-пакет языка

Пользователям, не связанным с разработкой, чаще встречаются бытовые симптомы: пропала кнопка микрофона на клавиатуре, текст распознаётся с ошибками, распознавание обрывается на первом слове. В большинстве таких случаев помогает обновление Speech Services через магазин приложений и очистка кэша клавиатуры.

📊 Что чаще всего ломается в распознавании речи на вашем Android?
Пропадает кнопка микрофона
Плохо распознаёт слова
Не работает без интернета
Ошибки в собственном приложении

Офлайн-распознавание: возможности и ограничения

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

  • 🌐 Онлайн-режим обычно точнее и поддерживает больше языков
  • 📦 Офлайн-пакет нужно скачивать заранее и периодически обновлять
  • 🔒 Офлайн-режим не передаёт аудио на серверы — плюс для конфиденциальности
  • 🔋 Локальная обработка может заметнее нагружать процессор и батарею

Использование SpeechRecognizer в собственных приложениях

Для интеграции распознавания в своё приложение используется класс android.speech.SpeechRecognizer. Базовый сценарий: запросить разрешение RECORD_AUDIO, создать экземпляр распознавателя, подготовить Intent с параметрами и запустить прослушивание.

val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {

putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,

RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)

putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ru-RU")

putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true)

}

speechRecognizer.startListening(intent)

Обратите внимание на несколько нюансов. Во-первых, перед созданием распознавателя стоит проверить его доступность через SpeechRecognizer.isRecognitionAvailable(context) — на устройствах без сервиса распознавания вызов приведёт к сбою. Во-вторых, разрешение на микрофон запрашивается в рантайме, и без него вы получите ERROR_INSUFFICIENT_PERMISSIONS.

⚠️ Внимание: SpeechRecognizer необходимо уничтожать вызовом destroy() при завершении работы (например, в onDestroy() активности). Иначе микрофон останется занятым, и другие приложения потеряют доступ к записи звука.
Частичные результаты (partial results)

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

Повышение точности распознавания

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

  • 🎙️ Говорите ближе к микрофону и избегайте сильного фонового шума
  • 🗣️ Проверьте, что выбран именно тот язык и диалект, на котором вы говорите
  • 🔄 Обновите Speech Services by Google и клавиатуру до актуальных версий
  • 🧹 Очистите кэш приложения голосового ввода при регулярных сбоях

Для разработчиков есть дополнительные рычаги: параметр EXTRA_LANGUAGE_PREFERENCE, ограничение количества гипотез через EXTRA_MAX_RESULTS и подсказки контекста. Явное указание языка в Intent заметно снижает число ошибок ERROR_LANGUAGE_NOT_SUPPORTED и ошибок распознавания смешанной речи.

Когда проблема на стороне устройства

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

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

Частые вопросы

Почему голосовой ввод просит подключение к интернету?

Скорее всего, не загружен офлайн-пакет для выбранного языка. Откройте настройки голосового ввода клавиатуры, найдите раздел офлайн-распознавания и скачайте нужный языковой пакет.

Что означает ошибка ERROR_NO_MATCH в SpeechRecognizer?

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

Можно ли использовать распознавание речи без сервисов Google?

Штатный SpeechRecognizer зависит от установленного сервиса распознавания. На устройствах без него используются сторонние SDK или локальные движки, которые встраиваются в приложение отдельно.

Почему кнопка микрофона пропала с клавиатуры?

Проверьте, включён ли голосовой ввод в настройках клавиатуры и обновлён ли сервис Speech Services. Также кнопка может скрываться, если сервис распознавания отключён или удалён из системы.

Расходует ли голосовой ввод мобильный трафик?

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