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 在 SNR > 15 dB 时达到英语 7% WER 和俄语 12% WER。
关键要点
Automatic Speech Recognition (ASR) — 流程:音频 → 预处理 (16 kHz 单声道、噪声减少、VAD — 语音活动检测) → 特征提取 (MFCC, LogMel FilterBank) → 声学模型 (CTC / RNNT / Transducer) → 语言模型 (LM) → 解码 (文本)。现代 end-to-end 模型 (Whisper, Google USM, Conformer CTC) 将声学和语言模型融合到一个 Transformer 中。
面向移动设备的 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+) — GBoard 内置 ASR 模型,20+种语言,WER 15–18%。通过 RecognizerIntent.EXTRA_LANGUAGE 支持 60+ 种语言。
// 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 — Alpha Cephei 的开源 ASR 库,用于离线语音识别。基于 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 毫秒音频
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)。
// iOS 上的 Whisper Core ML
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 (离线)、Whisper Core ML (离线)。
通过 RecognizerIntent.EXTRA_LANGUAGE 支持 60+ 种语言。
使用模型适配:Whisper fine-tuning,Vosk — 替换语言模型。
WER = (S + D + I) / N。使用 jiwer (Python) 或 WER Calculator (JavaScript)。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。