ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

speech-to-speech 项目 STT 指南:7 种语音识别后端的选择、语言支持与实战配置

speech-to-speech 项目 STT 指南:7 种语音识别后端的选择、语言支持与实战配置 speech-to-speech 项目 STT 指南7 种语音识别后端的选择、语言支持与实战配置【免费下载链接】speech-to-speechBuild voice agents with open-source models项目地址: https://gitcode.com/GitHub_Trending/sp/speech-to-speech本篇技术指南围绕开源项目 speech-to-speechBuild voice agents with open-source models的 STTSpeech-to-Text模块展开系统梳理src/speech_to_speech/STT/目录下 7 种内置语音识别后端的实现方式、语言支持范围、参数含义与调用关系并给出在s2s_pipeline.py中通过--stt参数切换后端的完整命令示例。读完本文你将能够根据硬件CUDA / Apple Silicon / CPU与业务语言需求在 Whisper 系、Parakeet TDT、Paraformer 与 OpenAI 兼容端点之间做出合理选型并掌握语言检测与回退机制、实时转录等进阶配置。STT 模块总览多后端注册机制STT 模块的核心文档位于 src/speech_to_speech/STT/README.md它概括了该目录下所有语音识别后端的实现与语言能力。所有后端并非散落硬编码在管线中而是通过统一的后端注册表管理——见 src/speech_to_speech/backend_registry.py 中的STT_BACKENDS定义。每个后端由BackendSpec描述包含后端名称、配置参数类型、handler 工厂函数、配置前缀config_prefix与可选依赖required_extra注册表会在启动时对重复或类型不匹配的后端做快速失败校验。CLI 中通过--stt参数选择后端支持的取值与对应实现文件如下--stt取值Handler 类实现文件whisperWhisperSTTHandlerwhisper_stt_handler.pywhisper-mlxLightningWhisperSTTHandlerlightning_whisper_mlx_handler.pymlx-audio-whisperMLXAudioWhisperSTTHandlermlx_audio_whisper_handler.pyfaster-whisperFasterWhisperSTTHandlerfaster_whisper_handler.pyparakeet-tdtParakeetTDTSTTHandlerparakeet_tdt_handler.pyparaformerParaformerSTTHandlerparaformer_handler.pyopenaiOpenAICompatibleSTTHandleropenai_compatible_handler.py所有 handler 都继承自 base_stt_handler.py 中的BaseSTTHandler该基类统一实现了基于 turn/revision 的陈旧输入过滤stale-input filtering与推测轮次speculative turns跟踪保证并行/流式场景下过期的音频片段不会污染最终转录结果。此外注册表中还包含一个名为none的特殊 STT 后端它不执行任何语音识别而是直接接入AudioInputNotifier用于纯音频输入无文本转录的 LLM 场景属于模块边界的补充能力。逐后端详解语言支持与参数配置1) WhisperTransformers--stt whisperHandlerWhisperSTTHandler基于 Hugging Face Transformers 的AutoModelForSpeechSeq2Seq。语言输入参数共享的--language标志取自 whisper_stt_arguments.py 中的WhisperSTTHandlerArguments支持固定语言如en或auto逐句自动检测。模型参数--stt_model_name默认distil-whisper/distil-large-v3、--stt_device默认cuda、--stt_torch_dtypefloat32/float16/bfloat16默认float16、--stt_compile_modedefault/reduce-overhead/max-autotune默认不编译。生成参数--stt_gen_max_new_tokens默认 128、--stt_gen_num_beams默认 1即贪心解码、--stt_gen_return_timestamps默认 False、--stt_gen_task默认transcribe。内部支持的语言列表en, fr, es, zh, ja, ko, hi, de, pt, pl, it, nl见 handler 中的SUPPORTED_LANGUAGES常量。语言检测与回退行为源码层面确认指定固定语言时该语言直接写入gen_kwargs[language]作为生成约束。auto模式下handler 会先调用model.detect_language()从编码器输出中解析 Whisper 语言特殊 token形如|de|检测成功后将检测到的语言强制注入gen_kwargs保证转录文本与上报语言码一致。若检测到的语言不在支持列表内该转录仍会被上报不会被丢弃但不会成为粘性回退语言last_language只记录受支持的语言后续回退会回到上一次受支持的语言。输出为Transcription时auto模式的语言码会附加-auto后缀例如en-auto供下游 LLM/TTS 的resolve_auto_language()逻辑识别。2) Lightning Whisper MLX--stt whisper-mlxHandlerLightningWhisperSTTHandler基于lightning_whisper_mlx库专为 Apple SiliconMPS设计。与 Whisper 共用同一套--language参数与内部支持语言列表12 种语言一致。该后端是可选依赖未安装时注册表会提示通过pip install speech-to-speech[whisper-mlx]安装见 backend_registry.py 中required_extrawhisper-mlx。行为细节auto模式下由模型逐句自动检测语言若检测结果不在支持列表内则回退到上一次受支持的语言last_language。所有推理调用包裹在MLXLockContext中因为 MLX 模型共享同一条 Metal 命令队列并发推理会引发进程崩溃该锁是 STT/LLM/TTS 各线程共用 MLX 的串行化保证。在device mps时推理结束后会调用torch.mps.empty_cache()主动释放缓存。3) MLX Audio Whisper--stt mlx-audio-whisperHandlerMLXAudioWhisperSTTHandler通过mlx_audio.stt.generate.load_model加载 MLX 格式的 Whisper 模型。模型参数--mlx_audio_whisper_model_name默认mlx-community/whisper-large-v3-turbo。语言仍来自共享的--language标志由管线层接线传入见 backend_registry.py 中config_prefixmlx_audio_whisper的配置以及WhisperSTTHandlerArguments.language字段的复用。若 MLX 模型未附带 processorhandler 会依据processor_model_map映射回原始 OpenAI Whisper 模型如mlx-community/whisper-large-v3-turbo→openai/whisper-large-v3手动加载 processor。行为细节指定语言时强制使用该语言auto模式下优先采用模型返回的检测语言不在支持列表时回退到最近一次受支持语言最终兜底为DEFAULT_LANGUAGE en。4) Faster-Whisper--stt faster-whisperHandlerFasterWhisperSTTHandler基于 CTranslate2 加速的faster_whisper.WhisperModelCPU/GPU 均可获得比原生 Transformers 更高的吞吐。语言参数--faster_whisper_stt_gen_language默认en。模型参数--faster_whisper_stt_model_name默认tiny.en、--faster_whisper_stt_device默认auto、--faster_whisper_stt_compute_type默认auto。关键机制该 handler 将生成参数generation kwargs直接透传给faster_whisper.WhisperModel.transcribe(...)。adapt_gen_kwargs()会把return_timestamps转换为without_timestamps其余参数原样下发。因此实际覆盖的语言取决于所选 Faster-Whisper/OpenAI Whisper 模型的权能——handler 内部声明的SUPPORTED_LANGUAGES列出的是 Whisper 全量语言集合约 99 种含yue、zh等范围远超其他 Whisper 系后端。语言上报的独特设计faster-whisper 并不总是遵从请求的语言例如纯英文 checkpointtiny.en会强制输出英文因此_resolve_language()总是上报TranscriptionInfo.language中模型实际使用的语言而不是请求的语言auto模式下会附加-auto后缀。该逻辑在 tests/test_faster_whisper_language_reporting.py 中有专门测试覆盖。5) Parakeet TDT--stt parakeet-tdtHandlerParakeetTDTSTTHandler支持 NVIDIA Parakeet TDT 0.6B v3 多语言 ASR 模型约 6 亿参数见 parakeet_tdt_handler.py。语言参数--parakeet_tdt_language可选不指定时模型自动检测语言。模型与设备参数--parakeet_tdt_model_name默认按设备选择MPS 用mlx-community/parakeet-tdt-0.6b-v3否则用nvidia/parakeet-tdt-0.6b-v3、--parakeet_tdt_deviceauto/cuda/mps/cpu默认auto、--parakeet_tdt_compute_typefloat16/float32默认float16。声明支持 25 种欧洲语言en, de, fr, es, it, pt, nl, pl, ru, uk, cs, sk, hu, ro, bg, hr, sl, sr, da, no, sv, fi, et, lv, lt。双后端行为源码确认macOS / MPS使用 MLX 后端mlx_community转换模型推理走model.decode_chunk(...)且必须安装mlx-audio。CUDA / CPU使用 nano-parakeet纯 PyTorch 实现无需 NeMo推理走model.transcribe(...)需安装nano-parakeet。若显式指定cuda而 CUDA 不可用会警告并回退到 CPU。语言检测增强当未指定语言时handler 使用 lingua-py 对转录文本做二次语言识别_detect_language_from_text少于 20 字符的片段会跳过过短时语言识别噪声太大挪威语通过_LINGUA_CODE_MAP {no: nb}做映射。检测失败则回退到last_language初始为en。计算锁MLX 路径走MLXLockContextnano-parakeet 路径使用内部compute_lock渐进式progressive推理锁超时 0.01 秒最终final推理锁超时 5 秒避免语音轮次切换时阻塞。6) Paraformer--stt paraformerHandlerParaformerSTTHandler基于 FunASR 的AutoModel由 wuhongsheng 贡献。模型参数--paraformer_stt_model_name默认paraformer-zh中文优先。参数类中无独立语言标志见 paraformer_stt_arguments.pyhandler 在setup()中从模型名解析语言若模型名形如xx-zh取-后的部分作为self.language否则默认zh并在输出Transcription时作为language_code上报。实际覆盖范围取决于所选 FunASR 模型 checkpoint默认配置面向中文zh。该后端属于可选依赖required_extraparaformer缺失时 handler 会抛出明确提示pip install speech-to-speech[paraformer]。推理输出会去除空格replace( , )适合中文连续文本场景。7) OpenAI 兼容端点--stt openaiHandlerOpenAICompatibleSTTHandler作为客户端对接任意POST /v1/audio/transcriptions兼容服务见 openai_compatible_handler.py。连接参数openai_stt_arguments.py--openai_stt_base_url默认http://localhost:8000/v1注意需包含/v1路径段。--openai_stt_api_key可选 Bearer Token仅当 base URL 为https://api.openai.com/v1且未显式传入时才自动读取环境变量OPENAI_API_KEY。--openai_stt_model默认nvidia/parakeet-tdt-0.6b-v3服务端可根据语言自行选择模型时可省略。--openai_stt_language可选的语言提示随每次请求发送。--openai_stt_response_formatjson或text默认json。--openai_stt_timeoutHTTP 超时秒数默认 60。上传格式源码确认音频在_encode_wav()中被编码为单声道mono、PCM16、16 kHz 的 WAV 文件随 multipart 请求上传浮点音频先 clip 到 [-1, 1] 再量化到 int16。响应解析支持 JSON{text: ...}可附带language或languages数组与纯文本两种响应非法 JSON 或缺少text字段会抛出已脱敏的TranscriptionRequestError不会把服务端原始错误泄露给客户端。渐进式请求策略每个管线最多保持一个尽力而为best-effort的渐进式请求在途由后台线程执行最终final请求独立提交turn 匹配的过期渐进式结果会被抑制陈旧轮次过滤仍然生效与BaseSTTHandler的过滤机制叠加。启动时warmup()会用 1 秒静音验证端点连通性后才接受会话。更详细的协议说明见仓库文档 docs/openai-compatible-stt.md。语言缩写表ISO 风格代码STT 各 handler 中出现的语言码遵循 ISO-639-1 风格完整对照如下CodeLanguageCodeLanguageenEnglishroRomanianfrFrenchbgBulgarianesSpanishhrCroatianzhChineseslSlovenianjaJapanesesrSerbiankoKoreandaDanishhiHindinoNorwegiandeGermansvSwedishptPortuguesefiFinnishplPolishetEstonianitItalianlvLatviannlDutchltLithuanianruRussianautoPer-utterance automatic language detectionukUkrainiancsCzechskSlovakhuHungarian其中前 12 个en到nl是 Whisper 系三个后端whisper、whisper-mlx、mlx-audio-whisper共同的内部支持列表ru之后的 13 个是 Parakeet TDT 在 12 种通用语言之外额外覆盖的欧洲语言。auto不是一种语言而是“逐句自动检测”的请求标记——各 handler 在自动检测命中后会把实际语言码上报并附加-auto后缀以标记来源。实战用法示例CLI以下命令均基于speech-to-speech serve入口通过--stt选择后端、配合对应后端参数运行WhisperTransformersspeech-to-speech serve --stt whisper --language en speech-to-speech serve --stt whisper --language autoWhisper MLXLightningWhisperMLXApple Siliconspeech-to-speech serve --stt whisper-mlx --language auto --device mpsMLX Audio Whisperspeech-to-speech serve --stt mlx-audio-whisper \ --mlx_audio_whisper_model_name mlx-community/whisper-large-v3-turbo \ --language autoFaster-Whisperspeech-to-speech serve --stt faster-whisper \ --faster_whisper_stt_model_name large-v3 \ --faster_whisper_stt_gen_language enParakeet TDT设备自动选择或显式指定语言speech-to-speech serve --stt parakeet-tdt --parakeet_tdt_device auto speech-to-speech serve --stt parakeet-tdt --parakeet_tdt_language de开启实时转录支持 MLX 或 CUDA/nano-parakeet 后端speech-to-speech serve --stt parakeet-tdt \ --enable_live_transcription \ --live_transcription_update_interval 0.25实时转录功能通过 smart_progressive_streaming.py 中的SmartProgressiveStreamingHandler实现内部使用固定句窗口max_window_size15.0秒与句级缓冲sentence_buffer2.0秒逐步产出增量文本最终音频到达时只重新转录新增部分避免重复计算。终端的实时输出使用\r\x1b[2K控制序列单行刷新非终端环境则逐行打印。Paraformer中文场景speech-to-speech serve --stt paraformer --paraformer_stt_model_name paraformer-zh语言回退机制的统一规律虽然各后端实现各异但语言回退逻辑在仓库中存在清晰的一致模式可从源码归纳为三点通用规则auto只是请求标记所有 handler 都不会把auto字符串当作语言码写入上报或回退状态last_language在auto模式下初始为None或按后端约定为en只在检测到受支持语言后才被更新。先检测、后回退检测顺序一般为“显式指定语言 → 模型检测语言 → 上一次受支持语言 → 后端默认语言多为en”Parakeet TDT 在模型检测之外还会用 lingua-py 对转录文本二次确认。不支持的语言不粘滞检测到列表外语言时转录文本照常产出避免误丢正确结果但该语言不会成为后续轮次的回退选择。这一设计在 tests/test_whisper_language_detection.py、tests/test_faster_whisper_language_code.py 与 tests/test_parakeet_language_detection.py 中均有对应测试断言。选型建议速览多语言通用 追求识别质量whisperTransformers或faster-whisper吞吐优先语言覆盖最全。Apple Silicon 本地推理whisper-mlx轻量接入或mlx-audio-whisper直接加载 MLX 社区模型支持 large-v3-turbo 等。欧洲 25 语言自动检测 实时流式转录parakeet-tdt且支持 MPS / CUDA / CPU 三端自适应。中文优先的轻量 ASRparaformer默认paraformer-zh。已部署独立 ASR 服务 / 希望解耦模型加载openai兼容端点只需指向任意POST /v1/audio/transcriptions服务。需要留意的是除whisper、mlx-audio-whisper、parakeet-tdt、openai外其余后端多为可选依赖whisper-mlx、faster-whisper、paraformer首次运行若缺少对应包后端注册与 handler 工厂会给出明确的pip install speech-to-speech[extra]安装提示可按需安装对应 extra 后再启动。进一步阅读STT 模块总览src/speech_to_speech/STT/README.md后端注册与依赖提示src/speech_to_speech/backend_registry.pyOpenAI 兼容 STT 协议细节docs/openai-compatible-stt.md实时流式转录实现src/speech_to_speech/STT/smart_progressive_streaming.py语言检测与回退测试tests/test_whisper_language_detection.py、tests/test_faster_whisper_language_reporting.py、tests/test_parakeet_language_detection.py【免费下载链接】speech-to-speechBuild voice agents with open-source models项目地址: https://gitcode.com/GitHub_Trending/sp/speech-to-speech创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表