运行实时(流式)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 主机。但我们正在努力解决这个问题!
-
构建包含
SDL2包的自己的镜像,您将把它刷写到 Astra 开发板上。 -
然后,构建自己的工具链和
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
- Tera Term
使用 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
使用 Tera Term 从主机(如 Ubuntu)访问 Astra Machina 开发板。
按照访问 Machina 开发板教程中的步骤设置串行控制台,如 Tera Term。
设置 Tera Term 后,从这里获取您的 Astra Machina 开发板的 Inet 地址:
ifconfig eth0 | grep "inet addr"
然后在 Machina 开发板的 home 目录中创建一个新目录:
mkdir whisper
现在,在您的开发系统的 Ubuntu 终端中,使用 scp 将您从步骤 1 生成的二进制文件复制到 Machina 开发板:
scp /whisper.cpp/build/bin/main root@10.3.10.132:/home/whisper
scp /whisper.cpp/build/src/libwhisper.so.1 root@10.3.10.132:/home/whisper
scp /ggml/build/src/libggml.so root@10.3.10.132:/home/whisper
scp /ggml/build/src/libggml-base.so root@10.3.10.132:/home/whisper
scp /ggml/build/src/libggml-cpu.so root@10.3.10.132:/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.