Комментарии 51
интересно решение!
я ранее пользовался для этого chatGPT платной версией)
еще из интересного - яндекс браузер умеет делать выжимки из видео, возможно, он также умеет и аудио (не пробовал). Но самый главный плюс описанного решения - что на локальной тачке и ИБ-шники не придут в гости))
А на каком железе это запустилось в итоге?
Вот, например, у меня на тумбочке Athlon 220ge и 32GB RAM (встроенное видео), а на столе ноутбук i5 gen10 (тоже встроенное видео). Под столом числодробилка на Xeon 2640 с 32GB (тут про виекарту даже немного стыдно упоминать. Ну 1GB RAM на видео карте вроде есть 😁).
Какие из приведенных Вами задач получится решить? И на чем?
Я запускал у себя на Ryzen 7 PRO 2700 + RTX 3060 (12GB).
Если кратко по устройствам, то я думаю, что
Athlon 220GE - потянет Whisper моедли tiny, может и base. С NeMo тоже справится, но медленно. Саммари LLM вряд ли уже получится
i5 gen10 - вполне можно делать транскрибацию и диаризацию, LLM — только небольшие, можно рассмотреть такую как - Mistral 7B q4
Xeon 2640 хороший CPU, NeMo и Whisper точно потянут, а вот Ollama + Gemma 27B, то только при наличии мощной видеокарты (12GB минимум).
Для саммари советую попробовать Llama3 8B или Mistral 7B . Они на CPU ещё кое-как идут
Так что вполне можно пройтись по всему флоу, но с меньшими моделями 🙌
А так можно заглянуть на оф репы, ссылки приложены в статье. Там есть таблицы по совместимости и размеру моделей
Попробуйте для STT Whisper с моделью large-v3-turbo. Она очень быстрая, на CPU должна приемлемо работать.
А для суммаризации - Saiga YandexGPT light 8B. На GPU очень быстро работает, на CPU тоже должно быть приемлемо.
Выглядит очень интересно, обязательно надо попробовать повторить
По сути всего лишь загружаешь аудио, но на выходе получаешь очень полезный краткий конспект с главными мыслями и задачами. Особенно удобно, если нужно быстро вспомнить, о чём договорились и если в этот момент была параллельная встреча
Отличная идея!
Я не понимаю, почему бы не тянуть сведения о том, кто говорил, напрямую с площадки переговоров (если переговоры онлайн, а это сейчас в 100% случаев так). Да хотя бы по визуальному отображению в Google Meet детектить кто говорил по таймингу и записывать это (если API не предоставляется). Там же можно подсмотреть и ник говорящего.
Логика понятная, но, к сожалению, не все площадки дают такие данные - у многих закрытые API или вообще нет экспорта говорящих.
А если запись пришла с телефона, диктофона или оффлайн-платформы - отследить, кто говорил, уже не получится
Диаризация по голосу универсальна, она по сути работает с любым аудиофайлом, независимо от источника.
Но идея про комбинирование с визуальными индикаторами - интересная, можно докрутить!)
Спасибо! 🙌🏽
Выглядит неплохо, теперь очень хочу попробовать повторить. Тем более это будет для твоего личного пользования, что очень важно в современном мире. Спасибо, за интересную статью! 🤗
А есть ли какие-либо готовые инструменты, чтобы записывать звук и всех членов конференции и говорящего на андройд? Можно прямо из вкладки в браузере без всяких клиентов Zoom и Толка. На desktop есть в браузере плагины, чтобы записывать звук вкладок, но вот в мобильных версиях такого не встречал.
Спасибо за вопрос)
На пк действительно куда проще, ведь есть плагины для записи звука вкладки, расширения и даже ffmpeg
На Android сложнее… Я не копал в эту сторону, думаю что будут нужны root права или какие либо сторонние приложения (надо поискать на форумах)
Из рабочих вариантов, которые мне видятся:
Использовать внешнюю запись микрофона (например, через диктофон)
Или подключать Android к пк и писать через OBS/ffmpeg уже с десктопа
Если найдёте обход, то поделитесь, очень интересно будет глянуть!)
EasyVoiceRecorder это умеет.
Если я правильно понял вопрос "записывать онлайн конференции на андроид" то рекомендую Cube Call Recorder ACR -- умеет писать звук как с телефонной линии, чаще всего, без рута, так и с многочисленных VoIP сервисов, в частности, Zoom
А не разбирались с направлением аудио потока на whisper? Я делаю примерно так же как и у вас, на ffmpeg так же настроен noise filter. И так как живая речь, подаваемая на ffmpeg и далее на whisper не постоянна, то whisper закрывает ws после того, как обнаруживает 3 секунды отсутствия речи. С одной стороны это хорошо, так как разгружает cpu (на whisper идет буферизированный поток байт по 8 секунд у меня, что создает большие интервалы idle для cpu). Однако, при повторной отправке байт приходится проверять статус ws соединения и при необходимости открывать его. Это работает стабильно, но мне не нравится, что я вынужден быть ведомым в работе с ws, фактически решение о закрытии соединения принимает whisper.
Спасибо, очень интересно!) 🙌🏽
У меня пока без WS - просто подача готовых файлов через transcribe().
Стримингом не занимался, но то, что Whisper сам закрывает соединение - интересно, и реально выглядит неудобно 🤔
Буду изучать в этом направлении, если прям «пальцем в небо», то может попробовать отправлять нулевые байты вместо тишины, чтобы Whisper не считал, что поток оборвался
Но если найдете стабильное решение, то обязательно поделитесь, будет полезно!)
прямо просится всё обернуть в docker compose, чтобы был единый сервис с .wav на входе и .md на выходе. : )
попробую у себя повторить, возможно сам и сделаю (но точно не в ближайшее время)
💯 да, прям в точку! Я сам тоже об этом думаю)
Если все таки сделаешь, уверен, получится очень удобный сервис) 🙌🏽
Ага, первая мысль была так сделать )
Было нечто подобное через телеграм, но там из-за ботоограничений, файл до 50Мб должен быть, поэтому и думал, как обойти лимит, а тут все уже продумали, остаётся упаковать. Спасибо автору
А чего до 50Мб? Это ж лимит на отправку файлов с бота к клиенту. От клиента в бот до 2Гб спокойно.
Да и лимит на отправку файлов с бота пользователю тоже можно обойти, на сколько я помню вплоть до 4Гб. Но для этого нужно устанавливать local bot api. Но с установкой справится и ребенок. Там прям совсем простая история.
Совсем не такая простая, виртуалке надо овердохрена оперативки что бы local bot api запустить и юзать. Проще оказалось сделать загрузчик снаружи. В боте нажимаешь на кнопку Upload и тебя перекидывает на веб сайт, там закачиваешь и перекидывает обратно в бота (через реферальную ссылку, ну то есть такой же механизм для передачи имени закаченного файла).
Да, с телеграм ботом идея рабочая, особенно если нужна мобильность, но тогда теряется приватность (всё равно в цепочке передачи). И верно подметили с ограничениями по объёму
Про local bot api тоже согласен, оперативки он ест прилично. Вариант с внешним загрузчиком выглядит, как разумный компромисс, если данные не сверхсекретные. Я так понимаю, что тут важно где именно хостится этот загрузчик и как долго там хранятся файлы
Но тут уже каждый подбирает под свои приоритеты: либо удобство, либо полная автономия и приватность
Я скорее о том, что вообще не понял, в чем проблема. Я на регулярной основе загружаю файлы по 1-2Гб. В обычный бот без Local Bot API. А если нужно отправить кому-то этот же файл без изменений то просто беру file_id и отправляю используя этот идентификатор.
Конечно, если вам нужно отправить измененный файл, тогда да. Или если файл более 2Гб занимает, тогда тоже понятно.
Но похоже я чего-то недопонимаю.
Без локального сервера бот может принять не больше 50мб, а без веб-хука не больше 20мб, телеграм больше не пропустит. Если он принимает больше значит это какой то юзер-бот, маскирующийся под человека.
Здесь вы не правы. Принять бот может до 2Гб. А те лимиты которые вы указали, они касаются только возможности отправлять файлы. Когда бот высылает пользователю.
А когда пользователь отправляет в бот - 2Гб
прекрасно!
Спасибо, отличная статья!
Здорово, что все делает один скрипт. Респект! У меня все по отдельности, и пока без диаризации.
Каждый день много встреч и, соответственно, масса входящей информации. Я пару лет пользуюсь Python-обёрткой над Whisper для пакетного распознавания файлов и восстановления пунктуации, которую сам сделал (лежит на GitHub).
Тема диаризации интересна, но на практике была не очень нужна, поэтому не занимался ею. Однако недавно стала нужна, так что разобрался c pyannote. Пока он выдает просто отдельный отчёт, но планирую скрестить с транскриптом и автоматически размечать в транскрипте, кто что сказал.
Для создания саммари пользуюсь отдельным скриптом, который работает в два этапа:
Извлекает из транскрипта список обсужденных вопросов.
По списку из п.1 и полному пранскрипту пишет протокол встречи.
Так получается стабильнее, чем в один этап (когда даже хорошая дорогая модель может упустить что-то важное). Если запись не конфиденциальная, использую Gemini 2.5 Flash. Если конфиденциальная - локальную Saiga YandexGPT 8B (быстро и качественно).
В Obsidian кладу саммари некоторых встреч. Для вопросов и ответов по протоколам использую AnythingLLM.
Xeon 2680v4 + RTX 3090 24GB
Спасибо большое, что поделились очень интересно!) 🙌🏽
У вас прямо мощный и продуманный стек, впечатляет. Особенно понравился подход с двухэтапной генерацией саммари для точности 👍🏼
Pyannote тоже хочу попробовать, пока использую NeMo, но интересно сравнить их по качеству
За Saiga и AnythingLLM спасибо - обязательно гляну, как раз собираю идеи для доработок и улучшений)
Есть обратное решение? Озвучить текст и записать в mp3 файлы? Большие тексты. Книги.
Желательно приличным голосом. В идеале из формата FB2.
Если не из рф то попробуй https://elevenreader.io/
Спасибо за вариант.
А для РФ и локально?
Поискать приличные модели TTS на hugging face и попросить DeepSeek/qwen написать python-скрипт, который делает это
Если как бесплатный аналог Elevenlabs, то для русского, пожалуй, самые удачные голоса от edge microsoft, можно оценить в самом браузере (многоязычные тоже подойдут). Если для ПК, то в балаболкe есть возможность подключить онлайн edge голоса через костыли. В word (включая мобильные версии) тоже должны работать edge голоса. Если про платные голоса, то, говорят, платные голоса яндекса хороши, но яндекс очень жадный, озвучивать книги будет накладно.
Если нужно локально, то в сети встречаются разные сборки Demagog + Silero, а из открытых решений есть piper-tts (похуже качество, но быстро), остальные варианты гораздо медленнее.
Я тоже недавно решал такую задачу, и в целях улучшения качества распознавания еще просил LLM вычитать транскрипт и поправить ошибки распознавания. В большинстве случаев это повышает качество текста.
Да, отличная идея, спасибо!) 👍
Я слышал, что можно просить LLM не только вычитать ошибки, но и адаптировать текст под контекст встречи, например задать жаргоны, термины и т.п.
Надо будет поэкперементировать, интересно сравнить итоговые варианты
еще кого нибудь бесит слово саммари? или это только я так реагирую. после того как выучил английский язык, бережнее стал относится к русскому. англицизмы это одно а саммари это какой то пиджн инглиш
Я просто записываю аудио в файл. Потом даю его Whisper через простенький скрипт на Питоне (drag-n-drop). Потом даю Ламе (drag-n-drop в LM Studio). И нормально всё, даже если несколько человек. Причём normal модель в Whisper хорошо справляется. Всё на ноуте с 13700 и 4060.
Попробуйте прочитать здесь ответы TC.
Ощущение, что отвечает AI
Добрый день, Вадим! Я живой системный аналитик, как и вы, но, возможно, мы в целом все в матрице, кто знает...
На входе аудио, на выходе — саммари. Собираем локальный транскрибатор из бесплатного софта