Speech Recognition (ASR) — teknologi pengenalan suara otomatis yang mengubah sinyal audio menjadi urutan teks. Sistem modern menggunakan deep learning: encoder (Conformer, Whisper, BiLSTM + CTC) mengubah spektrogram audio menjadi urutan keadaan tersembunyi, decoder (CTC greedy decoding, Beam Search, Transformer decoder) membentuk teks. Di aplikasi seluler, Speech Recognition digunakan untuk input suara, asisten suara, transkripsi otomatis panggilan, dan fungsi aksesibilitas bagi penyandang disabilitas motorik. Menurut Google Cloud Speech-to-Text, 2025, ASR cloud mencapai WER 7% untuk bahasa Inggris dan 12% untuk bahasa Rusia pada SNR > 15 dB.
Poin Utama
Automatic Speech Recognition (ASR) — pipeline: audio → prapemrosesan (16 kHz mono, pengurangan kebisingan, VAD — aktivitas suara) → ekstraksi fitur (MFCC, LogMel FilterBank) → model akustik (jaringan saraf: CTC / RNNT / Transducer) → model bahasa (LM) → dekoding (teks). Model end-to-end modern (Whisper, Google USM, Conformer CTC) menggabungkan model akustik dan bahasa dalam satu Transformer, menyederhanakan pipeline dan meningkatkan akurasi.
Arsitektur ASR untuk perangkat seluler: CTC (Connectionist Temporal Classification) — cepat, tidak memerlukan penyelarasan audio dan teks, digunakan di Vosk, Android native. RNNT (Recurrent Neural Network Transducer) — ASR streaming, latensi rendah (Google USM). Conformer — hibrida CNN + Transformer, akurasi terbaik, tetapi lebih berat: Whisper Medium (769M parameter) — latensi 30–60x. Untuk on-device, CTC lebih disukai: model CTC Vosk memakan 50–100 MB, latensi 0.3–0.8x real-time.
Metrik ASR: WER (Word Error Rate) — persentase kata yang diganti, dihapus, disisipkan relatif terhadap referensi. Google Cloud ASR — 7% WER (EN), 12% (RU). Vosk — 13% (RU), 9% (EN). Whisper Small — 6% (EN), 10% (RU). Real-Time Factor (RTF) — waktu pemrosesan / durasi audio. RTF < 1 — lebih cepat dari real-time. Untuk input suara diperlukan RTF < 1, untuk transkripsi RTF < 3.
| Solusi ASR | WER (EN) | WER (RU) | RTF | On-device |
|---|---|---|---|---|
| Google Cloud ASR | 7% | 12% | 0.3 | Tidak |
| Android SpeechRecognizer | 8% | 13% | 0.5–1 | Ya (campuran) |
| SFSpeechRecognizer | 7% | 12% | 0.3–0.8 | Ya (sejak iOS 17) |
| Vosk (vosk-model-small-ru) | 9% | 13% | 0.3–0.8 | Ya |
| Whisper Small | 6% | 10% | 2–6 | Ya |
VAD (Voice Activity Detection) — deteksi aktivitas suara, memisahkan ucapan dari keheningan dan kebisingan. WebRTC VAD — standar untuk ASR seluler: frame 30 ms, tiga mode (0, 1, 2 — dari konservatif hingga agresif). VAD mengurangi RTF 1.5–3x (melewatkan bagian non-ucapan). Silero VAD (MIT) — VAD berbasis jaringan saraf, lebih akurat dari WebRTC (94% vs 85% ROC AUC), latensi 5–10 ms, TFLite dan Core ML.
Android SpeechRecognizer — kelas bawaan di Android SDK untuk pengenalan suara. Bekerja dalam dua mode: cloud (server Google) — akurasi tinggi, memerlukan internet; on-device (sejak Android 10+) — model ASR bawaan GBoard, 20+ bahasa, WER 15–18%. Mendukung 60+ bahasa melalui RecognizerIntent.EXTRA_LANGUAGE. Direkomendasikan untuk input suara — integrasi cepat, gratis.
API SpeechRecognizer: pembuatan melalui SpeechRecognizer.createSpeechRecognizer(context). Intent dengan RecognizerIntent.ACTION_RECOGNIZE_SPEECH dengan extra: LANGUAGE_MODEL_FREE_FORM (teks bebas) atau LANGUAGE_MODEL_WEB_SEARCH (kueri penelusuran). Hasil melalui RecognitionListener: onReadyForSpeech → onBeginningOfSpeech → onRmsChanged → onPartialResults → onResults.
// Pengenalan suara 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 di Android: on-device berfungsi tanpa internet (Android 10+, Pixel 4+, Samsung S20+). Cloud lebih akurat tetapi memiliki latensi lebih tinggi. Untuk privasi maksimum — setel onDeviceOnly = true.
SFSpeechRecognizer — framework Apple untuk pengenalan suara di iOS, macOS, watchOS. Tersedia sejak iOS 10. Mode on-device — sejak iOS 17 (model lokal, tanpa internet). Mendukung 60+ bahasa. Akurasi: WER 7–12% (on-device — 12–15%).
API SFSpeechRecognizer: SFSpeechRecognizer(locale:) → SFSpeechAudioBufferRecognitionRequest (audio langsung) atau SFSpeechURLRecognitionRequest (file audio). Streaming melalui recognitionTask(with:delegate:) dengan SFSpeechRecognitionTaskDelegate.
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 memiliki streaming native tanpa restart. On-device di iOS tersedia sejak iOS 17 (Android — sejak Android 10). Keduanya memerlukan izin pengguna.
Vosk — pustaka ASR sumber terbuka dari Alpha Cephei untuk pengenalan suara offline. Berbasis Kaldi ASR toolkit + model CTC. Mendukung 20+ bahasa: Rusia, Inggris, Jerman, Prancis, Spanyol, Mandarin, Arab. Model dari 50 MB hingga 1.2 GB. Vosk bekerja di Android (JNI), iOS (C++ wrapper), Linux, Windows, Raspberry Pi. RTF: 0.3–0.8 di perangkat flagship.
API Vosk: VoskWaveformModelLoader → VoskWaveformRecognizer → recognizer.createGrammar(list) atau recognizer.getResult() / recognizer.getPartialResult(). GrammarRecogniser memberikan RTF 0.1–0.3 (3x lebih cepat).
// 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 sepenuhnya offline — privasi, nol latensi, gratis. Cloud (Google, Yandex) lebih akurat dalam skenario kompleks (kebisingan, aksen) — WER 3–5% lebih rendah.
Whisper — model OpenAI untuk pengenalan suara, dilatih pada 680.000 jam audio (multibahasa, 99 bahasa). Tersedia dalam ukuran: tiny (39M, WER 10% EN, 15% RU), small (244M, WER 6% EN, 10% RU), medium (769M, WER 4.5% EN, 8% RU). Whisper berfungsi di perangkat seluler melalui Core ML (iOS) dan TFLite (Android). Whisper tiny Core ML di iPhone 15 Pro: RTF 0.3–0.8!
// Whisper Core ML di 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) // teks akhir dengan stempel waktu
}
Whisper vs Vosk: Whisper lebih akurat (6% vs 9% WER EN), mendukung 99 bahasa, tetapi lebih berat dan lebih lambat untuk real-time. Vosk lebih ringan, lebih cepat, lebih baik untuk streaming real-time.
Input suara teks — penerapan ASR paling masif. Transkripsi panggilan dan pertemuan — ASR untuk pembuatan stenogram otomatis. Asisten suara — Siri, Google Assistant, Alexa. Aksesibilitas — kontrol aplikasi dengan suara melalui GrammarRecogniser (Vosk).
// Asisten suara dengan 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)
}
})
Pertanyaan Umum
Gunakan peredam kebisingan (WebRTC NS). Terapkan VAD untuk memotong bagian non-ucapan. Whisper lebih tahan terhadap kebisingan.
Ya, sejak iOS 17 SFSpeechRecognizer mendukung mode on-device. Alternatif: Vosk (offline), Whisper Core ML (offline).
Mendukung 60+ bahasa melalui RecognizerIntent.EXTRA_LANGUAGE. Mode on-device (Android 10+) — 20+ bahasa.
Gunakan adaptasi model: Whisper fine-tuning, Vosk — penggantian model bahasa, Google Cloud ASR — phrase hints.
WER = (S + D + I) / N. Gunakan jiwer (Python) atau WER Calculator (JavaScript).
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga