by Georgi Gerganov (open source) Linux, macOS, Windows, Raspberry Pi, Android — CPU/GPU
Высокопроизводительная C++ реализация модели OpenAI Whisper для распознавания речи (STT) без зависимостей. Работает полностью локально, поддерживает все размеры моделей от tiny до large-v3. Возможности: - Распознавание речи офлайн, без API и интернета - Поддержка 99 языков, автодетект языка - Ускорение: CUDA, Metal (Apple), OpenCL, BLAS - Квантизация: модели от 75 MB (tiny.en.q5) до 3 GB (large-v3) - Вывод: txt, vtt, srt, lrc, json с таймкодами - Работает на Raspberry Pi и смартфонах - Привязки: Python, Go, Node.js, Ruby
# Сборка из исходников: git clone https://github.com/ggerganov/whisper.cpp cd whisper.cpp && make # Загрузить модель: bash ./models/download-ggml-model.sh base # Распознать аудио: ./main -m models/ggml-base.bin -f audio.wav # С субтитрами SRT: ./main -m models/ggml-base.bin -f audio.mp4 -osrt # Python-пакет: pip install pywhispercpp # С GPU (CUDA): make GGML_CUDA=1

Стабильная: v1.9.1 / Дорожная карта
Высокопроизводительный вывод модели автоматического распознавания речи (ASR) Whisper от OpenAI:
Поддерживаемые платформы:
Вся высокоуровневая реализация модели содержится в whisper.h и whisper.cpp.
Остальной код является частью библиотеки машинного обучения ggml.
Наличие такой легковесной реализации модели позволяет легко интегрировать её в различные платформы и приложения. В качестве примера, вот видео запуска модели на устройстве iPhone 13 - полностью автономно, на самом устройстве: whisper.objc
https://user-images.githubusercontent.com/1991296/197385372-962a6dea-bca1-4d50-bf96-1d8c27b98c81.mp4
Вы также можете легко создать собственное автономное приложение-голосовой помощник: command
https://user-images.githubusercontent.com/1991296/204038393-2f846eae-c255-4099-a76d-5735c25c49da.mp4
На Apple Silicon вывод выполняется полностью на GPU через Metal:
https://github.com/ggml-org/whisper.cpp/assets/1991296/c82e8f86-60dc-49f2-b048-d2fdbd6b5225
Сначала клонируйте репозиторий:
git clone https://github.com/ggml-org/whisper.cpp.git
Перейдите в каталог:
cd whisper.cpp
Затем скачайте одну из моделей Whisper, сконвертированных в ggml формат. Например:
sh ./models/download-ggml-model.sh base.en
Теперь соберите пример whisper-cli и транскрибируйте аудиофайл следующим образом:
# build the project
cmake -B build
cmake --build build -j --config Release
# transcribe an audio file
./build/bin/whisper-cli -f samples/jfk.wav
Для быстрой демонстрации просто запустите make base.en.
Эта команда скачивает модель base.en, сконвертированную в собственный формат ggml, и запускает вывод на всех аудиофайлах .wav в папке samples.
Для получения подробных инструкций по использованию запустите: ./build/bin/whisper-cli -h
Обратите внимание, что пример whisper-cli в настоящее время работает только с 16-битными WAV-файлами, поэтому убедитесь, что конвертировали входные данные перед запуском инструмента.
Например, вы можете использовать ffmpeg следующим образом:
ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav
Если вы хотите получить дополнительные аудио-примеры для экспериментов, просто запустите:
make -j samples
Это скачает несколько аудиофайлов из Википедии и конвертирует их в 16-битный WAV-формат с помощью ffmpeg.
Вы можете скачать и запустить другие модели следующим образом:
make -j tiny.en
make -j tiny
make -j base.en
make -j base
make -j small.en
make -j small
make -j medium.en
make -j medium
make -j large-v1
make -j large-v2
make -j large-v3
make -j large-v3-turbo
| Модель | Диск | Память |
|---|---|---|
| tiny | 75 MiB | ~273 MB |
| base | 142 MiB | ~388 MB |
| small | 466 MiB | ~852 MB |
| medium | 1.5 GiB | ~2.1 GB |
| large | 2.9 GiB | ~3.9 GB |
whisper.cpp поддерживает архитектуры POWER и включает код, который значительно ускоряет работу на Linux, работающем на POWER9/10, делая возможной транскрипцию быстрее реального времени на пониженных частотах Raptor Talos II. Убедитесь, что у вас установлен пакет BLAS, и замените стандартную конфигурацию cmake на:
# build with GGML_BLAS defined
cmake -B build -DGGML_BLAS=1
cmake --build build -j --config Release
./build/bin/whisper-cli [ .. etc .. ]
whisper.cpp поддерживает целочисленную квантизацию моделей Whisper в формате ggml.
Квантизованные модели требуют меньше памяти и дискового пространства и, в зависимости от аппаратного обеспечения, могут обрабатываться более эффективно.
Вот шаги по созданию и использованию квантизованной модели:
# quantize a model with Q5_0 method
cmake -B build
cmake --build build -j --config Release
./build/bin/quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0
# run the examples as usual, specifying the quantized model file
./build/bin/whisper-cli -m models/ggml-base.en-q5_0.bin ./samples/gb0.wav
На устройствах с Apple Silicon вывод кодировщика (Encoder) может выполняться на Apple Neural Engine (ANE) через Core ML. Это может привести к значительному ускорению - более чем в 3 раза по сравнению с выполнением только на CPU. Вот инструкции по генерации модели Core ML и использованию её с whisper.cpp:
bash
pip install ane_transformers
pip install openai-whisper
pip install coremltools
coremltools работает правильно, пожалуйста, подтвердите, что установлен Xcode, и выполните xcode-select --install для установки инструментов командной строки.[НЕОБЯЗАТЕЛЬНО] Рекомендуется использовать систему управления версиями Python, такую как Miniconda, на этом этапе:
conda create -n py311-whisper python=3.11 -yconda activate py311-whisperСгенерируйте модель Core ML. Например, чтобы сгенерировать модель base.en, используйте:
bash
./models/generate-coreml-model.sh base.en
Это создаст папку models/ggml-base.en-encoder.mlmodelc
whisper.cpp с поддержкой Core ML:bash
# используя CMake
cmake -B build -DWHISPER_COREML=1
cmake --build build -j --config Release
```text $ ./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/jfk.wav
...
whisper_init_state: загрузка модели Core ML из 'models/ggml-base.en-encoder.mlmodelc' whisper_init_state: первый запуск на устройстве может занять некоторое время ... whisper_init_state: модель Core ML загружена
system_info: n_threads = 4 / 10 | AVX = 0 | AVX2 = 0 | AVX512 = 0 | FMA = 0 | NEON = 1 | ARM_FMA = 1 | F16C = 0 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 0 | VSX = 0 | COREML = 1 |
... ```
Первый запуск на устройстве медленный, поскольку служба ANE компилирует модель Core ML в некоторый формат, специфичный для устройства. Последующие запуски проходят быстрее.
Для получения дополнительной информации о реализации Core ML, пожалуйста, обратитесь к PR #566.
На платформах, поддерживающих OpenVINO, вывод кодировщика (Encoder) может выполняться на устройствах, поддерживаемых OpenVINO, включая CPU x86 и GPU Intel (интегрированные и дискретные).
Это может привести к значительному ускорению производительности кодировщика. Вот инструкции по генерации модели OpenVINO и использованию её с whisper.cpp:
Windows:
powershell
cd models
python -m venv openvino_conv_env
openvino_conv_env\Scripts\activate
python -m pip install --upgrade pip
pip install -r requirements-openvino.txt
Linux и macOS:
cd models
python3 -m venv openvino_conv_env
source openvino_conv_env/bin/activate
python -m pip install --upgrade pip
pip install -r requirements-openvino.txt
base.en, используйте:python convert-whisper-to-openvino.py --model base.en
В результате будут созданы файлы IR-модели ggml-base.en-encoder-openvino.xml/.bin. Рекомендуется переместить эти файлы в ту же папку, что и модели ggml, так как это место по умолчанию, которое расширение OpenVINO будет искать во время выполнения.
whisper.cpp с поддержкой OpenVINO:Скачайте пакет OpenVINO со страницы релизов. Рекомендуемая версия — 2024.6.0. Готовые к использованию бинарные файлы необходимых библиотек можно найти в архивах OpenVINO.
После скачивания и распаковки пакета на вашу систему разработки настройте необходимую среду, выполнив скрипт setupvars. Например:
Linux:
bash
source /path/to/l_openvino_toolkit_ubuntu22_2023.0.0.10926.b4452d56304_x86_64/setupvars.sh
Windows (cmd):
powershell
C:\Path\To\w_openvino_toolkit_windows_2023.0.0.10926.b4452d56304_x86_64\setupvars.bat
Затем соберите проект с помощью cmake:
bash
cmake -B build -DWHISPER_OPENVINO=1
cmake --build build -j --config Release
```text $ ./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/jfk.wav
...
whisper_ctx_init_openvino_encoder: loading OpenVINO model from 'models/ggml-base.en-encoder-openvino.xml' whisper_ctx_init_openvino_encoder: first run on a device may take a while ... whisper_openvino_init: path_model = models/ggml-base.en-encoder-openvino.xml, device = GPU, cache_dir = models/ggml-base.en-encoder-openvino-cache whisper_ctx_init_openvino_encoder: OpenVINO model loaded
system_info: n_threads = 4 / 8 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 1 | VSX = 0 | COREML = 0 | OPENVINO = 1 |
... ```
Первый запуск на устройстве OpenVINO выполняется медленно, так как фреймворк OpenVINO компилирует IR-модель (промежуточное представление) в специфичный для устройства «блоб». Этот специфичный для устройства блоб будет кэширован для последующих запусков.
Для получения дополнительной информации о реализации OpenVINO, пожалуйста, обратитесь к PR #1037.
С картами NVIDIA обработка моделей выполняется эффективно на GPU с помощью cuBLAS и пользовательских ядер CUDA.
Сначала убедитесь, что вы установили cuda: https://developer.nvidia.com/cuda-downloads
Теперь соберите whisper.cpp с поддержкой CUDA:
cmake -B build -DGGML_CUDA=1
cmake --build build -j --config Release
или для более новых GPU NVIDIA (серия RTX 5000):
cmake -B build -DGGML_CUDA=1 -DCMAKE_CUDA_ARCHITECTURES="86"
cmake --build build -j --config Release
Кросс-вендорное решение, которое позволяет ускорять обработку на вашем GPU. Сначала убедитесь, что ваш графический драйвер поддерживает Vulkan API.
Теперь соберите whisper.cpp с поддержкой Vulkan:
cmake -B build -DGGML_VULKAN=1
cmake --build build -j --config Release
С GPU AMD обработка может быть ускорена через HIP/ROCm. Сначала убедитесь, что вы установили ROCm.
Теперь соберите whisper.cpp с поддержкой HIP:
cmake -B build -DGGML_HIP=1 -DAMDGPU_TARGETS="gfx1201"
cmake --build build -j --config Release
Замените gfx1201 на архитектуру вашей GPU. Узнать её можно с помощью:
rocminfo | grep "gfx"
Типичные архитектуры: gfx1100 (RX 7900 XTX), gfx1101 (RX 7800 XT), gfx1201 (RX 9070 XT).
Для нескольких GPU с разными архитектурами: -DAMDGPU_TARGETS="gfx1100;gfx1201".
Обработка кодировщика может быть ускорена на CPU с помощью OpenBLAS.
Сначала убедитесь, что вы установили openblas: https://www.openblas.net/
Теперь соберите whisper.cpp с поддержкой OpenBLAS:
cmake -B build -DGGML_BLAS=1
cmake --build build -j --config Release
NPU Ascend обеспечивает ускорение вывода через CANN и ИИ-ядра.
Сначала проверьте, поддерживается ли ваше устройство NPU Ascend:
Подтвержденные устройства
| NPU Ascend | Статус |
|---|---|
| Atlas 300T A2 | Поддержка |
| Atlas 300I Duo | Поддержка |
Затем убедитесь, что вы установили CANN toolkit. Рекомендуется последняя версия CANN.
Теперь соберите whisper.cpp с поддержкой CANN:
cmake -B build -DGGML_CANN=1
cmake --build build -j --config Release
Запускайте примеры вывода как обычно, например:
./build/bin/whisper-cli -f samples/jfk.wav -m models/ggml-base.en.bin -t 8
Примечания:
Подтвержденные устройства.С картами Moore Threads обработка моделей выполняется эффективно на GPU с помощью muBLAS и пользовательских ядер MUSA.
Сначала убедитесь, что вы установили MUSA SDK rc4.2.0: https://developer.mthreads.com/sdk/download/musa?equipment=&os=&driverVersion=&version=4.2.0
Теперь соберите whisper.cpp с поддержкой MUSA:
cmake -B build -DGGML_MUSA=1
cmake --build build -j --config Release
или укажите архитектуру для вашей GPU Moore Threads. Например, если у вас GPU MTT S80, вы можете указать архитектуру следующим образом:
cmake -B build -DGGML_MUSA=1 -DMUSA_ARCHITECTURES="21"
cmake --build build -j --config Release
По умолчанию примеры в этом репозитории используют библиотеку miniaudio для декодирования аудиофайлов.
Некоторые примеры также могут использовать FFmpeg для декодирования и более широкой поддержки форматов. Для этого соберите проект с флагом WHISPER_COMMON_FFMPEG.
Сначала вам необходимо установить необходимые библиотеки:
# Debian/Ubuntu
sudo apt install libavcodec-dev libavformat-dev libavutil-dev
# RHEL/Fedora
sudo dnf install libavcodec-free-devel libavformat-free-devel libavutil-free-devel
Затем вы можете собрать проект следующим образом:
cmake -B build -D WHISPER_COMMON_FFMPEG=yes
cmake --build build
Запустите следующий пример, чтобы убедиться, что всё работает:
# Convert an audio file to Opus format
ffmpeg -i samples/jfk.wav jfk.opus
# Transcribe the audio file
./build/bin/whisper-cli --model models/ggml-base.en.bin --file jfk.opus
Доступны несколько Docker-образов для этого проекта:
ghcr.io/ggml-org/whisper.cpp:main: Этот образ включает основной исполняемый файл, а также curl и ffmpeg. (платформы: linux/amd64, linux/arm64)ghcr.io/ggml-org/whisper.cpp:main-cuda: То же, что и main, но собран с поддержкой CUDA. (платформы: linux/amd64)ghcr.io/ggml-org/whisper.cpp:main-musa: То же, что и main, но собран с поддержкой MUSA. (платформы: linux/amd64)ghcr.io/ggml-org/whisper.cpp:main-vulkan: То же, что и main, но собран с поддержкой Vulkan. (платформы: linux/amd64)# download model and persist it in a local folder
docker run -it --rm \
-v path/to/models:/models \
whisper.cpp:main "./models/download-ggml-model.sh base /models"
# transcribe an audio file
docker run -it --rm \
-v path/to/models:/models \
-v path/to/audios:/audios \
whisper.cpp:main "whisper-cli -m /models/ggml-base.bin -f /audios/jfk.wav"
# transcribe an audio file in samples folder
docker run -it --rm \
-v path/to/models:/models \
whisper.cpp:main "whisper-cli -m /models/ggml-base.bin -f ./samples/jfk.wav"
# run the web server
docker run -it --rm -p "8080:8080" \
-v path/to/models:/models \
whisper.cpp:main "whisper-server --host 127.0.0.1 -m /models/ggml-base.bin"
# run the bench too on the small.en model using 4 threads
docker run -it --rm \
-v path/to/models:/models \
whisper.cpp:main "whisper-bench -m /models/ggml-small.en.bin -t 4"
Вы можете установить предварительно собранные бинарные файлы для whisper.cpp или собрать его из исходного кода с помощью Conan. Используйте следующую команду:
conan install --requires="whisper-cpp/[*]" --build=missing
Для получения подробных инструкций по использованию Conan, пожалуйста, обратитесь к документации Conan.
Это простой пример выполнения вывода в реальном времени для аудио с вашего микрофона. Инструмент stream сэмплирует аудио каждую полсекунды и непрерывно выполняет транскрибацию. Более подробная информация доступна в issue #10. Для корректной работы вам понадобится установленный sdl2.
cmake -B build -DWHISPER_SDL2=ON
cmake --build build -j --config Release
./build/bin/whisper-stream -m ./models/ggml-base.en.bin -t 8 --step 500 --length 5000
https://user-images.githubusercontent.com/1991296/194935793-76afede7-cfa8-48d8-a80f-28ba83be7d09.mp4
Добавление аргумента --print-colors будет печатать транскрибированный текст, используя экспериментальную стратегию цветового кодирования, чтобы выделить слова с высокой или низкой уверенностью:
./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/gb0.wav --print-colors

Например, чтобы ограничить длину строки максимум 16 символами, просто добавьте -ml 16:
$ ./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f ./samples/jfk.wav -ml 16
whisper_model_load: loading model from './models/ggml-base.en.bin'
...
system_info: n_threads = 4 / 10 | AVX2 = 0 | AVX512 = 0 | NEON = 1 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 |
main: processing './samples/jfk.wav' (176000 samples, 11.0 sec), 4 threads, 1 processors, lang = en, task = transcribe, timestamps = 1 ...
[00:00:00.000 --> 00:00:00.850] And so my
[00:00:00.850 --> 00:00:01.590] fellow
[00:00:01.590 --> 00:00:04.140] Americans, ask
[00:00:04.140 --> 00:00:05.660] not what your
[00:00:05.660 --> 00:00:06.840] country can do
[00:00:06.840 --> 00:00:08.430] for you, ask
[00:00:08.430 --> 00:00:09.440] what you can do
[00:00:09.440 --> 00:00:10.020] for your
[00:00:10.020 --> 00:00:11.000] country.
Аргумент --max-len можно использовать для получения временных меток на уровне слов. Просто используйте -ml 1:
$ ./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f ./samples/jfk.wav -ml 1
whisper_model_load: loading model from './models/ggml-base.en.bin'
...
system_info: n_threads = 4 / 10 | AVX2 = 0 | AVX512 = 0 | NEON = 1 | FP16_VA = 1 | WASM_SIMD = 0 | BLAS = 1 |
main: processing './samples/jfk.wav' (176000 samples, 11.0 sec), 4 threads, 1 processors, lang = en, task = transcribe, timestamps = 1 ...
[00:00:00.000 --> 00:00:00.320]
[00:00:00.320 --> 00:00:00.370] And
[00:00:00.370 --> 00:00:00.690] so
[00:00:00.690 --> 00:00:00.850] my
[00:00:00.850 --> 00:00:01.590] fellow
[00:00:01.590 --> 00:00:02.850] Americans
[00:00:02.850 --> 00:00:03.300] ,
[00:00:03.300 --> 00:00:04.140] ask
[00:00:04.140 --> 00:00:04.990] not
[00:00:04.990 --> 00:00:05.410] what
[00:00:05.410 --> 00:00:05.660] your
[00:00:05.660 --> 00:00:06.260] country
[00:00:06.260 --> 00:00:06.600] can
[00:00:06.600 --> 00:00:06.840] do
[00:00:06.840 --> 00:00:07.010] for
[00:00:07.010 --> 00:00:08.170] you
[00:00:08.170 --> 00:00:08.190] ,
[00:00:08.190 --> 00:00:08.430] ask
[00:00:08.430 --> 00:00:08.910] what
[00:00:08.910 --> 00:00:09.040] you
[00:00:09.040 --> 00:00:09.320] can
[00:00:09.320 --> 00:00:09.440] do
[00:00:09.440 --> 00:00:09.760] for
[00:00:09.760 --> 00:00:10.020] your
[00:00:10.020 --> 00:00:10.510] country
[00:00:10.510 --> 00:00:11.000] .
Более подробная информация об этом подходе доступна здесь: https://github.com/ggml-org/whisper.cpp/pull/1058
Пример использования:
# download a tinydiarize compatible model
./models/download-ggml-model.sh small.en-tdrz
# run as usual, adding the "-tdrz" command-line argument
./build/bin/whisper-cli -f ./samples/a13.wav -m ./models/ggml-small.en-tdrz.bin -tdrz
...
main: processing './samples/a13.wav' (480000 samples, 30.0 sec), 4 threads, 1 processors, lang = en, task = transcribe, tdrz = 1, timestamps = 1 ...
...
[00:00:00.000 --> 00:00:03.800] Okay Houston, we've had a problem here. [SPEAKER_TURN]
[00:00:03.800 --> 00:00:06.200] This is Houston. Say again please. [SPEAKER_TURN]
[00:00:06.200 --> 00:00:08.260] Uh Houston we've had a problem.
[00:00:08.260 --> 00:00:11.320] We've had a main beam up on a volt. [SPEAKER_TURN]
[00:00:11.320 --> 00:00:13.820] Roger main beam interval. [SPEAKER_TURN]
[00:00:13.820 --> 00:00:15.100] Uh uh [SPEAKER_TURN]
[00:00:15.100 --> 00:00:18.020] So okay stand, by thirteen we're looking at it. [SPEAKER_TURN]
[00:00:18.020 --> 00:00:25.740] Okay uh right now uh Houston the uh voltage is uh is looking good um.
[00:00:27.620 --> 00:00:29.940] And we had a a pretty large bank or so.
Пример whisper-cli поддерживает вывод фильмов в стиле караоке, где
выделяется произносимое в данный момент слово. Используйте аргумент -owts и запустите сгенерированный bash-скрипт.
Для этого требуется установленный ffmpeg.
Вот несколько «типовых» примеров:
./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f ./samples/jfk.wav -owts
source ./samples/jfk.wav.wts
ffplay ./samples/jfk.wav.mp4
https://user-images.githubusercontent.com/1991296/199337465-dbee4b5e-9aeb-48a3-b1c6-323ac4db5b2c.mp4
./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f ./samples/mm0.wav -owts
source ./samples/mm0.wav.wts
ffplay ./samples/mm0.wav.mp4
https://user-images.githubusercontent.com/1991296/199337504-cc8fd233-0cb7-4920-95f9-4227de3570aa.mp4
./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f ./samples/gb0.wav -owts
source ./samples/gb0.wav.wts
ffplay ./samples/gb0.wav.mp4
https://user-images.githubusercontent.com/1991296/199337538-b7b0c7a3-2753-4a88-a0cd-f28a317987ba.mp4
Используйте скрипт scripts/bench-wts.sh для генерации видео в следующем формате:
./scripts/bench-wts.sh samples/jfk.wav
ffplay ./samples/jfk.wav.all.mp4
https://user-images.githubusercontent.com/1991296/223206245-2d36d903-cf8e-4f09-8c3b-eb9f9c39d6fc.mp4
Для объективного сравнения производительности инференса на различных системных конфигурациях используйте инструмент whisper-bench. Этот инструмент просто запускает часть «Encoder» модели и выводит время, затраченное на её выполнение. Результаты собраны в следующем issue на Github:
Дополнительно提供的 скрипт для запуска whisper.cpp с различными моделями и аудиофайлами: bench.py.
Вы можете запустить его следующей командой; по умолчанию он будет работать с любой стандартной моделью из папки models.
python3 scripts/bench.py -f samples/jfk.wav -t 2,4,8 -p 1,2
Он написан на Python с расчётом на то, чтобы его было легко изменять и расширять для ваших задач бенчмаркинга.
Он выводит csv-файл с результатами бенчмаркинга.
ggmlОригинальные модели конвертируются в пользовательский бинарный формат. Это позволяет упаковать всё необходимое в один файл:
Вы можете скачать сконвертированные модели с помощью скрипта models/download-ggml-model.sh или вручную по ссылке:
Подробнее о конвертации можно узнать из скрипта models/convert-pt-to-ggml.py или из models/README.md.
XCFramework — это предкомпилированная версия библиотеки для iOS, visionOS, tvOS и macOS. Он может использоваться в Swift-проектах без необходимости компиляции библиотеки из исходного кода. Например, версию v1.7.5 XCFramework можно использовать следующим образом:
// swift-tools-version: 5.10
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "Whisper",
targets: [
.executableTarget(
name: "Whisper",
dependencies: [
"WhisperFramework"
]),
.binaryTarget(
name: "WhisperFramework",
url: "https://github.com/ggml-org/whisper.cpp/releases/download/v1.7.5/whisper-v1.7.5-xcframework.zip",
checksum: "c7faeb328620d6012e130f3d705c51a6ea6c995605f2df50f6e1ad68c59c6c4a"
)
]
)
Поддержку детекции голосовой активности (VAD) можно включить с помощью аргумента --vad
для whisper-cli. Помимо этого параметра также требуется модель VAD.
Принцип работы следующий: сначала аудиосэмплы передаются через модель VAD, которая определяет участки речи. Используя эту информацию, из исходного аудиовхода извлекаются только обнаруженные речевые сегменты и передаются в whisper для обработки. Это уменьшает объём аудиоданных, которые необходимо обработать whisper, и может значительно ускорить процесс транскрибации.
На данный момент поддерживаются следующие модели VAD:
Silero-vad — это лёгкая модель VAD, написанная на Python, которая отличается высокой скоростью и точностью.
Модели можно скачать, выполнив следующую команду в Linux или MacOS:
$ ./models/download-vad-model.sh silero-v6.2.0
Downloading ggml model silero-v6.2.0 from 'https://huggingface.co/ggml-org/whisper-vad' ...
ggml-silero-v6.2.0.bin 100%[==============================================>] 864.35K --.-KB/s in 0.04s
Done! Model 'silero-v6.2.0' saved in '/path/models/ggml-silero-v6.2.0.bin'
You can now use it like this:
$ ./build/bin/whisper-cli -vm /path/models/ggml-silero-v6.2.0.bin --vad -f samples/jfk.wav -m models/ggml-base.en.bin
А следующую команду в Windows:
> .\models\download-vad-model.cmd silero-v6.2.0
Downloading vad model silero-v6.2.0...
Done! Model silero-v6.2.0 saved in C:\Users\danie\work\ai\whisper.cpp\ggml-silero-v6.2.0.bin
You can now use it like this:
C:\path\build\bin\Release\whisper-cli.exe -vm C:\path\ggml-silero-v6.2.0.bin --vad -m models/ggml-base.en.bin -f samples\jfk.wav
Чтобы увидеть список всех доступных моделей, выполните указанные выше команды без каких-либо аргументов.
Эту модель также можно вручную сконвертировать в ggml с помощью следующей команды:
$ python3 -m venv venv && source venv/bin/activate
$ (venv) pip install silero-vad
$ (venv) $ python models/convert-silero-vad-to-ggml.py --output models/silero.bin
Saving GGML Silero-VAD model to models/silero-v6.2.0-ggml.bin
После этого её можно использовать с whisper следующим образом:
$ ./build/bin/whisper-cli \
--file ./samples/jfk.wav \
--model ./models/ggml-base.en.bin \
--vad \
--vad-model ./models/silero-v6.2.0-ggml.bin
--vad-threshold: Порог вероятности для детекции речи. Вероятность
для речевого сегмента/кадра выше этого порога будет считаться речью.
--vad-min-speech-duration-ms: Минимальная длительность речи в миллисекундах.
Речевые сегменты короче этого значения будут отброшены для фильтрации кратковременных шумов или
ложных срабатываний.
--vad-min-silence-duration-ms: Минимальная длительность тишины в миллисекундах.
Периоды тишины должны быть не короче этого значения, чтобы завершить речевой сегмент.
Более короткие периоды тишины будут игнорироваться и включены как часть речи.
--vad-max-speech-duration-s: Максимальная длительность речи в секундах.
Речевые сегменты длиннее этого значения будут автоматически разбиты на несколько сегментов
в точках тишины превышающих 98мс, чтобы предотвратить чрезмерно длинные сегменты.
--vad-speech-pad-ms: Дополнение речи в миллисекундах. Добавляет указанное количество дополнения
до и после каждого обнаруженного речевого сегмента, чтобы избежать обрезки краёв речи.
--vad-samples-overlap: Объём аудио для расширения от каждого речевого сегмента в
следующий, в секундах (например, 0.10 = 100мс перекрытие). Это гарантирует, что речь не будет
резко обрезана между сегментами при их объединении.
В папке examples находятся различные примеры использования библиотеки в разных проектах. Некоторые из примеров даже портированы для работы в браузере с использованием WebAssembly. Попробуйте их!
| Пример | Web | Описание |
|---|---|---|
| whisper-cli | whisper.wasm | Инструмент для перевода и транскрибации аудио с помощью Whisper |
| whisper-bench | bench.wasm | Бенчмарк производительности Whisper на вашей машине |
| whisper-stream | stream.wasm | Транскрибация в реальном времени с микрофона |
| whisper-command | command.wasm | Базовый пример голосового помощника для приёма голосовых команд с микрофона |
| whisper-server | HTTP-сервер транскрипции с API, совместимым с OpenAI | |
| whisper-talk-llama | Разговор с ботом на базе LLaMA | |
| whisper.objc | Мобильное приложение для iOS, использующее whisper.cpp | |
| whisper.swiftui | Приложение для iOS / macOS на SwiftUI, использующее whisper.cpp | |
| whisper.android | Мобильное приложение для Android, использующее whisper.cpp | |
| whisper.nvim | Плагин преобразования речи в текст для Neovim | |
| generate-karaoke.sh | Вспомогательный скрипт для простого создания караоке-видео из необработанной аудиозаписи | |
| livestream.sh | Транскрипция аудио в прямом эфире | |
| yt-wsp.sh | Загрузка + транскрипция и/или перевод любого видео по запросу (оригинал) | |
| wchess | wchess.wasm | Шахматы с голосовым управлением |
Если у вас есть какой-либо отзыв об этом проекте, не стесняйтесь использовать раздел «Обсуждения» и создавать новую тему.
Вы можете использовать категорию Show and tell,
чтобы поделиться собственными проектами, в которых используется whisper.cpp. Если у вас есть вопрос, обязательно ознакомьтесь с
обсуждением Часто задаваемые вопросы (#126).