跳到主要内容

运行实时(流式)Whisper.cpp

本教程将指导您使用 SL1680 在 Synaptics Astra™ Machina™ 开发套件上运行 whisper.cpp 来测试使用麦克风的实时语音识别。

备注

本教程与所有 SL16xx 开发板兼容。虽然推理可能有所不同,但所有处理器的步骤都相同。

Whisper.cpp 是 Whisper 语音转文本模型的 C++ 实现。更多关于 Whisper.cpp 的详细信息,请访问 原始 GitHub 仓库

Whisper-Astra 是 whisper.cpp 的一个分支,专门针对 Astra SL 系列处理器进行了适配和优化,以支持流式处理。

信息

原始的 whisper.cpp 项目仍在不断发展中。 Whisper-Astra 保证基于 2024 年 6 月 26 日 ggml + fix sync script 提交版本的兼容性与稳定性。

先决条件

Stream 使您能够实时运行 Whisper,它依赖于 SDL 库。为此,您需要进行交叉编译并做两件事:构建自己的镜像并添加 SDL2 包。然后构建自己的工具链,SDL2 包将包含在其中。

注意

由于闭源第三方二进制文件,Astra 工具链目前仅支持 x86 主机。但我们正在努力解决这个问题!

  1. 构建包含 SDL2 包的自己的镜像,您将把它刷写到 Astra 开发板上。

  2. 然后,构建自己的工具链和 SDL2 包,以创建一个可以生成 stream 二进制文件的环境。

按照构建镜像的步骤,直到执行 source meta-synaptics/setup/setup-environment 命令。

一旦您运行这个命令,它将创建一个目录 build-sl1680,其中包含 local.conf

source meta-synaptics/setup/setup-environment

导航到位置:build-sl1680/conf/local.conf,然后在 local.conf 文件中添加这两行,以便您可以构建包含 SDL2 的镜像:

IMAGE_INSTALL:append = "libsdl2"
TOOLCHAIN_TARGET_TASK:append = " libsdl2-staticdev"
bitbake astra-media  

生成的镜像可以在 build-sl1680/tmp/deploy/images/sl1680/SYNAIMG/ 中找到。将其复制到 USB 驱动器,并使用这个教程将其刷写到您的 Astra 开发板上。

现在,在同一个终端中,运行此命令来构建 SDK。这将在 build-sl1680/tmp/deploy/sdk 中创建工具链:

bitbake astra-media -c do_populate_sdk
信息

上述命令构建工具链可能需要几个小时,具体取决于您的开发机器规格。

构建完成后,在 Ubuntu 中打开终端并运行命令:

bash poky-glibc-x86_64-astra-media-cortexa73-sl1680-toolchain-4.0.17.sh

现在运行此命令来激活环境:

. /opt/poky/4.0.17/environment-setup-cortexa73-poky-linux
提示

要检查环境是否激活,在 Ubuntu 终端中使用命令:

echo $CC

步骤 1:生成 whisper.cpp 的二进制文件

您需要确保启用了 'WHISPER_SDL2' 选项,并且在构建过程中正确包含了 common-sdl 库。

在 Ubuntu 中打开终端并使用以下命令安装它们:

sudo apt install -y build-essential git cmake
sudo apt-get install libsdl2-dev

从 GitHub 克隆适用于 Astra 的 whisper.cpp 仓库:

git clone https://github.com/astra-team-synaptics/whisper.cpp.git
cd whisper.cpp

whisper.cpp 中创建一个 build 目录并导航到它,然后运行 CMake 命令来构建项目:

mkdir build && cd build
cmake -DWHISPER_SDL2=ON ..
cmake --build . --config Release

stream 的二进制文件将在 ~/build/bin/ 中创建,共享库文件 libwhisper.so.1 将在 ~/build/src/ 中创建。这两个文件将帮助您运行 Whisper 模型,因此您需要将它们复制到您的 Machina 开发板上。

步骤 2:设置 Astra Machina 开发板

使用 ADB 从主机(如 Ubuntu)访问 Astra Machina 开发板。

按照访问 Machina 开发板教程中的步骤设置 ADB

进入 ADB shell 后,在 Machina 开发板的 home 目录中创建一个新目录:

mkdir whisper

现在,在您的开发系统上打开一个新的 Ubuntu 终端,使用 push 将您从步骤 1 生成的二进制文件复制到 Machina 开发板:

adb push ~/whisper.cpp/build/bin/main /home/whisper
adb push ~/whisper.cpp/build/libwhisper.so.1 /home/whisper
adb push ~/ggml/build/src/libggml.so /home/whisper
adb push ~/ggml/build/src/libggml-base.so /home/whisper
adb push ~/ggml/build/src/libggml-cpu.so /home/whisper

将二进制文件复制到 Machina 开发板后,链接 libwhisper.so.1 文件。按照以下命令操作:

mv libwhisper.so.1 /usr/lib/
ln -s /usr/lib/libwhisper.so.1 /home/whisper/libwhisper.so.1
ls -l
备注

ls -l 命令后,您应该看到一个链接 libwhisper.so.1 -> /usr/lib/libwhisper.so.1,如下所示:

lrwxr-xr-x    1 root     root            24 Dec  5 22:03 libwhisper.so.1 -> /usr/bin/libwhisper.so.1

如果运行二进制文件时出现错误:

./main: error while loading shared libraries: libwhisper.so.1: cannot open shared object file: No such file or directory

使用命令删除 libwhisper.so.1

rm libwhisper.so.1

再次复制它,然后将 libwhisper.so.1 从主机开发机器推送到 Machina 开发板的 whisper 目录,然后给予权限。

步骤 3:下载 Whisper 模型

您需要从 HuggingFace 在您的主机开发机器(在本例中为 Ubuntu)上下载 Whisper 模型。

在本教程中,您将使用基础量化模型 ggml-small.en-q5_1.bin

下载后,您需要将此模型复制到您的 Astra Machina 开发板

scp ~/Downloads/ggml-small.en-q5_1.bin root@10.3.10.132:/home/whisper/

步骤 4:在 Machina 开发板上运行 Whisper Stream

您首先需要设置麦克风以进行实时推理。

要查看能够录音的设备列表(具有麦克风),使用命令并记下设备号,如果卡号为 0,则将用作 -c 0

arecord -l

下载模型并构建二进制文件后,您现在可以在 whisper 文件夹中运行 Whisper:

./stream -m ggml-small.en-q5_1 -c 0 

您的 Synaptics Astra 开发板的输出应该如下所示:

.. [开始说话] 1, 2, 3, 4, 5, 6, 7.

whisper_print_timings: load time = 150.13 ms whisper_print_timings: fallbacks = 1 p / 0 h whisper_print_timings: mel time = 47.50 ms whisper_print_timings: sample time = 60.17 ms / 1 runs ( 60.17 ms per run) whisper_print_timings: encode time = 17729.25 ms / 2 runs ( 8864.63 ms per run) whisper_print_timings: decode time = 4474.04 ms / 17 runs ( 263.18 ms per run) whisper_print_timings: batchd time = 351.46 ms / 25 runs ( 14.06 ms per run) whisper_print_timings: prompt time = 0.00 ms / 1 runs ( 0.00 ms per run) whisper_print_timings: total time = 25711.63 ms

提示

使用 Ctrl + C 停止 Whisper 并查看推理指标。

如果你希望录制输入的音频流,请使用 -sa 参数。

Congratulations!

你已成功在 Astra Machina 开发板 上安装并运行了实时 whisper.cpp。现在你可以尝试不同的模型,或将 Whisper 集成到你的项目中。如需了解更高级的用法和选项,请参考相关文档。Whisper-Astra GitHub repo.