Пацієнт диктує скарги в додаток — текст має з'являтися миттєво, без помилок у медичних термінах. Але на практиці ми стикаємося з дилемою: 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.







