新闻详情

新闻详情

首页 / 资讯中心 / 详情

用 Candle 实现麦克风实时语音转写:whisper-microphone 示例深度解读

发布时间:2026/10/2 1:53:01来源:尧图网络
用 Candle 实现麦克风实时语音转写:whisper-microphone 示例深度解读
人工智能大模型机器学习深度学习本地部署模型推理服务【免费下载链接】candleMinimalist ML framework for Rust项目地址https://gitcode.com/GitHub_Trending/ca/candle点击查看免费下载本篇技术指南以 candle-examples/examples/whisper-microphone/README.md 为骨架围绕 CandleRust 极简机器学习框架中基于 Whisper 模型、以麦克风作为实时输入源的语音识别ASR示例展开。读完本文你将掌握该示例的启动命令与 feature 机制、输出日志的含义、全部命令行参数、底层录音 → 重采样 → 梅尔频谱 → 解码的数据流以及语言检测、量化推理等进阶用法并能直接在自己的机器上运行一套实时语音转写程序。示例简介从音频文件到麦克风实时输入仓库中的常规 candle-whisper 示例 以.wav文件作为输入而whisper-microphone则把输入源换成了计算机的默认麦克风程序持续从音频输入设备采集 PCM 数据经过重采样与梅尔频谱计算后交给 Candle 实现的 Whisper 模型进行端到端推理并把识别出的文本按时间分段打印到终端。它对应的源码位于 main.rs 与 multilingual.rs音频特征计算复用的是 candle-transformers 的 whisper 模块。值得注意的是README 本身内容精炼但源码非常完整——它同时封装了普通 FP32 模型与 GGUF 量化模型两条推理路径、多语言检测、温度回退temperature fallback等逻辑这些都会在后续小节中逐一展开。运行示例一条命令开启实时转写README 给出的启动命令如下$ cargo run --example whisper-microphone --features microphone需要特别说明两点必须启用microphonefeature。在 candle-examples/Cargo.toml 中定义microphone [cpal, rubato]。cpal负责跨平台音频输入在 Linux/macOS/Windows 上统一抽象麦克风设备rubato负责采样率重采样。同时 Cargo.toml 中通过[[example]]声明whisper-microphone的required-features [microphone]因此不带 feature 直接运行会编译失败。默认模型是tiny.en见下方--model参数首次运行时程序会通过 candle-examples/src/hub.rs 中的Api基于hf-hub自动下载config.json、tokenizer.json、model.safetensors到本地缓存之后启动会直接复用缓存。README 给出了一个典型的运行输出 transcribing audio... 480256 160083 language_token: None 0.0s -- 30.0s: Hello, hello, I dont know if this is working, but You know, how long did I make this? 480256 160085其含义为transcribing audio...麦克风音频流已启动主循环开始阻塞等待音频数据对应 main.rs480256 160083{缓冲的原始 PCM 样本数} {重采样后的 16kHz 样本数}。程序每累积约 10 秒10 * in_sample_rate原始样本才触发一次处理重采样后变成 16 kHz 单声道样本language_token: None本次使用英文专用模型tiny.en不进行语言检测因此语言 token 为空0.0s -- 30.0s: ...当前音频段对应的时间区间与识别出的文本程序会持续循环直到用户手动停止CtrlC。命令行参数完整控制推理行为Args结构体定义在 main.rs全部参数如下表参数默认值说明--cpu自动选择强制在 CPU 上运行不指定时按cuda → metal → cpu的顺序自动选择设备见 candle-examples/src/lib.rs--model-id随模型而定覆盖模型仓库 ID例如openai/whisper-tiny不指定 revision 时默认main--revision随模型而定覆盖仓库 revision分支/PR默认值因模型而异--modeltiny.en使用的 Whisper 模型详见下方模型清单--seed299792458随机采样种子保证温度采样路径可复现--tracing关闭生成trace-timestamp.json的 Chrome trace 文件通过tracing-chrome实现--quantized关闭加载 GGUF 量化模型而非 safetensors 权重--language自动检测强制指定语言如en、zh、ja仅多语言模型可用--tasktranscribetranscribe原文转写或translate翻译成英文--timestamps关闭输出逐句时间戳源码注释注明该模式尚未完全实现--verbose关闭打印完整的DecodingResult结构信息--device默认输入设备按设备名字符串匹配具体的音频输入设备例如host.input_devices()返回的某个设备名支持的模型清单WhichModel枚举定义于 main.rs支持的模型与仓库/revision 对应关系如下摘自model_and_revisionmain.rs多语言模型tiny、base、small、medium、large、large-v2、large-v3、large-v3-turbo、distil-large-v2仅英文模型tiny.en、base.en、small.en、medium.en、distil-medium.en。多语言模型默认从openai/whisper-*仓库的特定 revision如refs/pr/22拉取权重英文模型与较新版本则使用main。--quantized模式下默认仓库切换为lmz/candle-whisper并约定文件名规则config-{ext}.json、tokenizer-{ext}.json、model-{ext}-q80.ggufext取tiny或tiny-en量化模式目前仅支持 tiny/tiny.en 两档main.rs。数据流拆解麦克风 PCM 如何变成识别文本从源码可以完整还原整条实时流水线对应 main.rs 的主流程采集通过cpal::default_host()获取默认主机用default_input_device()找到默认麦克风读取default_input_config()打印采样率、声道数等配置。回调函数按step_by(channel_count)抽取单声道通过 mpsc 通道把 PCM 块发送给主线程main.rs。缓冲与重采样主循环用buffered_pcm累积数据不足 10 秒10 * in_sample_rate则继续等待每 1024 个样本为一 chunk 交给rubato::Async多项式重采样器目标采样率统一为 16000 Hzresample_ratio 16000. / in_sample_rate。若输入产生非 1024 倍数的余数则把余数搬到缓冲头部留到下一轮处理避免数据丢失main.rs。梅尔频谱调用audio::pcm_to_mel(config, pcm, mel_filters)生成[1, num_mel_bins, frames]的梅尔频谱张量。底层实现在 candle-transformers/src/models/whisper/audio.rs对加汉宁窗的样本做 FFT/DFT、计算功率谱、乘以梅尔滤波器组后取log10并做归一化FFT 计算按线程数拆分并行最多 12 线程。梅尔滤波器权重由melfilters.bytes/melfilters128.bytes按num_mel_bins80 或 128选择main.rs。语言检测仅多语言模型首次迭代时若模型为多语言且未指定--language调用multilingual::detect_languagemultilingual.rs编码音频特征后对 99 种语言的|xx|语言 token 打分并 softmax打印概率最高的前 5 种语言取最高者作为语言 token。语言代码表en/zh/de/.../haw等 99 项同样在 multilingual.rs。若指定了--language则直接查 tokenizer 中的|{language}|token英文专用模型则固定为None。解码decoder.run(mel, None)把 30 秒窗口的梅尔频谱切成最大 3000 帧N_FRAMES见 candle-transformers/src/models/whisper/mod.rs的片段逐段处理每段先经decode_with_fallback生成文本与no_speech_prob再按需打印{start}s -- {end}s: {text}main.rs。每轮处理后调用reset_kv_cache()清空跨片段的 KV 缓存。解码器与温度回退机制Decoder::decodemain.rs实现了一次标准的自回归解码以|startoftranscript|可选语言 token、任务 token、|notimestamps|为起始 token循环调用decoder_forward与decoder_final_linear对 logits 施加suppress_tokens把配置中的抑制 token 与 timestamps 模式下的|notimestamps|设为-inf再按温度选择贪心t0或加权随机采样t0直到遇到|endoftext|或超过max_target_positions。decode_with_fallbackmain.rs则复用了 whisper 模块的阈值常量定义于 candle-transformers/src/models/whisper/mod.rs温度序列TEMPERATURES [0.0, 0.2, 0.4, 0.6, 0.8, 1.0]当compression_ratio 2.4或avg_logprob -1.0且no_speech_prob 0.6时用更高温度重试从而缓解重复文本与低置信度输出的问题。运行期间若no_speech_prob 0.6且平均对数概率过低则判定为无语音并跳过该段。模型加载普通权重与 GGUF 量化两条路径Model枚举main.rs统一封装了两种后端并对其暴露相同的encoder_forward/decoder_forward/decoder_final_linear接口Normalm::model::Whisper权重来自model.safetensors通过VarBuilder::from_mmaped_safetensors以内存映射方式加载dtype 为F32m::DTYPEQuantizedm::quantized_model::Whisper权重来自 GGUF 文件通过 candle-transformers 的 quantized_var_builder 加载并即时反量化。两种模型均读取同一份config.jsonConfig结构含num_mel_bins、d_model、encoder_layers、vocab_size等字段见 candle-transformers/src/models/whisper/mod.rs。量化路径可以显著降低内存占用适合无 GPU 的机器实时转写选择何种路径由--quantized开关控制。依赖与运行环境运行本示例需要可用的音频输入设备麦克风且系统具有cpal支持的音频后端ALSA/CoreAudio/WASAPI 等首次运行联网下载模型权重可由HF_HUB_CACHE等环境变量控制缓存位置见 candle-examples/src/hub.rs如需 GPU 加速可在运行前用--features cudaNVIDIA或--features metalApple Silicon构建否则默认回退 CPUcandle-examples/src/lib.rs 会打印对应提示。小结与扩展whisper-microphone是 Candle 生态中实时音频输入 ASR 推理的完整参考实现一条cargo run --example whisper-microphone --features microphone命令即可把默认麦克风变成实时语音转写器支持多语言自动检测、翻译任务、量化部署与温度回退等生产级细节。对同一套 Whisper 实现的进一步研究可阅读音频文件版示例说明candle-examples/examples/whisper/README.mdWhisper 模型定义与常量candle-transformers/src/models/whisper/mod.rs音频预处理FFT/梅尔谱candle-transformers/src/models/whisper/audio.rs普通模型网络结构candle-transformers/src/models/whisper/model.rs量化模型网络结构candle-transformers/src/models/whisper/quantized_model.rs赞分享人工智能大模型机器学习深度学习本地部署模型推理服务【免费下载链接】candleMinimalist ML framework for Rust项目地址https://gitcode.com/GitHub_Trending/ca/candle点击查看免费下载相关推荐国家中小学智慧教育平台电子课本下载批量存成 PDF 离线用免费国家中小学智慧教育平台电子课本下载批量存成 PDF 离线用免费 开学要上新课备课先找教材。tchMaterial parser 帮你在国家中小学智慧教育平网页爬虫教育whisper.cpp 实时语音识别指南使用 whisper-stream 实现麦克风流式连续转录whisper.cpp 实时语音识别指南使用 whisper stream 实现麦克风流式连续转录 导读 whisper stream 是 whisper.c人工智能语音音频本地部署推理引擎FunASR实时语音转写前端麦克风采集与实时转写完整指南FunASR实时语音转写前端麦克风采集与实时转写完整指南 FunASR是一个强大的端到端语音识别工具包提供高质量的实时语音转写功能。通过前端麦克风采集技术语音音频人工智能大模型模型推理服务本地部署上一篇Vim键盘布局终极指南可视化展示自定义键盘映射技巧下一篇Shadplay 源码拆解Bevy Material trait、AsBindGroup 着色器数据绑定与插件注册完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

C#集成L2CS-Net:ONNX Runtime实现实时人脸姿态估计 2026/10/2 2:41:54

C#集成L2CS-Net:ONNX Runtime实现实时人脸姿态估计

简介:这是一份面向C#开发者的完整示例工程,基于OpenCvSharp与L2CS-Net算法实现人脸检测、眼睛注视方向和头部朝向估计,适合想将ONNX模型部署到Windows桌面应用的视觉开发者参考。工程按功能拆分为人脸检测、L2CS推理管理、人脸管理、主窗体交…

阅读更多 →
SpringBoot+Vue+MyBatis人员管理系统开发实战全解析 2026/10/2 2:41:47

SpringBoot+Vue+MyBatis人员管理系统开发实战全解析

这段时间后台收到不少私信,都是冲着“人员管理系统”源码来的。仔细翻了下聊天记录,发现大部分朋友的需求其实都差不多:毕业设计要用、公司内部要做个简单的HR管理后台、或者想练手整合一套主流技术栈。这次拿到的是一个很典型的组合——Spri…

阅读更多 →
Python数据可视化实战:网易云音乐歌单分析系统全拆解 2026/10/2 2:41:47

Python数据可视化实战:网易云音乐歌单分析系统全拆解

简介:一套基于Python数据可视化的网易云音乐歌单分析系统源码及文档说明,面向Python期末大作业、数据分析与可视化课程设计,适合需要快速完成高质量项目的在校学生。系统功能完善,覆盖歌单数据采集、清洗、统计分析及多角度可视化…

阅读更多 →
UMDF2驱动开发实战:从源码拆解到上位机调试 2026/10/2 2:41:47

UMDF2驱动开发实战:从源码拆解到上位机调试

简介:面向Windows驱动开发者的UMDF2驱动程序开发源码包,围绕“UMDF2 Driver1”驱动项目与“MFCApplication1”上位机程序展开,演示用户模式驱动从设备创建、I/O队列管理到与应用程序通过IOCTL通信的完整链路。资源共116个文件,涵盖…

阅读更多 →
LeetCode Python题解实战:从环境配置到高频题型避坑指南 2026/10/2 2:41:47

LeetCode Python题解实战:从环境配置到高频题型避坑指南

简介:该资源收录LeetCode题库的Python完整解答,覆盖数组、链表、树、动态规划、回溯、图论等核心算法专题,适合正在备战技术面试、希望系统梳理算法知识体系的中级及以上Python开发者。包内共1160个文件,主体为579个.py源码与580个…

阅读更多 →
猕猴桃检测数据集VOC与YOLO双格式详解:解压校验训练避坑指南 2026/10/2 2:41:34

猕猴桃检测数据集VOC与YOLO双格式详解:解压校验训练避坑指南

简介:这是一份面向目标检测与深度学习实践者的猕猴桃检测数据集,采用Pascal VOC与YOLO双格式标注,可直接用于模型训练、评估与农业视觉场景验证。资源包共2000个文件,主要包含VOC格式XML标注文件与YOLO格式TXT标注文件&#xff0c…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉