Сидя на очередном teams митинге с коллегами на французском, и в очередной раз понимая, что упускаю смысл совещания, ибо уровень этого самого французского оставляет желать лучшего, подумал, что надо что-то делать.
И так как их много, а меня — мало, делать что-то предстояло мне. Teams и прочие платформы, конечно, имеют опции на такой случай, но не просить же включать запись каждый раз.
Получилась небольшая программа, которая берёт воспроизводимый звуковой поток, делит его на фразы, через whisper распознаёт в указанный язык (проверял русский, английский, французский) и переводит.
Писал для себя, но если вдруг кому пригодится она сама, её части или идея — буду рад. Всё лежит тут.
Всё написано на C#, правда руками процентов 20, в основном правки. Да и самого кода-то в общем-то не так и много.
Для распознавания речи (STT) пробовал несколько локальных решений
Sherpa (onnx модели) но для фр. нашел только потоковую версию, что под мою архитектуру не ложилось.
Foundry Local от микрософта - но они еще очень сырые, и там тот же виспер, еще и общаться с ним через файл.
Что-то еще было точно, но забыл
Короче, остался c whisper, он в общем-то неплохо распознаёт и английский и французский и русский. Base модель, самая мелкая, работает быстро, но за логикой не следит — что поняла, то и выдала. Small — уже пытается в логику, но может немного подтормаживать. Medium уже не успевает за беседой, очередь чанков быстро растёт. Обидно, что не получилось с NPU/GPU и нагружается обычная память, но в общем-то качество нормальное и так.
Для перевода в программе есть два варианта — через OpenAI (нужно в настройках указать ключ, модель и URL) и через Azure translator, там только ключ указать. (2 миллиона символов в месяц бесплатно и работает шустро, но нужно иметь учётку azure). Хотел еще yandex API, но там нужно обязательно billing account, но у меня способов оплаты в рф нету. Но если кому нужен другой переводчик — там очень простой интерфейс ITranslationService и подключить новую реализацию в общем-то просто.
Смотрел на локальные библиотеки для перевода, но чего-то вменяемого не нашел.
Выглядит программа так: (скрин из утреннего митинга)

Из неочевидного в настройках — если выбрать один и тот же язык для перевода — тогда программа будет просто распознавать речь (и сохранять аудио, если было включено). Этакий режим диктофона.
Вторая строка в настройке — исключительно для разбивки фраз. Можно подкручивать амплитуду голоса и длину паузы между фразами, если предложения режутся неаккуратно. В правом нижнем углу выводится статистика по текущему значению звука с флажками, показывающими определяется ли речь — специально для тонкой настройки.
Кстати, микрофон, если не в микшере, не ловится. В общем это не полноценная "запись разговора", а только того, что слышно через наушники/динамики.
Про размер модели whisper — уже говорил, — small, наверное, оптимальный вариант, температуру креативности на 0.1 — 0.2, качество звука на совещаниях обычно хорошее.
В общем такая получилась утилита для весьма узкого спектра использования, но может кому-то поможет в работе.
