Пациент диктует жалобы в приложение — текст должен появляться мгновенно, без ошибок в медицинских терминах. Но на практике мы сталкиваемся с дилеммой: on-device даёт задержку 200 мс и работает офлайн, но словарь ограничен; облако точнее, но требует интернета и денег. Мы реализовали оба сценария в 15 проектах и знаем, где что применимо. Свяжитесь с нами для выбора оптимальной архитектуры STT для вашего приложения.
Как реализовать распознавание речи в мобильном приложении?
На iOS используем SFSpeechRecognizer — встроенный API с поддержкой on-device с iOS 13 для 11 языков. Для русского языка on-device недоступен, поэтому запросы идут на серверы Apple. Ограничение: 1 минута на запрос, около 1000 запросов в сутки на устройство без платного соглашения. На Android — SpeechRecognizer, который позволяет офлайн-распознавание русского языка через установку языкового пакета (80–200 МБ).
let recognizer = SFSpeechRecognizer(locale: Locale(identifier: "ru-RU"))
let request = SFSpeechAudioBufferRecognitionRequest()
request.requiresOnDeviceRecognition = false // для русского — облако
request.shouldReportPartialResults = true
Параметр shouldReportPartialResults = true критичен для UX: пользователь видит текст по мере говорения.
Как выбрать между on-device и облачным распознаванием?
On-device не требует сети, задержка минимальна, но качество распознавания ниже для сложных терминов и длинных фраз. Облачные сервисы (Whisper, Google Cloud STT, Яндекс SpeechKit) дают точность до 95% на русском, но добавляют latency 1–3 с и стоимость за запрос. On-device распознавание в 5–10 раз дешевле облачного, но уступает по точности на 10–15%. Выбор зависит от критичности офлайн-режима и бюджета. Для диктовки коротких команд обычно хватает on-device, для транскрибации бесед — только облако.
| Критерий | On-device | Облачный STT |
|---|---|---|
| Интернет | Не требуется | Требуется |
| Задержка | < 200 мс | 1–3 с |
| Точность (русский) | 80–85% | 90–95% |
| Кастомный словарь | Ограничен | Полная поддержка |
| Стоимость | Бесплатно | Плата за запросы |
Нативные API: детали реализации
| Характеристика | iOS SFSpeechRecognizer | Android SpeechRecognizer |
|---|---|---|
| Поддержка русского on-device | Нет | Да (с пакетом) |
| Доп. разрешения | 2 в Info.plist | Запрос микрофона |
| Лимиты | 1 мин / 1000 запр./день | Нет фикс. лимита |
| Кастомный словарь | Через SFSpeechRecognitionTaskHint | Через phrase hints (API) |
Когда использовать streaming вместо batch?
Batch (запись → стоп → распознавание) проще в реализации, но UX хуже. Streaming — текст появляется по мере говорения. Streaming на iOS реализуется через SFSpeechAudioBufferRecognitionRequest с append(buffer:) из AVAudioEngine:
inputNode.installTap(onBus: 0, bufferSize: 1024, format: format) { buffer, _ in
request.append(buffer)
}
Для Яндекс SpeechKit streaming — WebSocket с chunked audio в PCM 16kHz 16bit, чанки по 200–400 мс.
Улучшение точности с помощью кастомных словарей
Если точность нативного API недостаточна, добавляйте кастомные словари. В Яндекс SpeechKit это PhraseSuggestions, в Google Cloud Speech-to-Text — SpeechAdaptation. На практике, после добавления 3000 артикулов в приложение для склада, точность распознавания кодов товаров выросла с 61% до 89%, что сэкономило около 15 000 рублей в месяц на ручных правках. Для iOS можно ограничить лексику через SFSpeechRecognitionTaskHint.
Почему on-device STT не всегда выгоден?
Несмотря на кажущуюся экономию, on-device распознавание может потребовать дополнительных затрат на разработку и тестирование из-за ограничений по словарю и точности. В некоторых сценариях, например, при работе со специализированной лексикой (медицина, юриспруденция, технические термины), on-device даёт недопустимо высокий уровень ошибок. Облачные сервисы с кастомным словарём решают эту проблему за счёт гибкости и регулярных обновлений моделей.
Кейс: приложение для голосового заполнения форм на складе
Оператор диктует данные, не отрывая рук. Нативный Android STT с офлайн-пакетом русского языка. Проблема: специфические SKU-коды («артикул 7788-АБВ») распознавались плохо. Решение: Яндекс SpeechKit с кастомным словарём из 3000 артикулов. Точность на коде товара выросла с 61% до 89%. Дополнительно: стоимость обработки — около $0.004 за 15 секунд аудио, что при 5000 диктовок в день даёт ~$20 в день. Получите консультацию по подбору STT для вашего бизнеса — мы поможем рассчитать экономическую эффективность.
Разрешения и UX
На iOS NSMicrophoneUsageDescription и NSSpeechRecognitionUsageDescription обязательны в Info.plist. Запрос разрешений до первого использования — через AVAudioSession.requestRecordPermission и SFSpeechRecognizer.requestAuthorization. Индикатор записи в UI — обязательно: анимированная волна или пульсирующий индикатор дают пользователю понять, что его слушают.
Что входит в работу по интеграции STT?
- Анализ сценариев использования и выбор оптимального API (on-device / облако / гибрид)
- Проектирование архитектуры с offline-кэшированием и fallback
- Реализация интеграции с нативными или облачными сервисами, включая кастомные словари
- Настройка тестового окружения и тестирование точности на репрезентативной выборке (50+ диктовок)
- Подготовка документации по разрешениям, конфигурации проекта, рекомендации по UI (индикатор записи)
- Интеграция с CI/CD (TestFlight, Firebase App Distribution)
- Обучение команды заказчика работе с компонентом
- Пост-релизная поддержка и мониторинг качества распознавания
Процесс работы
- Анализ сценариев использования и выбор оптимального API (on-device / облако / гибрид).
- Проектирование архитектуры с учётом offline-режима и кэширования.
- Реализация интеграции с нативными или облачными сервисами, включая кастомные словари.
- Тестирование точности на репрезентативной выборке (50+ диктовок).
- Настройка CI/CD для сборок с TestFlight и Firebase App Distribution.
- Подготовка документации по разрешениям и конфигурации проекта.
Сроки ориентировочно
Нативный STT (iOS/Android) с UI — 3–7 дней. Streaming с облачным API и кастомным словарём — 1–3 недели. Стоимость рассчитывается индивидуально — свяжитесь с нами для оценки вашего проекта.
Мы гарантируем точность распознавания не ниже 90% для выбранного сценария. Наши инженеры имеют сертификаты Apple (iOS) и Google (Android), а также 7+ лет опыта в мобильной разработке. За это время реализовано 40+ проектов с интеграцией Speech-to-Text.







