transcribe.cpp: автор Handy выпустил единую библиотеку для локального распознавания речи

Разработчик кроссплатформенного приложения для распознавания речи Handy выпустил transcribe.cpp, библиотеку на базе ggml (движок, на котором построены whisper.cpp, llama.cpp и другие инструменты для локального запуска ИИ-моделей) для автоматического распознавания речи (ASR). Это версия 0.1.0: автор предупреждает о шероховатостях и просит сообщество сообщать о найденных проблемах.

Причина появления библиотеки, недовольство текущим стеком для локального ASR. По словам автора, у разработчиков был выбор между whisper.cpp и ONNX, либо ещё MLX для устройств Apple, а значит поддержка сразу нескольких движков и перенос моделей под каждый из них. Сторонние библиотеки с широкой поддержкой моделей автор считает ненадёжными: неизвестны авторы, непонятно, тестировались ли модели и будут ли поддерживаться дальше. Так родился transcribe.cpp, библиотека, которой автор мог бы доверять сам, работающая на GPU и легко встраиваемая в Handy.

transcribe.cpp поддерживает 16 семейств ASR-моделей (более 60 моделей) с аппаратным ускорением через Vulkan, Metal, CUDA и TinyBLAS. Каждая модель численно сверена с эталонной реализацией и протестирована по метрике WER (word error rate, доля ошибок распознавания) на тысячах фраз; результаты публикуются в репозитории проекта и на страницах моделей на Hugging Face. Библиотека поддерживает как потоковую, так и пакетную транскрипцию, а также официальные привязки (bindings) для четырёх языков программирования: Python, JavaScript/TypeScript, Rust и ObjC/Swift.

transcribe.cpp задумана как почти прямая замена whisper.cpp: она умеет работать с популярными файлами моделей формата .bin, которые Handy ранее распространяла через whisper.cpp, хотя пока поддерживает не все флаги и функции оригинала.

Автор приводит в пример работу на слабом одноплатном компьютере с чипом RK3566 (класс устройств вроде Raspberry Pi): по его словам, современные модели на нём распознают речь быстрее реального времени, потребляя всего несколько ватт, то есть полностью локальное распознавание речи без отправки голоса в облако уже реально работает даже на маломощном железе.

Проект получил поддержку программы Mozilla AI BiR (лично от сотрудника по имени Davide), GPU-кредиты от Modal для WER-тестирования на CUDA и кредиты на CI/CD от сервиса Blacksmith; модели размещены в организации handy-computer на Hugging Face. Автор отдельно уточнил, что при разработке пользовался ИИ-инструментами, но весь текст поста написал сам, без помощи ИИ.

Ключевые факты

  • transcribe.cpp, библиотека на ggml для локального распознавания речи (ASR), выпущена автором приложения Handy как версия 0.1.0
  • Поддерживает 16 семейств моделей (60+ моделей) с ускорением через Vulkan, Metal, CUDA и TinyBLAS
  • Каждая модель численно верифицирована против эталонной реализации и проверена по метрике WER на тысячах фраз
  • Есть потоковая и пакетная транскрипция, официальные привязки для Python, JavaScript/TypeScript, Rust и ObjC/Swift; библиотека почти drop-in заменяет whisper.cpp
  • По словам автора, даже слабый чип RK3566 распознаёт речь быстрее реального времени при энергопотреблении в единицы ватт

Почему это важно

Локальное распознавание речи до сих пор упиралось в разрозненный стек: whisper.cpp, ONNX, отдельно MLX для Apple, каждый со своей поддержкой моделей и производительностью. transcribe.cpp предлагает один движок на ggml с широким набором моделей и аппаратным ускорением на всех платформах, что снимает необходимость держать и синхронизировать несколько инференс-движков в одном приложении.

Кому это важно

В первую очередь, разработчикам desktop- и mobile-приложений с локальным (offline) распознаванием речи, которым сейчас приходится выбирать между ограниченными по моделям whisper.cpp/ONNX и малопонятными сторонними библиотеками без тестов. Полезно и разработчикам embedded-устройств: пример с RK3566 показывает, что библиотека годится и для маломощного железа.

Как это применить

transcribe.cpp можно встроить как почти прямую замену whisper.cpp, включая поддержку существующих файлов моделей формата .bin. Доступны официальные привязки для Python, JavaScript/TypeScript, Rust и ObjC/Swift, поддержка потоковой и пакетной транскрипции. Модели публикуются в организации handy-computer на Hugging Face вместе с результатами верификации и WER-тестов по каждой модели.

Можно ли доверять

Каждая из более 60 поддерживаемых моделей численно сверена с эталонной реализацией и прогнана через WER-тесты на тысячах фраз, данные опубликованы открыто в репозитории и на Hugging Face, что позволяет проверить точность самостоятельно. Проект поддержан известными в сообществе организациями (Mozilla AI, Hugging Face) и получил ресурсы от Modal и Blacksmith для тестирования и CI/CD.

Риски и подводные камни

Это версия 0.1.0 с заявленными автором шероховатостями, и поддерживает библиотеку по сути один человек, тот же, кто ведёт Handy, что создаёт риск единой точки отказа для сопровождения проекта. Не все флаги и функции whisper.cpp пока реализованы, так что прямая замена возможна не во всех сценариях.

«Я считаю, что распространять кроссплатформенное приложение при нынешнем состоянии стека для инференса ASR, это ужасно.»

— автор transcribe.cpp и Handy