Speech Recognition (ASR) — technologie automatického rozpoznávání řeči, která převádí audio signál na textovou sekvenci. Moderní systémy používají deep learning: enkodér (Conformer, Whisper, BiLSTM + CTC) převádí spektrogram audia na sekvenci skrytých stavů, dekodér (CTC greedy decoding, Beam Search, Transformer decoder) tvoří text. V mobilních aplikacích se Speech Recognition používá pro hlasový vstup, hlasové asistenty, automatický přepis hovorů a funkce přístupnosti pro osoby s motorickým postižením. Podle Google Cloud Speech-to-Text, 2025 dosahuje cloudový ASR WER 7 % pro angličtinu a 12 % pro ruštinu při SNR > 15 dB.
Hlavní body
Automatic Speech Recognition (ASR) — pipeline: audio → předzpracování (16 kHz mono, snížení šumu, VAD) → extrakce funkcí (MFCC, LogMel FilterBank) → akustický model (neuronová síť: CTC / RNNT / Transducer) → jazykový model (LM) → dekódování (text). Moderní end-to-end modely (Whisper, Google USM, Conformer CTC) spojují akustický a jazykový model do jednoho Transformeru.
ASR architektury pro mobilní zařízení: CTC — rychlá, používá se ve Vosk, Android native. RNNT — streaming ASR, nízká latence. Conformer — hybrid CNN + Transformer, nejlepší přesnost.
ASR metriky: WER (Word Error Rate) — procento nahrazených, smazaných, vložených slov. Google Cloud ASR — 7 % WER (EN), 12 % (RU). Vosk — 13 % (RU), 9 % (EN).
| ASR Řešení | WER (EN) | WER (RU) | RTF | On-device |
|---|---|---|---|---|
| Google Cloud ASR | 7 % | 12 % | 0.3 | Ne |
| Android SpeechRecognizer | 8 % | 13 % | 0.5–1 | Ano |
| SFSpeechRecognizer | 7 % | 12 % | 0.3–0.8 | Ano |
| Vosk (vosk-model-small-ru) | 9 % | 13 % | 0.3–0.8 | Ano |
| Whisper Small | 6 % | 10 % | 2–6 | Ano |
Android SpeechRecognizer — vestavěná třída v Android SDK pro rozpoznávání řeči. Funguje ve dvou režimech: cloud (server Google) — vysoká přesnost, vyžaduje internet; on-device (od Android 10+) — vestavěný ASR model GBoard, 20+ jazyků, WER 15–18 %. Podporuje 60+ jazyků přes RecognizerIntent.EXTRA_LANGUAGE.
// Rozpoznávání řeči 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 — rámec Apple pro rozpoznávání řeči na iOS, macOS, watchOS. Dostupný od iOS 10. On-device režim — od iOS 17. Podporuje 60+ jazyků.
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 — open-source ASR knihovna od Alpha Cephei pro offline rozpoznávání řeči. Založena na Kaldi ASR toolkit + CTC modelech. Podporuje 20+ jazyků.
// Vosk offline 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 audio
audioRecord.read(buffer, 0, buffer.size)
if (recognizer.acceptWaveform(buffer)) {
val result = recognizer.result // JSON
text += JSONObject(result).getString("text")
}
}
Whisper — model OpenAI pro rozpoznávání řeči, trénovaný na 680 000 hodinách audio (vícejazyčný, 99 jazyků). K dispozici ve velikostech: tiny (39M), small (244M), medium (769M).
// Whisper Core ML na 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) // konečný text s časovými razítky
}
Hlasový vstup textu — nejmasivnější použití ASR. Přepis hovorů a schůzek — ASR pro automatickou tvorbu stenogramů. Hlasoví asistenti — Siri, Google Assistant, Alexa. Přístupnost — ovládání aplikace hlasem přes GrammarRecogniser (Vosk).
// Hlasový asistent s 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)
}
})
Často kladené otázky
Použijte potlačení šumu (WebRTC NS). Aplikujte VAD pro oříznutí neřečových částí. Whisper je odolnější vůči šumu.
Ano, od iOS 17 SFSpeechRecognizer podporuje on-device režim. Alternativy: Vosk (offline), Whisper Core ML (offline).
Podporuje 60+ jazyků přes RecognizerIntent.EXTRA_LANGUAGE.
Použijte adaptaci modelu: Whisper fine-tuning, Vosk — výměna jazykového modelu.
WER = (S + D + I) / N. Použijte jiwer (Python) nebo WER Calculator (JavaScript).
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také