Speech Recognition (ASR) — технология за автоматично разпознаване на реч, която преобразува аудио сигнал в текстова последователност. Съвременните системи използват deep learning: енкодер (Conformer, Whisper, BiLSTM + CTC) преобразува спектрограмата на аудиото в последователност от скрити състояния, декодер (CTC greedy decoding, Beam Search, Transformer decoder) формира текст. В мобилните приложения Speech Recognition се използва за гласов вход, гласови асистенти, автоматичен препис на обаждания и функции за достъпност за хора с моторни ограничения. Според Google Cloud Speech-to-Text, 2025, облачният ASR постига WER 7% за английски език и 12% за руски при SNR > 15 dB.
Основни моменти
Automatic Speech Recognition (ASR) — тръбопровод: аудио → предобработка (16 kHz mono, намаляване на шум, VAD) → извличане на характеристики (MFCC, LogMel FilterBank) → акустичен модел (CTC / RNNT / Transducer) → езиков модел (LM) → декодиране (текст).
ASR архитектури за мобилни устройства: CTC — бърза, използва се в Vosk, Android native. RNNT — потоков ASR, ниско закъснение. Conformer — хибрид CNN + Transformer, най-добра точност.
| ASR Решение | WER (EN) | WER (RU) | RTF | On-device |
|---|---|---|---|---|
| Google Cloud ASR | 7% | 12% | 0.3 | Не |
| Android SpeechRecognizer | 8% | 13% | 0.5–1 | Да |
| SFSpeechRecognizer | 7% | 12% | 0.3–0.8 | Да |
| Vosk (vosk-model-small-ru) | 9% | 13% | 0.3–0.8 | Да |
| Whisper Small | 6% | 10% | 2–6 | Да |
Android SpeechRecognizer — вграден клас в Android SDK за разпознаване на реч. Работи в два режима: облачен (Google сървър) — висока точност, изисква интернет; on-device (от Android 10+) — вграден ASR модел на GBoard, 20+ езика, WER 15–18%.
// Разпознаване на реч Android SpeechRecognizer
val recognizer = SpeechRecognizer.createSpeechRecognizer(context)
recognizer.setRecognitionListener(object : RecognitionListener {
override fun onResults(results: Bundle) {
val text = results
.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION)
?.firstOrNull() ?: ""
showResult(text)
}
override fun onPartialResults(partialResults: Bundle) {
val partial = partialResults
.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION)
?.firstOrNull() ?: ""
showPartial(partial)
}
})
val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ru-RU")
}
recognizer.startListening(intent)
SFSpeechRecognizer — рамка на Apple за разпознаване на реч на iOS, macOS, watchOS. Наличен от iOS 10. On-device режим — от iOS 17. Подкрепя 60+ езика.
let recognizer = SFSpeechRecognizer(locale: Locale(identifier: "ru_RU"))
guard recognizer.isAvailable else { return }
let request = SFSpeechAudioBufferRecognitionRequest()
request.requiresOnDeviceRecognition = true
request.shouldReportPartialResults = true
recognitionTask = recognizer.recognitionTask(with: request) { result, error in
if let result = result {
let text = result.bestTranscription.formattedString
let isFinal = result.isFinal
DispatchQueue.main.async {
textView.text = text
}
}
}
audioEngine.inputNode.installTap(config: bufferConfig) { buffer, _ in
request.append(buffer)
}
audioEngine.prepare()
try audioEngine.start()
Vosk — ASR библиотека с отворен код от Alpha Cephei за офлайн разпознаване на реч. Базира се на Kaldi ASR toolkit + CTC модели. Подкрепя 20+ езика.
// Vosk офлайн ASR
val model = VoskModel("model/vosk-model-small-ru-0.22")
model.load()
val recognizer = VoskRecognizer(model, 16000.0f)
recognizer.setWords(true)
audioRecord.startRecording()
while (isListening) {
val buffer = ByteArray(3200) // 100 ms аудио
audioRecord.read(buffer, 0, buffer.size)
if (recognizer.acceptWaveform(buffer)) {
val result = recognizer.result // JSON
text += JSONObject(result).getString("text")
}
}
Whisper — модел на OpenAI за разпознаване на реч, обучен на 680 000 часа аудио (многоезичен, 99 езика). Наличен в размери: tiny (39M), small (244M), medium (769M).
// Whisper Core ML на iOS
import MLXWhisper
let model = try WhisperModel(from: "whisper-tiny")
let audio = try AudioUtils.loadAudio(url: audioURL)
let segments = try model.transcribe(audio: Audio, options: TranscribeOptions(
language: "ru",
wordTimestamps: true,
temperature: 0.0
))
for segment in segments {
print(segment.text) // краен текст с времеви отпечатъци
}
Гласов вход на текст — най-масовото приложение на ASR. Препис на обаждания и срещи — ASR за автоматично създаване на стенограми. Гласови асистенти — Siri, Google Assistant, Alexa. Достъпност — управление на приложението с глас чрез GrammarRecogniser (Vosk).
// Гласов асистент с Android SpeechRecognizer + TTS
recognizer.setRecognitionListener(object : RecognitionListener {
override fun onResults(results: Bundle) {
val query = results.getStringArrayList(
SpeechRecognizer.RESULTS_RECOGNITION
)?.firstOrNull() ?: return
val intentResult = nluService.classify(query)
textToSpeech.speak(intentResult.response)
executeAction(intentResult.action)
}
})
Често задавани въпроси
Използвайте подавяне на шум (WebRTC NS). Приложете VAD за премахване на неречеви части. Whisper е по-устойчив на шум.
Да, от iOS 17 SFSpeechRecognizer подкрепя on-device режим. Алтернативи: Vosk (offline), Whisper Core ML (offline).
Подкрепя 60+ езика чрез RecognizerIntent.EXTRA_LANGUAGE.
Използвайте адаптация на модела: Whisper fine-tuning, Vosk — смяна на езиковия модел.
WER = (S + D + I) / N. Използвайте jiwer (Python) или WER Calculator (JavaScript).
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също