whisper.cpp

by Georgi Gerganov (open source) · Linux, macOS, Windows, Raspberry Pi, Android — CPU/GPU

Skill AI Assistants Open Source ★ Must have v1.9.1 · 19.06.2026 активный

Высокопроизводительная 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

v1.9.1
19.06.2026 current
Добавлен 19.06.2026 · Обновлён 07.07.2026 · AI Assistants
Установка
# Сборка из исходников:
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
переведено ИИ

whisper.cpp

whisper.cpp

Статус Actions Лицензия: MIT Conan Center npm

Стабильная: 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

Внутренние инструкции POWER VSX

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

Поддержка Core ML

На устройствах с Apple Silicon вывод кодировщика (Encoder) может выполняться на Apple Neural Engine (ANE) через Core ML. Это может привести к значительному ускорению - более чем в 3 раза по сравнению с выполнением только на CPU. Вот инструкции по генерации модели Core ML и использованию её с whisper.cpp:

  • Установите зависимости Python, необходимые для создания модели Core ML:

bash pip install ane_transformers pip install openai-whisper pip install coremltools

  • Чтобы убедиться, что coremltools работает правильно, пожалуйста, подтвердите, что установлен Xcode, и выполните xcode-select --install для установки инструментов командной строки.
  • Рекомендуется Python 3.11.
  • Рекомендуется MacOS Sonoma (версия 14) или новее, так как более старые версии MacOS могут испытывать проблемы с галлюцинациями при транскрипции.
  • [НЕОБЯЗАТЕЛЬНО] Рекомендуется использовать систему управления версиями Python, такую как Miniconda, на этом этапе:

    • Чтобы создать среду, используйте: conda create -n py311-whisper python=3.11 -y
    • Чтобы активировать среду, используйте: conda 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

На платформах, поддерживающих OpenVINO, вывод кодировщика (Encoder) может выполняться на устройствах, поддерживаемых OpenVINO, включая CPU x86 и GPU Intel (интегрированные и дискретные).

Это может привести к значительному ускорению производительности кодировщика. Вот инструкции по генерации модели OpenVINO и использованию её с whisper.cpp:

  • Сначала настройте виртуальное окружение Python и установите зависимости Python. Рекомендуется Python 3.10.

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
  • Создайте модель кодировщика OpenVINO. Например, чтобы создать модель 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.

Поддержка GPU NVIDIA

С картами 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

Кросс-вендорное решение, которое позволяет ускорять обработку на вашем GPU. Сначала убедитесь, что ваш графический драйвер поддерживает Vulkan API.

Теперь соберите whisper.cpp с поддержкой Vulkan:

cmake -B build -DGGML_VULKAN=1
cmake --build build -j --config Release

Поддержка GPU AMD ROCm

С 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 BLAS через OpenBLAS

Обработка кодировщика может быть ускорена на CPU с помощью OpenBLAS. Сначала убедитесь, что вы установили openblas: https://www.openblas.net/

Теперь соберите whisper.cpp с поддержкой OpenBLAS:

cmake -B build -DGGML_BLAS=1
cmake --build build -j --config Release

Поддержка NPU Ascend

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

Примечания:

  • Если у вас возникли проблемы с устройством NPU Ascend, пожалуйста, создайте issue с префиксом/тегом [CANN].
  • Если вы успешно запустили проект на вашем устройстве NPU Ascend, пожалуйста, помогите обновить таблицу Подтвержденные устройства.

Поддержка GPU Moore Threads

С картами 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

Поддержка FFmpeg (только для примеров)

По умолчанию примеры в этом репозитории используют библиотеку 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

Предварительные требования

  • Docker должен быть установлен и запущен в вашей системе.
  • Создайте папку для хранения больших моделей и промежуточных файлов (например, /whisper/models)

Образы

Доступны несколько Docker-образов для этого проекта:

  1. ghcr.io/ggml-org/whisper.cpp:main: Этот образ включает основной исполняемый файл, а также curl и ffmpeg. (платформы: linux/amd64, linux/arm64)
  2. ghcr.io/ggml-org/whisper.cpp:main-cuda: То же, что и main, но собран с поддержкой CUDA. (платформы: linux/amd64)
  3. ghcr.io/ggml-org/whisper.cpp:main-musa: То же, что и main, но собран с поддержкой MUSA. (платформы: linux/amd64)
  4. 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"

Установка с помощью Conan

Вы можете установить предварительно собранные бинарные файлы для 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

image

Управление длиной сегментов сгенерированного текста (экспериментально)

Например, чтобы ограничить длину строки максимум 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]  .

Сегментация спикеров через tinydiarize (экспериментально)

Более подробная информация об этом подходе доступна здесь: 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 или вручную по ссылке:

  • https://huggingface.co/ggerganov/whisper.cpp

Подробнее о конвертации можно узнать из скрипта models/convert-pt-to-ggml.py или из models/README.md.

Привязки (Bindings)

XCFramework

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) можно включить с помощью аргумента --vad для whisper-cli. Помимо этого параметра также требуется модель VAD.

Принцип работы следующий: сначала аудиосэмплы передаются через модель VAD, которая определяет участки речи. Используя эту информацию, из исходного аудиовхода извлекаются только обнаруженные речевые сегменты и передаются в whisper для обработки. Это уменьшает объём аудиоданных, которые необходимо обработать whisper, и может значительно ускорить процесс транскрибации.

На данный момент поддерживаются следующие модели VAD:

Silero-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

  • --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).

Комментарии
Войдите, чтобы оставить комментарий