whisper.cpp server: локальный HTTP API для транскрибации WAV
На странице · 4 разделов
whisper.cpp содержит отдельный HTTP-сервер `whisper-server`: он принимает WAV как multipart-поле `file` на `/inference` и может вернуть JSON с текстом. Для русского примера нужен многоязычный GGML-вариант без `.en` и явный `language=ru`, поскольку настройки сервера по умолчанию ориентированы на английский. Привяжите сервер к loopback, проверьте `/health` и сопоставьте ответ со своей записью; работа модели и безопасность конфигурации Modelium не тестировались.
На 6 октября 2026 года проект whisper.cpp содержит самостоятельный whisper-server с HTTP-маршрутом /inference; это не тот же путь, что его whisper-cli, и не универсальный OpenAI-совместимый API. Ниже — одноузловой пример для доверенного Linux-хоста: локальный WAV, многоязычная модель, проверка JSON-ответа и границы сетевого доступа. Версия исходников — Git 60c0be6ac8fa71b1a2ae2dd938a31a34a508e774; Modelium бинарник не собирал и аудио не обрабатывал. s1 s2 s3
Когда нужен сервер вместо CLI
Если приложение на том же компьютере должно многократно отправлять записи через HTTP, whisper-server принимает multipart-запросы с полем file и выводит текст распознавания в JSON. Для разового локального файла проще начать с основного гайда по whisper.cpp и CLI: это уменьшает сетевую поверхность. Маршрут сервера — /inference, а не /v1/audio/transcriptions; поле запроса — file, а не ссылка на облачное хранилище. s1 s2
Предположения примера: права на обработку тестовой записи, доступ к исходному репозиторию и модели, компилятор C/C++ и CMake. Параметры скорости, рабочей памяти и пригодности конкретного CPU/GPU не выводятся из размера весов и не измерены Modelium. Код whisper.cpp опубликован с лицензией MIT, но разрешения для обработки записи и условия каждого набора весов проверяйте отдельно. s3 s4 s6
Как собрать сервер и выбрать модель для русского языка
Зафиксируйте репозиторий на указанном commit и из его корня выполните cmake -B build -DWHISPER_BUILD_SERVER=ON, затем cmake --build build -j --config Release. Корневой README подтверждает стандартную сборку CMake; исходный CMake-файл включает опцию WHISPER_BUILD_SERVER, а серверный target создаёт whisper-server в build/bin. Закрепление commit важно: команды и параметры могут отличаться у следующего выпуска. GPU-бэкенд этим примером не включается; реальную аппаратную совместимость проверяйте на своей сборке. s3 s5 s1
Не оставляйте серверный вариант по умолчанию: код задаёт models/ggml-base.en.bin и language=en. Суффикс .en в списке моделей обозначает только английский, тогда как base многоязычная. Для русского возьмите ggml-base.bin и явно укажите -m models/ggml-base.bin -l ru; размер файла из каталога моделей не равен минимальному объёму оперативной памяти. s2 s4
Скрипт проекта sh ./models/download-ggml-model.sh base получает готовый файл с Hugging Face по изменяемой ветке main; на закреплённом снимке HF 5359861c739e955e79d9a303bcbc70fb988958b1 файл ggml-base.bin существует. Для воспроизводимого набора скачайте ggml-base.bin именно с этой ревизии либо после выполнения скрипта сравните SHA-1 полученного файла с указанным в каталоге проекта 465707469ff3a37a2b9b8d8f89f2f99de7299dac командой sha1sum models/ggml-base.bin; если хэш не совпал, не используйте файл в примере. SHA-1 здесь — контроль состава по версии каталога, не универсальная гарантия безопасности. Репозиторий модели и реализация сервера имеют разные ревизии. s4 s7 s8
Как отправить WAV и проверить ответ API
Из корня репозитория на доверенном локальном хосте запустите ./build/bin/whisper-server -m models/ggml-base.bin -l ru --host 127.0.0.1 --port 8080. По коду 127.0.0.1:8080 — значение по умолчанию, но явное указание помогает не перепутать стенд с конфигурацией, опубликованной на сетевом интерфейсе. В другом терминале проверьте curl -i http://127.0.0.1:8080/health: успешный ответ с {"status":"ok"} означает загруженную модель, не успешную транскрипцию. s1 s2
Подготовьте собственный короткий WAV с русской речью. README показывает преобразование в PCM 16-bit, 16 кГц, mono: ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le test-ru.wav. Если запись уже соответствует этим условиям, повторная конвертация не нужна; не включайте серверный --convert без необходимости, поскольку тогда пример вызывает ffmpeg над загруженным файлом на сервере. Для чувствительного аудио не используйте случайный публичный файл или внешний конвертер. s3 s1 s2
Отправьте curl -sS -f http://127.0.0.1:8080/inference -F file=@test-ru.wav -F language=ru -F response_format=json. curl -F самостоятельно выставляет multipart boundary — вручную писать Content-Type: multipart/form-data без boundary не надо. Ответ на этой ревизии содержит поле text; сохраните исходный WAV, точный commit, модель и параметры, затем вручную сопоставьте имена, числа и пропущенные слова с аудио. HTTP 200 с непустым text — контроль прохождения API, но не оценка точности; если text пуст, это не подтверждение успешной расшифровки. s1 s2
Какие ошибки и границы доступа проверить
Если /health не даёт ok, проверьте путь -m и загрузку модели в журнале сервера; GET /health показывает 503 при загрузке. Если /inference даёт 400 и no 'file' field, проверьте имя multipart-поля; при failed to read audio data сверяйте кодек/заголовок WAV и повторите локальную конвертацию. При английском тексте вместо русского перепроверьте, что модель не .en, а язык установлен ru. Всё это — диагностический путь по исходникам, не воспроизведённый запуск. s2 s3 s4
Не открывайте этот учебный сервер во внешнюю сеть. Исходник добавляет заголовок Access-Control-Allow-Origin: *, принимает загружаемые файлы и имеет отдельный POST /load, который получает путь к локальному файлу модели. README прямо предупреждает не запускать сервер с административными правами и использовать sandbox. Loopback снижает доступность извне, но не защищает от других локальных процессов, браузерных запросов или ошибочного проксирования; для общего сервиса нужна отдельная архитектура изоляции, контроль разрешённых клиентов и тест с другого хоста. После проверки остановите процесс Ctrl+C, удалите тестовую запись по своей политике данных и проверьте, что порт закрыт. s1 s2
Следующий шаг — проверка локальной транскрипции на своих записях: сравните результат с исходником, а не только с кодом HTTP. Для выбора модели и языка смотрите варианты Whisper; в бизнес-процессе решение о хранении аудио и передаче текста принимайте отдельно. s4 s2
Источники
- whisper.cpp: README серверного примера и предупреждение о sandbox — revision 60c0be6ac8fa71b1a2ae2dd938a31a34a508e774. Получено 06.10.2026.
- whisper.cpp: исходный код HTTP-сервера, маршруты, поля запроса, CORS — revision 60c0be6ac8fa71b1a2ae2dd938a31a34a508e774. Получено 06.10.2026.
- whisper.cpp: корневой README, сборка и конвертация WAV — revision 60c0be6ac8fa71b1a2ae2dd938a31a34a508e774. Получено 06.10.2026.
- whisper.cpp: модели GGML, многоязычность и SHA-1 base — revision 60c0be6ac8fa71b1a2ae2dd938a31a34a508e774. Получено 06.10.2026.
- whisper.cpp: опция сборки WHISPER_BUILD_SERVER — revision 60c0be6ac8fa71b1a2ae2dd938a31a34a508e774. Получено 06.10.2026.
- whisper.cpp: лицензия исходного кода MIT — revision 60c0be6ac8fa71b1a2ae2dd938a31a34a508e774. Получено 06.10.2026.
- Hugging Face API: ggml-base.bin на закреплённой ревизии — revision 5359861c739e955e79d9a303bcbc70fb988958b1. Получено 06.10.2026.
- whisper.cpp: скрипт загрузки готовых GGML-моделей — revision 60c0be6ac8fa71b1a2ae2dd938a31a34a508e774. Получено 06.10.2026.