设备端语音转文本 (STT)
在实时语音识别领域,Whisper 模型一直处于技术前沿,为开发者提供高效的音频转录能力。在设备上本地运行 whisper.cpp 开启了令人兴奋的可能性,特别是对于需要低延迟、高可靠性且独立于云基础设施运行的应用。在本博客中,您将探索如何使用 Astra Machina 开发套件在 SL1680 处理器上实现 whisper.cpp。

为 Machina 交叉编译 Whisper 二进制文件
在嵌入式设备上部署 whisper.cpp 需要交叉编译,这是一个在一个平台(主机)上编译代码以在另一个平台(目标)上运行的过程。以下是如何为运行 Yocto Linux 的 Astra Machina 上的 SL1680 处理器交叉编译 whisper.cpp:
第一步是在您的主机(比如 Ubuntu)上建立交叉编译环境。这涉及选择与 Astra Machina 架构匹配的适当交叉工具链。您可以从这里获取 Astra 的预构建工具链。
有了这个预构建工具链,您可以在主机上设置 Poky 环境。完成后,您就可以开始构建二进制文件,这基本上意味着将 whisper.cpp 源代码转换为 SL1680 处理器可以实际运行的程序。这就是交叉编译的本质 - 在一台机器上构建代码使其能在另一台机器上运行。
在 Machina 开发套件上部署 whisper.cpp
二进制文件准备就绪后,下一阶段涉及将其部署到 Machina 开发板上。SL1680 处理器可以轻松在 CPU 上运行该二进制文件。您可能需要采用优化措施来更高效地在 GPU 上管理工作负载。
您还需要从 HuggingFace 下载 Whisper 模型到 Machina 开发板。
我们评估了 whisper.cpp 系列中各种模型在运行包含约翰·F·肯尼迪总统标志性演讲的 jfk.wav 文件时的性能:"所以我的美国同胞们,不要问国家能为你做什么,而要问你能为国家做什么。"
指标总结如下表:
| 模型名称 | 内存使用 | 加载时间 [ms] | 编码时间 [ms] | 解码时间 [ms] | 总时间 [ms] |
|---|---|---|---|---|---|
| ggml-tiny.en | 750 MB | 129.50 | 4463.73 | 19.79 | 5851.29 |
| ggml-tiny.en-q8_0 | 706 MB | 128.19 | 3103.68 | 6.52 | 4088.51 |
| ggml-base.en | 892 MB | 170.09 | 10964.45 | 104.66 | 13229.58 |
| ggml-base.en-q5_1 | 808 MB | 125.37 | 8299.78 | 26.60 | 10015.75 |
输入 WAV 文件长度为 11 秒。
所有模型的词错率 (WER) 为 0%。
所有实验均使用 4 个线程。
本实验仅使用英语模型。
观察结果
模型的选择应该由具体的应用需求来指导。对于实时、资源受限的环境,较小或量化的模型在性能和准确性之间取得了最佳平衡。
-
结果清楚地展示了模型大小和性能之间的权衡。较小的模型(ggml-tiny.en 和 ggml-tiny.en-q8_0)消耗显著更少的内存和 CPU,导致更快的加载和处理时间。这些模型非常适合在 SL1680 处理器等资源受限设备上的实时应用。
-
模型的量化版本(ggml-tiny.en-q8_0 和 ggml-base.en-q5_1)在内存使用和 CPU 负载方面有明显的减少,转化为更快的处理时间。这使它们特别适合于效率至关重要的边缘 AI 应用。
-
较大的模型(ggml-small.en 和 ggml-base.en)可能以增加资源消耗为代价提供更好的准确性。当目标设备有充足资源或转录准确性最为重要时, 这些模型更合适。
在嵌入式系统上部署 whisper.cpp 等高级 AI 模型证明了边缘计算的巨大潜力。通过利用 Astra Machina 开发套件上 SL1680 处理器的强大功能,您可以为独立于云基础设施运行的设备带来复杂的语音识别功能,为需要低延迟和高可靠性的应用开辟新的可能性。
延伸阅读
对于那些渴望进一步探索的人,这里有一些详细的、循序渐进的教程来指导您完成整个过程。