Speech Recognition (ASR) — tehnologia de recunoaștere automată a vorbirii care transformă semnalul audio într-o secvență text. Sistemele moderne folosesc deep learning: encoderul (Conformer, Whisper, BiLSTM + CTC) transformă spectrograma audio într-o secvență de stări ascunse, decoderul (CTC greedy decoding, Beam Search, Transformer decoder) formează textul. În aplicațiile mobile, Speech Recognition este utilizat pentru introducere vocală, asistenți vocali, transcrierea automată a apelurilor și funcții de accesibilitate pentru persoane cu limitări motorii. Conform Google Cloud Speech-to-Text, 2025, ASR-ul cloud atinge WER de 7% pentru limba engleză și 12% pentru limba rusă la SNR > 15 dB.
Puncte cheie
Automatic Speech Recognition (ASR) — pipeline: audio → preprocesare (16 kHz mono, reducere zgomot, VAD — activitate vocală) → extragere caracteristici (MFCC, LogMel FilterBank) → model acustic (rețea neuronală: CTC / RNNT / Transducer) → model de limbă (LM) → decodare (text). Modelele moderne end-to-end (Whisper, Google USM, Conformer CTC) combină modelul acustic și cel de limbă într-un singur Transformer, simplificând pipeline-‑ul și crescând precizia.
Arhitecturi ASR pentru dispozitive mobile: CTC (Connectionist Temporal Classification) — rapidă, nu necesită alinierea audio și textului, folosită în Vosk, Android native. RNNT (Recurrent Neural Network Transducer) — ASR în flux, latență redusă (Google USM). Conformer — hibrid CNN + Transformer, cea mai bună precizie, dar mai grea: Whisper Medium (769M parametri) — 30–60x latență. Pentru on-device, CTC este preferat: modelele CTC Vosk ocupă 50–100 MB, latență 0.3–0.8x timp real.
Metrici ASR: WER (Word Error Rate) — procentul cuvintelor înlocuite, șterse, inserate față de referință. Google Cloud ASR — 7% WER (EN), 12% (RU). Vosk — 13% (RU), 9% (EN). Whisper Small — 6% (EN), 10% (RU). CER (Character Error Rate) — analog, la nivel de caractere. Real-Time Factor (RTF) — timp procesare / durată audio. RTF < 1 — mai rapid decât timpul real. RTF < 0.3 — ASR în timp real. Pentru introducere vocală este necesar RTF < 1, pentru transcriere RTF < 3.
| Soluție ASR | WER (EN) | WER (RU) | RTF | On-device |
|---|---|---|---|---|
| Google Cloud ASR | 7% | 12% | 0.3 | Nu |
| Android SpeechRecognizer | 8% | 13% | 0.5–1 | Da (mixt) |
| SFSpeechRecognizer | 7% | 12% | 0.3–0.8 | Da (de la iOS 17) |
| Vosk (vosk-model-small-ru) | 9% | 13% | 0.3–0.8 | Da |
| Whisper Small | 6% | 10% | 2–6 | Da |
VAD (Voice Activity Detection) — detectarea activității vocale, separarea vorbirii de tăcere și zgomot. WebRTC VAD — standard pentru ASR mobil: cadre de 30 ms, trei moduri (0, 1, 2 — de la conservator la agresiv). VAD reduce RTF de 1.5–3x (omite porțiunile non-vocale). Silero VAD (MIT) — VAD pe bază de rețea neuronală, mai precis decât WebRTC (94% vs 85% ROC AUC), latență 5–10 ms, TFLite și Core ML. Pentru ASR de producție folosiți cascada VAD → ASR: reduce detecțiile false și accelerează procesarea.
Android SpeechRecognizer — clasă încorporată în Android SDK pentru recunoașterea vorbirii. Funcționează în două moduri: cloud (server Google) — precizie ridicată, necesită internet; on-device (de la Android 10+) — model ASR încorporat GBoard, 20+ limbi, WER 15–18%. SpeechRecognizer returnează rezultate parțiale în timpul vorbirii și textul final. Suportă 60+ limbi prin RecognizerIntent.EXTRA_LANGUAGE. Recomandat pentru introducere vocală — integrare rapidă, gratuit.
API SpeechRecognizer: creare prin SpeechRecognizer.createSpeechRecognizer(context). Intent cu RecognizerIntent.ACTION_RECOGNIZE_SPEECH cu extra: LANGUAGE_MODEL_FREE_FORM (text liber) sau LANGUAGE_MODEL_WEB_SEARCH (interogări căutare). Rezultat prin RecognitionListener: onReadyForSpeech → onBeginningOfSpeech → onRmsChanged → onPartialResults → onResults. Pentru recunoaștere continuă (modul „asculte mereu“) — reporniți recognizer după onResults. Pentru economisirea bateriei, folosiți onDeviceOnly = true.
// Recunoașterea vocală 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)
On-device vs Cloud în Android: on-device funcționează fără internet (Android 10+, Pixel 4+, Samsung S20+). Cloudul este mai precis (model Google Neural Network ASM), dar are latență mai mare (300–800 ms cu rețeaua). Pentru introducere vocală folosiți o hibridă: cloud cu fallback pe on-device la lipsa rețelei. Android SpeechRecognizer selectează automat modul în funcție de RecognizerIntent.EXTRA_PREFER_OFFLINE. Pentru confidențialitate maximă — setați onDeviceOnly = true (dar precizie 15–18% WER pentru rusă).
SFSpeechRecognizer — framework Apple pentru recunoașterea vorbirii pe iOS, macOS, watchOS. Disponibil de la iOS 10. Modul on-device — de la iOS 17 (model local, fără internet). Suportă 60+ limbi. Precizie: WER 7–12% (on-device — 12–15%). SFSpeechRecognizer este disponibil prin Speech.framework — nu necesită SDK-uri suplimentare. Solicitare permisiune prin SFSpeechRecognizer.requestAuthorization.
API SFSpeechRecognizer: SFSpeechRecognizer(locale: Locale(identifier: "ru_RU")) → SFSpeechAudioBufferRecognitionRequest (audio live) sau SFSpeechURLRecognitionRequest (fișier audio). Streaming prin recognitionTask(with:delegate:) cu SFSpeechRecognitionTaskDelegate (didHypothesizeTranscription — parțial, didFinishRecognition — final). Mod on-device: request.requiresOnDeviceRecognition = true. Pentru iOS 15+: request.shouldReportPartialResults = true (rezultat în flux cu latență redusă).
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()
SFSpeechRecognizer vs Android SpeechRecognizer: SFSpeechRecognizer are streaming nativ fără repornire (Android necesită restartarea startListening). On-device pe iOS este disponibil de la iOS 17 (Android — de la Android 10). Ambele necesită permisiunea utilizatorului (NSMicrophoneUsageDescription + NSSpeechRecognitionUsageDescription pentru iOS, RECORD_AUDIO pentru Android). SFSpeechRecognizer este mai precis pentru engleză (on-device), Android SpeechRecognizer mai precis pentru rusă (cloud). Pentru iOS pre-17 on-device nu este disponibil — este necesar internet. Pentru iOS 17+ on-device oferă WER 12–14% pentru rusă.
Vosk — bibliotecă ASR open-source de la Alpha Cephei pentru recunoașterea vorbirii offline. Bazată pe Kaldi ASR toolkit + modele CTC. Suportă 20+ limbi: rusă, engleză, germană, franceză, spaniolă, chineză, arabă. Modele de la 50 MB (small — 50 MB, ru) la 1.2 GB (large — 1.2 GB, en). Vosk funcționează pe Android (JNI), iOS (C++ wrapper), Linux, Windows, Raspberry Pi. RTF: 0.3–0.8 pe dispozitive flagship. Vosk — cea mai bună alegere pentru ASR offline complet.
API Vosk: VoskWaveformModelLoader (încărcare model) → VoskWaveformRecognizer (creare recunoscător) → recognizer.createGrammar(list) sau recognizer.getResult() / recognizer.getPartialResult(). Suport pentru gramatici (set finit de comenzi) — GrammarRecogniser — oferă RTF 0.1–0.3 (de 3x mai rapid). Pentru introducere vocală folosiți recunoașterea liberă (getResult). Pentru comenzi vocale — GrammarRecogniser (99% precizie pentru comenzi). Vosk suportă și identificarea vorbitorului (analiză vectorială a vocii).
// Vosk ASR offline
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")
}
}
Vosk vs Cloud ASR: Vosk este complet offline — confidențialitate, zero latență, gratuit. Cloudul (Google, Yandex) este mai precis în scenarii complexe (zgomot, accent) — WER cu 3–5% mai mic. Vosk este ideal pentru: introducere vocală fără internet, aplicații de accesibilitate, transcriere apeluri (confidențialitate). Cloud ASR — pentru asistenți vocali unde precizia este mai importantă decât confidențialitatea. Recomandare: Vosk pentru offline, SFSpeechRecognizer (iOS) / SpeechRecognizer (Android) pentru online — combinați abordările pentru diferite scenarii.
Whisper — model OpenAI pentru recunoașterea vorbirii, antrenat pe 680 000 de ore de audio (multilingv, 99 de limbi). Disponibil în dimensiuni: tiny (39M, WER 10% EN, 15% RU), small (244M, WER 6% EN, 10% RU), medium (769M, WER 4.5% EN, 8% RU). Whisper funcționează pe dispozitive mobile prin Core ML (iOS, ANE) și TFLite (Android, GPU). Whisper tiny: RTF 4–10 pe CPU, RTF 0.5–2 pe GPU (Android). Whisper small: RTF 2–6 pe GPU. Whisper medium — RTF 8–15, doar pentru non-real-time.
Whisper pe iOS (Core ML): Apple MLX Whisper — implementare Whisper pentru Core ML și MLX (Apple Neural Engine). Whisper tiny Core ML pe iPhone 15 Pro: RTF 0.3–0.8 (mai rapid decât timpul real!). Whisper small Core ML: RTF 1–3. Whisper Core ML folosește ANE pe A17 Pro (Neural Engine 35 TOPS). Hugging Face Transformers → Export în Core ML prin coremltools-whisper. Pentru streaming folosiți WhisperStitcher (chunking + stitching). Whisper pe iOS — cel mai precis ASR on-device (WER 6% EN, 10% RU).
// Whisper Core ML pe 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) // text final cu marcaje de timp
}
Whisper vs Vosk: Whisper este mai precis (6% vs 9% WER EN), suportă 99 de limbi, include detectarea limbii, punctuație, recunoașterea emoțiilor. Whisper este mai greu (39M–769M vs 50M Vosk), mai lent în timp real (RTF 0.5–6 vs 0.3–0.8). Whisper tiny — comparabil cu Vosk ca viteză (RTF 0.5–2 GPU). Vosk este mai ușor, mai rapid, mai bun pentru streaming în timp real. Whisper — pentru transcriere unică unde precizia este prioritară față de viteză. Vosk — pentru introducere vocală în timp real. Pentru text final folosiți Whisper, pentru interactiv — Vosk.
Introducere vocală text — cea mai masivă aplicare a ASR: dictarea mesajelor, interogărilor de căutare, notițelor. Cerință: RTF < 1 (timp real), rezultate parțiale (a vedea textul pe măsură ce este rostit). Android Gboard și iOS Keyboard au ASR incorporat (on-device, WER 12–18%). Pentru implementare personalizată folosiți Android SpeechRecognizer / SFSpeechRecognizer. Pentru precizie maximă — Cloud ASR + fallback Vosk. Pentru introducere vocală cu 98% precizie în rusă — combinație Vosk (offline) + Yandex SpeechKit (online).
Transcrierea apelurilor și întâlnirilor — ASR pentru crearea automată a stenogramelor. Cerințe: fără cerințe de latență, WER < 10%, diarizarea vorbitorilor (cine vorbește). Whisper Small (offline) + pyannote-audio (diarization) — stiva standard pentru transcriere. Pe iOS — Whisper Core ML (RTF 1–3, WER 6–10%). Pe Android — Whisper TFLite (RTF 2–6, WER 8–12%) sau Google Cloud ASR + diarization. Pentru confidențialitate (apelurile nu pleacă pe server) — Whisper pe dispozitiv. Precizie diarization: 80–90% DER.
Asistenți vocali — Siri (SFSpeechRecognizer), Google Assistant (Android SpeechRecognizer), Alexa (ASR on-device). Asistent personalizat: ASR → NLU (înțelegerea limbajului natural) → Acțiune → TTS. ASR — prima etapă — determină precizia întregului lanț. Pentru NLU folosiți RASA, Snips NLU (on-device) sau Cloud NLU (Dialogflow, Amazon Lex). Pentru TTS: Android TTS / iOS AVSpeechSynthesizer. Asistent vocal on-device (Vosk + RASA + TTS) — complet privat, funcționează fără internet, latență sub 2 secunde per interogare.
// Asistent vocal cu 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)
}
})
Accesibilitate pentru persoane cu limitări motorii — Speech Recognition permite controlul aplicației cu vocea: deschiderea contactelor, trimiterea mesajelor, formarea numerelor. Android Voice Access și iOS Switch Control + VoiceOver — soluții încorporate. Pentru implementare personalizată: GrammarRecogniser (Vosk) cu set fix de comenzi (50–100 fraze) — RTF 0.1–0.3, 99% precizie. Vosk Grammar permite definirea unei gramatici în format BNF. Pentru accesibilitate, viteza este critică — Vosk Grammar este de 5x mai rapid decât recunoașterea liberă și consumă mai puțină baterie.
Întrebări frecvente
Folosiți suprimarea zgomotului (WebRTC NS — încorporat în Android, iOS AVAudioSession). Aplicați VAD pentru tăierea fragmentelor non-vocale. Creșteți SNR prin microfon cu beamforming (înregistrare direcțională) sau matrice multi-microfon. Whisper este mai rezistent la zgomot (antrenat pe 680K ore cu zgomote). Vosk cu reducere a zgomotului prin WebRTC oferă +5% WER la zgomot de 50 dB. Pentru producție, folosiți testarea cu condiții de zgomot ale aplicației dumneavoastră.
Da, de la iOS 17 SFSpeechRecognizer suportă modul on-device (requiresOnDeviceRecognition = true). Pe iOS 16 și mai vechi on-device nu este disponibil — este necesar internet pentru Siri/Gboard ASR. Alternative: Vosk prin wrapper C++ (offline, WER 12–15%), Whisper Core ML (offline, WER 6–10%, latență 2–6x). Pentru introducere vocală pe iOS 16- folosiți Vosk. Whisper Core ML — pentru transcrierea fișierelor audio (non real-time). Toate soluțiile sunt complet private și funcționează fără internet.
Android SpeechRecognizer suportă 60+ limbi prin RecognizerIntent.EXTRA_LANGUAGE. Lista completă este determinată de Locale.getAvailableLocales() pe dispozitiv. Rusa, engleza, germana, franceza, spaniola, italiana — întotdeauna disponibile. Chineza, japoneza, coreeana — depinde de model. Modul on-device (Android 10+) — 20+ limbi. Spre deosebire de Vosk (20 de limbi) și SFSpeechRecognizer (60 de limbi), Android SpeechRecognizer depinde de versiunea Google Play Services.
Folosiți model adaptation: Whisper fine-tuning pe 100+ ore de audio de domeniu (Hugging Face Trainer). Vosk — înlocuirea modelului de limbă (format ARPA) cu corpus text de domeniu (100K+ propoziții). Google Cloud ASR — phrase hints (cuvinte de domeniu, DL=0/1/2). SFSpeechRecognizer — SFSpeechRecognitionTaskDelegate cu contextualStrings (matrice de cuvinte sugestie). Domain adaptation crește precizia cu 15–30% WER pentru terminologia specifică. Minimum: 500 fișiere audio de domeniu cu transcrieri.
WER = (S + D + I) / N, unde S — substitutions (înlocuiri), D — deletions (ștergeri), I — insertions (inserări), N — numărul de cuvinte în textul de referință. Exemplu: referință = «bună ziua», predicție = «bună ce faci» → S=1 (ziua→faci), D=0, I=0 → WER = 1/2 = 50%. Pentru calcul folosiți biblioteca jiwer (Python) sau WER Calculator (JavaScript). CER — analog, la nivel de caractere. Pentru limba rusă, CER este cu 20–30% mai mic decât WER din cauza lungimii cuvintelor.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și