ARTICLE DETAIL

资讯详情

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

在iPhone和Mac上实现流式语音识别:coreai-models导出Whisper与Parakeet TDT实战

在iPhone和Mac上实现流式语音识别:coreai-models导出Whisper与Parakeet TDT实战 在iPhone和Mac上实现流式语音识别coreai-models导出Whisper与Parakeet TDT实战【免费下载链接】coreai-modelsModel export recipes, Python primitives, and Swift runtime utilities for on-device AI项目地址: https://gitcode.com/gh_mirrors/co/coreai-models写在前面️coreai-models是苹果开源的端侧 AI 模型工具集提供流式语音识别所需的模型导出配方Whisper、Parakeet TDT、Python 原语和 Swift 运行时。用它你可以把离线语音识别模型一步导出为 Core AI 的.aimodel格式直接在 iPhone 和 Mac 上本地运行——无需上传音频到云端隐私和数据主权都在自己手里。本文带你从零完成导出 Whisper 做离线转写 → 导出 Parakeet TDT → 构建流式语音识别包 → 在设备上运行。项目结构一览仓库分为四大块语音识别只涉及其中两块目录作用models/各模型的导出配方与 README语音模型在 models/whisper/ 与 models/parakeet/python/用 PyTorch 编写 Core AI 模型的可复用原语swift/基于 Core AI 框架的 Swift 运行时包运行在macOS / iOS 27.0需 Xcode 27.0skills/辅助编码代理的插件技能准备工作克隆仓库并安装uvbrew install uv每条导出脚本都是独立的 PEP 723 脚本uv run会自动拉起所需依赖无需手动建虚拟环境。git clone https://gitcode.com/gh_mirrors/co/coreai-models cd coreai-models路线一导出 Whisper 做离线转写Whisper 是 OpenAI 的编码器-解码器语音识别模型支持多语言。配方见 models/whisper/export.py说明文档在 models/whisper/README.md。进入models/whisper/目录后一条命令即可导出uv run export.py常用参数参数说明默认值--model模型变体809M 的 turbo 或 1.54B 的 fullopenai/whisper-large-v3-turbo--dtypefloat16/bfloat16/float32float32--output-dir输出目录仓库根下exports/产物是单个model_dtype.aimodel文件。脚本内部先做torch.export再通过coreai-torch转换并自动写入模型作者与许可证等元数据你什么都不用关心。 端侧部署建议--dtype float16体积减半且精度损失通常可忽略。路线二导出 Parakeet TDT为什么是三张图Parakeet TDT 是 NVIDIA 的 0.6B 参数语音识别模型用 FastConformer 编码器搭配Token-and-Duration 传递函数TDT解码器——每步预测(token, duration)对贪心解码时可跳过空白帧比标准 RNN-T 快约 24 倍非常适合端侧实时场景。配方在 models/parakeet/export.py详细说明见 models/parakeet/README.md。uv run export.py # 静态窗口默认 5 秒音频 uv run export.py --dynamic # 编码器支持任意长度音频导出的不是单文件而是一个资源目录bundle包含三个.aimodel图encoder、decoder_step、jointprocessor/特征提取器 分词器metadata.json描述 bundle 架构与配置为什么要拆成三张图因为 TDT 的自回归解码循环编码器帧指针推进、(token, duration)采样写在模型的 generation 逻辑里而非forwardtorch.export无法把它捕获成单张图。于是导出配方把三个构件分别导出源码中对应ParakeetEncoderModule、ParakeetDecoderStepModule、ParakeetJointModule由 Swift 端运行时驱动解码循环。流式语音识别导出 --streaming 包这是本文的重点。Parakeet TDT v3 是离线式全注意力编码器没有因果缓存所以流式采用的是buffered inferenceNVIDIA NeMo 的官方算法每个 hop 把有界窗口[左上下文 | 当前块 | 右上下文]重新跑一遍编码器只消费当前块的帧传递函数状态跨 hop 延续。一条命令导出流式包uv run export.py --streaming --dtype float16三个窗口参数单位编码器帧1 帧 80 ms参数默认作用--left-context-frames126约 10 秒历史上下文不增加延迟--chunk-frames120.96 秒每个 hop 消费量是吞吐旋钮减半则编码器每秒音频的工作量翻倍--right-context-frames120.96 秒前看量延迟 (chunk right) × 80 ms默认配置理论延迟仅1.92 秒想要更高精度可用 NeMo 的 10-2-2 几何--chunk-frames 25 --right-context-frames 25 --left-context-frames 125延迟 4 秒。导出产物形如parakeet-tdt-0.6b-v3_float16_streaming150/——后缀150是窗口可用帧数1261212窗口几何会同时写入metadata.json运行时直接读取调用方无需重复声明。⚠️ 注意只有--streaming导出的包才能流式运行窗口在编码器 trace 时就固定了静态/动态包会被startStream拒绝并提示你重新导出。在 iPhone 和 Mac 上运行Swift 集成iOS / macOS AppSwift 端由 swift/Sources/CoreAISpeech/SpeechRecognitionModel.swift 提供统一入口架构Whisper / Parakeet从metadata.json自动识别import CoreAISpeech // 离线转写自动解码并重采样到模型采样率 let model try await SpeechRecognitionModel(resourcesAt: bundleURL) let (text, stats) try await model.transcribe(audioURL: wavURL)流式识别只需四步startStream()开启会话 → 宿主 App 用 AVAudioEngine 采集单声道 float32 PCM →append(pcm:)推入音频块 → 消费TranscriptionUpdate异步流.partial增量文本从不回退.finalized表示一段话结束并携带起止时间戳。流式会话状态与端点检测逻辑实现在 swift/Sources/CoreAISpeech/StreamingSession.swift。Mac 命令行工具免 App 快速验证# 离线转写 swift run -c release speech-recognizer --model bundle目录 --audio-path audio.wav # 流式转写--realtime 按 1× 速度喂入报告的延迟更真实 swift run -c release speech-recognizer --model streaming包 --audio-path audio.wav --stream --realtime支持 wav、flac、m4a 等系统可解码的格式--stream下还可加--deferred-decode做正确性校验分块编码但一次性解码结果应与流式逐字一致不一致即状态传递有 bug。实战要点速查断句Endpointing解码器静默 10 帧0.8 秒即收句超过 30 秒上限则在首个停顿处切分。这些都是显示边界传递函数状态会无缝跨越不会丢上下文。长静音恢复超过 3.2 秒无语音时运行时会把预测器 LSTM 清零重来避免恢复说话时丢开头几个词——这是针对该检查点行为的流式端修正。麦克风门控如果 App 用 VAD 控制麦克风不要直接扣住音频——那会冻结会话而非暂停。应在停顿处finishStream()、恢复时重新startStream()并补喂几百毫秒 pre-roll。流式解除长度限制离线静态包只能覆盖窗口内音频超长输入会被静默截断流式包则用同一固定窗口滑动处理任意长度的音频流。启动爬坡Ramp-up会话开始时窗口用零填充到 trace 尺寸保证每一跳的表示一致收尾 flush 时不填充让真实的静音提示句末 token。总结需求选择命令多语言、离线文件转写Whisper单.aimodeluv run export.py --model openai/whisper-large-v3-turbo英文、低延迟、实时流式Parakeet TDT 流式包三图 bundleuv run export.py --streaming --dtype float16整套链路非常清晰Python 侧uv run export.py一行导出Swift 侧CoreAISpeech包加载 bundle 即可转写或开流。从导出到上机端侧流式语音识别可以不到半天打通——这正是 coreai-models 的设计目标让 Core AI 模型从 Hugging Face 到 iPhone 之间没有黑盒。【免费下载链接】coreai-modelsModel export recipes, Python primitives, and Swift runtime utilities for on-device AI项目地址: https://gitcode.com/gh_mirrors/co/coreai-models创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表