Speech Recognition (ASR) — teknik för automatisk taligenkänning som omvandlar en ljudsignal till en textsekvens. Moderna system använder deep learning: en encoder (Conformer, Whisper, BiLSTM + CTC) omvandlar ljudspektrogrammet till en sekvens av dolda tillstånd, en decoder (CTC greedy decoding, Beam Search, Transformer decoder) bildar text. I mobila applikationer används Speech Recognition för röstinmatning, röstassistenter, automatisk transkribering av samtal och tillgänglighetsfunktioner för personer med motoriska begränsningar. Enligt Google Cloud Speech-to-Text, 2025 når moln-ASR WER på 7% för engelska och 12% för ryska vid SNR > 15 dB.
Huvudpunkter
Automatic Speech Recognition (ASR) — pipeline: ljud → förbehandling (16 kHz mono, brusreducering, VAD — talaktivitet) → extrahering av egenskaper (MFCC, LogMel FilterBank) → akustisk modell (neuralt nätverk: CTC / RNNT / Transducer) → språkmodell (LM) → avkodning (text). Moderna end-to-end-modeller (Whisper, Google USM, Conformer CTC) kombinerar den akustiska och språkliga modellen i en enda Transformer.
ASR-arkitekturer för mobila enheter: CTC — snabb, används i Vosk, Android native. RNNT — streaming ASR, låg fördröjning. Conformer — hybrid CNN + Transformer, bästa noggrannhet.
ASR-metrik: WER (Word Error Rate) — procentandel utbytta, borttagna, infogade ord. Google Cloud ASR — 7% WER (EN), 12% (RU). Vosk — 13% (RU), 9% (EN).
| ASR-lösning | WER (EN) | WER (RU) | RTF | On-device |
|---|---|---|---|---|
| Google Cloud ASR | 7% | 12% | 0.3 | Nej |
| Android SpeechRecognizer | 8% | 13% | 0.5–1 | Ja |
| SFSpeechRecognizer | 7% | 12% | 0.3–0.8 | Ja |
| Vosk (vosk-model-small-ru) | 9% | 13% | 0.3–0.8 | Ja |
| Whisper Small | 6% | 10% | 2–6 | Ja |
Android SpeechRecognizer — inbyggd klass i Android SDK för taligenkänning. Fungerar i två lägen: moln (Google-server) — hög noggrannhet, kräver internet; on-device (från Android 10+) — inbyggd ASR-modell i GBoard, 20+ språk, WER 15–18%. Stödjer 60+ språk via RecognizerIntent.EXTRA_LANGUAGE.
// Android SpeechRecognizer taligenkänning
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-ramverk för taligenkänning på iOS, macOS, watchOS. Tillgängligt från iOS 10. On-device-läge — från iOS 17. Stödjer 60+ språk.
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-bibliotek med öppen källkod från Alpha Cephei för offline taligenkänning. Baserat på Kaldi ASR toolkit + CTC-modeller. Stödjer 20+ språk.
// 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 ljud
audioRecord.read(buffer, 0, buffer.size)
if (recognizer.acceptWaveform(buffer)) {
val result = recognizer.result // JSON
text += JSONObject(result).getString("text")
}
}
Whisper — OpenAI-modell för taligenkänning, tränad på 680 000 timmar ljud (flerspråkig, 99 språk). Tillgänglig i storlekar: tiny (39M), small (244M), medium (769M).
// Whisper Core ML på 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) // sluttext med tidsstämplar
}
Röstinmatning av text — den mest massiva tillämpningen av ASR. Transkribering av samtal och möten — ASR för automatisk skapande av stenogram. Röstassistenter — Siri, Google Assistant, Alexa. Tillgänglighet — styrning av appen med rösten via GrammarRecogniser (Vosk).
// Röstassistent med 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)
}
})
Vanliga frågor
Använd brusreducering (WebRTC NS). Tillämpa VAD för att klippa bort icke-tal delar. Whisper är mer motståndskraftigt mot buller.
Ja, från iOS 17 stödjer SFSpeechRecognizer on-device-läge. Alternativ: Vosk (offline), Whisper Core ML (offline).
Stödjer 60+ språk via RecognizerIntent.EXTRA_LANGUAGE.
Använd modellanpassning: Whisper fine-tuning, Vosk — byte av språkmodell.
WER = (S + D + I) / N. Använd jiwer (Python) eller WER Calculator (JavaScript).
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också