Speech Recognition — 什么是语音识别,技术和工作原理

作者: IT Sectr 发布日期: 2026-07-19 阅读时间: 10 分钟

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。

关键要点

  • Speech Recognition — 通过神经网络将语音转换为文本 (ASR)
  • Android SpeechRecognizer — on-device + cloud ASR,60+种语言,7–12% WER
  • SFSpeechRecognizer — iOS 原生识别,从 iOS 17 开始支持 on-device
  • Vosk — 离线 ASR,20+种语言,0.5–1.5x 实时延迟,俄语 13% WER
  • Whisper — OpenAI ASR,通过 Core ML / TFLite 实现 on-device,多语言

什么是 Speech Recognition:ASR 原理

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)RTFOn-device
Google Cloud ASR7%12%0.3
Android SpeechRecognizer8%13%0.5–1
SFSpeechRecognizer7%12%0.3–0.8
Vosk (vosk-model-small-ru)9%13%0.3–0.8
Whisper Small6%10%2–6

Android SpeechRecognizer API

Android SpeechRecognizer — Android SDK 中用于语音识别的内置类。以两种模式工作:云端 (Google 服务器) — 高精度,需要互联网;on-device (从 Android 10+) — GBoard 内置 ASR 模型,20+种语言,WER 15–18%。通过 RecognizerIntent.EXTRA_LANGUAGE 支持 60+ 种语言。

kotlin
// 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)

iOS SFSpeechRecognizer 和 Speech Framework

SFSpeechRecognizer — Apple 用于 iOS, macOS, watchOS 上语音识别的框架。从 iOS 10 开始可用。On-device 模式 — 从 iOS 17 开始。支持 60+ 种语言。

swift
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:在 20+ 种语言中实现离线识别

Vosk — Alpha Cephei 的开源 ASR 库,用于离线语音识别。基于 Kaldi ASR toolkit + CTC 模型。支持 20+ 种语言。

kotlin
// 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

Whisper — OpenAI 的语音识别模型,在 680,000 小时音频上训练 (多语言,99 种语言)。可用尺寸:tiny (39M)、small (244M)、medium (769M)。

swift
// 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) // 带时间戳的最终文本
}

Speech Recognition 在移动应用中的应用

语音文本输入 — ASR 最大量的应用。通话和会议转录 — ASR 用于自动制作笔录。语音助手 — Siri、Google Assistant、Alexa。无障碍 — 通过 GrammarRecogniser (Vosk) 用语音控制应用。

kotlin
// 使用 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 上无网络识别语音吗?

可以,从 iOS 17 开始 SFSpeechRecognizer 支持 on-device 模式。替代方案:Vosk (离线)、Whisper Core ML (离线)。

Android SpeechRecognizer 支持哪些语言?

通过 RecognizerIntent.EXTRA_LANGUAGE 支持 60+ 种语言。

如何为特定域 (医疗、法律) 配置语音识别?

使用模型适配:Whisper fine-tuning,Vosk — 替换语言模型。

如何计算 ASR 的 WER?

WER = (S + D + I) / N。使用 jiwer (Python) 或 WER Calculator (JavaScript)。

总结

  • Speech Recognition (ASR) — 通过 CTC/RNNT/Transformer 模型将音频转换为文本
  • Android SpeechRecognizer — 60+ 种语言,cloud + on-device,WER 8–15%
  • SFSpeechRecognizer (iOS) — 60+ 种语言,从 iOS 17 on-device,WER 7–14%
  • Vosk — 离线 ASR,20+ 种语言,RTF 0.3–0.8,WER 9–13%
  • Whisper — 最精确的 ASR (WER 6% EN),99 种语言
  • On-device — 隐私保护,无需互联网,Vosk/Whisper Core ML
  • 应用 — 语音输入、转录、助手、无障碍

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读