dobrovolskiy.com
EN
← все проектыAI · 2026

Whisper на аудио из RTSP

Три прототипа, превращающие RTSP-аудио IP-камеры в живой русский текст с помощью Whisper — облако, whisper.cpp и CTranslate2

Двухдневный эксперимент по распознаванию речи в реальном времени из аудиопотока камеры видеонаблюдения.

Двухдневный эксперимент по распознаванию речи в реальном времени из аудиопотока камеры видеонаблюдения.

Три варианта используют один и тот же прием RTSP через ffmpeg: консольное приложение на .NET 9, отправляющее WAV-фрагменты в API транскрипции OpenAI со скользящим контекстным промптом, офлайн-вариант на .NET, вызывающий локальный CLI whisper.cpp, и многопоточный пайплайн на C++ (кольцевой буфер, VAD по энергии, буферизация фраз, стабилизатор частичных/финальных транскриптов), который общается с постоянно живущим Python-воркером faster-whisper/CTranslate2 через stdin/stdout.

Что умеет

  • Подпроцесс ffmpeg принимает RTSP-аудио и нарезает его на 15-секундные моно WAV-фрагменты 16 кГц (или сырой PCM для варианта на C++)
  • Облачный путь: POST /v1/audio/transcriptions (whisper-1) с подсказкой языка и скользящим промптом из предыдущих транскриптов для связности
  • Офлайн-путь A: запуск whisper-cli.exe из whisper.cpp с локальной ggml-моделью, флагами потоков/GPU
  • Офлайн-путь B (C++): RingBuffer + VAD по RMS-энергии + окна фраз, постоянный Python-воркер ASR с однократной загрузкой модели, протокол запрос/ответ в base64 с табуляцией, рукопожатие через ready-файл
  • TranscriptStabilizer выдает обновления [PARTIAL] и фиксирует текст [FINAL]; вывод в консоль в отдельном потоке
  • Вся конфигурация через аргументы CLI и переменные окружения (RTSP URL, путь к ffmpeg, модель, язык, размер фрагмента)

Сравнение трех стратегий развертывания ASR (облачный API, CLI whisper.cpp, CTranslate2 через faster-whisper) при единой схеме приема. Вариант на C++ демонстрирует правильную потоковую архитектуру: потокобезопасные очереди, буфер фраз с VAD, стабилизацию частичных/финальных результатов и долгоживущий процесс модели вместо запуска на каждый фрагмент. Маленький и неотшлифованный (уровень прототипа, учетные данные зашиты в значения по умолчанию).

Нужно что-то похожее?

Делаю это вживую на звонке в Zoom / Яндекс Телемост, вы смотрите на экран, таймер останавливается по вашему слову. Первые 15 минут бесплатно.

Ещё проекты

FreeGAD: Claude внутри FreeCADИнженерный ассистент на базе Claude, живущий внутри FreeCAD.AutoGAD: Claude внутри AutoCADLLM-агент, пристыкованный внутри AutoCAD 2025, который читает, проверяет и правит открытые чертежи.Evac: детектор эвакуаторовСобственноручно обученный YOLO-детектор эвакуаторов на RTSP-камерах с бессерверной сетью на libp2p.