AAYMA
RU
Войти

MeetingMind

Локальное Streamlit-приложение: аудиозапись совещания превращается в транскрипт с метками времени и спикеров, саммари, поручения с ответственными и…

Рабочий MVP
Команда «Qwerty» 25💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: Qwerty
Кейс HackAlem.ai: Инновации — Самрук-Казына
Стадия: Рабочий MVP

Задача кейса: «Хаттама»: протокол и поручения по аудиозаписи совещания (каз./рус./смешанная речь)

Суть

Локальное Streamlit-приложение: аудиозапись совещания превращается в транскрипт с метками времени и спикеров, саммари, поручения с ответственными и сроками, оценку качества и экспорт в DOCX/PDF/JSON.

Как устроено

Аудио (MP3/WAV/M4A/MP4) транскрибируется локально через Faster-Whisper с автоопределением или ручным выбором языка. Диаризация идёт через pyannote с эвристическим акустическим fallback, есть память голосовых профилей. Детерминированный анализатор извлекает поручения, ответственных, сроки и саммари; при включённой опции то же делает Ollama (qwen2.5:7b). Валидатор качества выводит предупреждения, пользователь правит транскрипт и пересчитывает поручения.

Ключевые решения

  • Faster-Whisper
  • pyannote-диаризация
  • эвристическая fallback-диаризация
  • голосовые профили
  • определение говорящего по обращению
  • правиловое извлечение поручений
  • анонимизация транскрипта

Особенности

Всё работает офлайн: Ollama и pyannote опциональны, есть детерминированный fallback. Встроены валидатор качества протокола и инструмент анонимизации транскрипта.

Стек

Python · Streamlit · Ollama

Модели

Faster-Whisper · pyannote.audio · Qwen2.5 7B via Ollama


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-6776da01-qwerty.

README

README.md

MeetingMind — автопротоколирование совещаний

Локальный AI-инструмент для превращения аудиозаписи совещания в готовый протокол: транскрипт, краткое саммари, поручения, ответственные, сроки и экспорт в DOCX/PDF/JSON.

Проект создан для HackAlem AI. Все основные операции выполняются на компьютере пользователя: аудио и текст не отправляются во внешние облачные API.

Что умеет приложение

  • принимает записи MP3, WAV, M4A и MP4;
  • распознаёт русскую, казахскую и смешанную речь через локальную модель Faster-Whisper;
  • поддерживает автоматическое определение языка и ручной выбор языка записи;
  • формирует транскрипт с временными метками;
  • разделяет реплики по спикерам и создаёт метки SPEAKER_00, SPEAKER_01 и далее;
  • пытается определить число спикеров автоматически при настроенной локальной модели pyannote;
  • использует локальный fallback, если полноценная диаризация недоступна;
  • позволяет вручную сопоставить технические метки с ФИО участников;
  • находит поручения, ответственных и сроки по содержанию разговора;
  • формирует краткое саммари совещания;
  • показывает оценку качества протокола и предупреждения о возможных ошибках;
  • позволяет исправить транскрипт и пересчитать поручения;
  • формирует локальные напоминания ответственным;
  • экспортирует протокол в DOCX, PDF и структурированный JSON;
  • поддерживает необязательный локальный анализ через Ollama.

Быстрый запуск на Windows

Откройте командную строку и перейдите в папку, где находится этот репозиторий:

cd /d "путь\к\hack-6776da01-qwerty"

Создайте виртуальное окружение и установите зависимости:

py -m venv .venv
call .venv\Scripts\activate
python -m pip install -r requirements.txt

Запустите веб-интерфейс:

python -m streamlit run app\main.py

После запуска откройте адрес http://localhost:8501.

При первом использовании Faster-Whisper скачает выбранную модель в локальный кэш. Для обычного CPU рекомендуется модель small; medium обычно точнее, но заметно медленнее и требует больше памяти.

Как пользоваться

  1. Загрузите аудиозапись совещания.
  2. Подтвердите, что участники уведомлены о записи и локальной обработке.
  3. Выберите размер модели и язык записи.
  4. Оставьте режим Авто: pyannote + fallback или включите демо-разметку для презентации.
  5. Нажмите Создать протокол.
  6. Проверьте саммари, транскрипт, имена спикеров, поручения и сроки.
  7. При необходимости измените строки транскрипта или статусы задач.
  8. Используйте вкладки Результат, Транскрипт и Экспорт.
  9. Скачайте DOCX, PDF или JSON на вкладке Экспорт.

Интерфейс

По умолчанию открывается тёмная тема MeetingMind. В боковой панели можно переключиться на светлую тему. На главном экране отображаются локальный статус обработки, загрузка новой записи и краткое описание форматов результата.

Демо-режим спикеров

Демо-разметка по очереди циклически назначает сегментам выбранное количество меток SPEAKER_00–SPEAKER_05. Этот режим нужен для демонстрации интерфейса и не является настоящим определением голоса.

Для реального определения говорящих используйте автоматический режим. Он пытается применить pyannote, а при отсутствии настроенной модели использует локальный акустический fallback. Даже при успешном разделении голоса имена участников нужно проверить вручную.

Необязательный локальный AI-анализ

Для более глубокого извлечения поручений можно установить Ollama и модель, работающую на этом же компьютере:

ollama pull qwen2.5:7b

Запустите Ollama, включите в боковой панели Умный локальный анализ, затем сформируйте протокол. Если Ollama недоступна, приложение автоматически использует встроенный детерминированный анализатор.

Ожидаемый локальный адрес Ollama: http://127.0.0.1:11434.

Полноценная локальная диаризация

Для более точного определения числа и границ реплик можно отдельно установить pyannote.audio, локальную модель и настроить токен доступа к checkpoint:

pip install pyannote.audio
set HF_TOKEN=ваш_токен

Токен нужен только для загрузки разрешённого checkpoint в локальный кэш. Само аудио приложение не отправляет в облако. Установка pyannote тяжёлая и не обязательна для запуска MVP.

Архитектура

app/main.py                 Streamlit-интерфейс и сценарий пользователя
app/transcription.py        Faster-Whisper, язык, сегменты и спикеры
app/analyzer.py             Поручения, ответственные, сроки, саммари
app/local_llm.py            Необязательный вызов Ollama на localhost
app/quality/                Проверка полноты и качества протокола
app/privacy/                Локальная анонимизация текста
app/exporter.py             Экспорт в DOCX
app/pdf_exporter.py         Экспорт в PDF с поддержкой кириллицы
tools/                      Служебные скрипты и проверка демо-данных
samples/                    Небольшой обезличенный пример транскрипта

Поток обработки:

Аудио → локальная транскрибация → диаризация → анализ поручений
      → саммари и контроль качества → ручная проверка → DOCX/PDF/JSON

Проверка без запуска интерфейса

Проверить встроенный анализатор на демонстрационном протоколе:

py tools\evaluate_demo.py samples\expected\demo_protocol.json

Получить текстовую расшифровку локального аудиофайла:

py -c "from app.transcription import transcribe_audio, segments_to_text; print(segments_to_text(transcribe_audio('meeting.mp3', 'small')))"

Конфиденциальность

  • аудио, транскрипт и созданные документы остаются локально;
  • внешние API для распознавания и анализа не используются;
  • локальные голосовые профили сохраняются только в data/voice_profiles.json;
  • секреты и локальные данные не должны добавляться в Git;
  • перед обработкой пользователь должен уведомить участников записи.

Подробности: docs/privacy.md.

Ограничения MVP

  • распознавание зависит от качества записи, шума и смешения голосов;
  • fallback-диаризация является эвристикой и может ошибаться на длинных репликах и похожих голосах;
  • SPEAKER_XX — техническая метка, а не подтверждённая личность;
  • автоматическое извлечение поручений требует проверки человеком перед отправкой;
  • для CPU модель medium может работать долго;
  • полноценная pyannote-диаризация и голосовые профили требуют дополнительной установки тяжёлых зависимостей.

Поэтому приложение специально показывает предупреждения качества и оставляет пользователю финальную проверку протокола.

Лицензия и статус

Прототип для хакатона HackAlem AI. Перед промышленным внедрением потребуются тестовый набор записей, оценка качества распознавания, разграничение доступа и интеграция с корпоративной СЭД.

Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
63
Авторы
5
Файлы
21
Ветки
9

Авторы коммитов

Islam 29dimachyy 19HackAlem Team 8ErgazinovAknur 4dimachyy 3

История коммитов

  • 2026-09-23 17:54Актуализирована документация перед проверкойIslam
  • 2026-09-23 17:50Исправлена настоящая тёмная темаIslam
  • 2026-09-23 17:49Создан новый дизайн MeetingMindIslam
  • 2026-09-23 17:45Обновлён компактный дизайн MeetingMindIslam
  • 2026-09-23 17:42Возвращён переключатель темы MeetingMindIslam
  • 2026-09-23 17:40Возвращён дизайн MeetingMind без брендингаIslam
  • 2026-09-23 17:35Align Windows setup guide with current interfacedimachyy
  • 2026-09-23 17:34Merge remote-tracking branch 'origin/main'dimachyy
Все коммиты (63)
  • 2026-09-23 17:34Make corporate navigation functional and default to dark themedimachyy
  • 2026-09-23 17:32Обновлена документация проекта на русскомIslam
  • 2026-09-23 17:28Complete dark theme styling for sidebardimachyy
  • 2026-09-23 17:26Add light and dark corporate interface themesdimachyy
  • 2026-09-23 17:21Merge remote-tracking branch 'origin/main'dimachyy
  • 2026-09-23 17:19Merge clean interface labels into Samruk-Kazyna designdimachyy
  • 2026-09-23 17:17Merge pull request #13 from BAITC-Hacks/audioErgazinovAknur
  • 2026-09-23 17:17Merge branch 'main' into audioErgazinovAknur
  • 2026-09-23 17:14Merge audio improvements while preserving corporate workflowdimachyy
  • 2026-09-23 17:14Merge latest automatic diarization settings into corporate interfacedimachyy
  • 2026-09-23 17:11Добавлен автоматический режим диаризацииIslam
  • 2026-09-23 17:08Finalize Samruk-Kazyna interface labelsdimachyy
  • 2026-09-23 17:05Улучшена логика определения участников по диалогуHackAlem Team
  • 2026-09-23 17:05Resolve main conflict with latest repository changesdimachyy
  • 2026-09-23 17:03Remove decorative emoji from corporate interfacedimachyy
  • 2026-09-23 17:03Возвращён дизайн MeetingMind и улучшено разделение спикеровIslam
  • 2026-09-23 17:02Add Samruk-Kazyna corporate context and news paneldimachyy
  • 2026-09-23 16:55Оформлен интерфейс в стиле Samruk-KazynaIslam
  • 2026-09-23 16:53Адаптирован дизайн под стиль Samruk-KazynaIslam
  • 2026-09-23 16:52Стабилизирована транскрибация и диаризацияHackAlem Team
  • 2026-09-23 16:51Добавлен выбор языка для улучшения распознаванияIslam
  • 2026-09-23 16:46Добавлен локальный AI анализ протоколовIslam
  • 2026-09-23 16:44Merge pull request #11 from BAITC-Hacks/codex/speed-up-first-rundimachyy
  • 2026-09-23 16:43Speed up first run by making voice profiles optionaldimachyy
  • 2026-09-23 16:37Обновлён дизайн веб-интерфейсаIslam
  • 2026-09-23 16:37Clean interface labels and summary headingsdimachyy
  • 2026-09-23 16:18Повышена точность транскрибации и памяти голосовHackAlem Team
  • 2026-09-23 16:15Merge pull request #9 from BAITC-Hacks/codex/meeting-quality-improvementsdimachyy
  • 2026-09-23 16:13Improve speaker mapping summaries and deadline notificationsdimachyy
  • 2026-09-23 16:10Improve speaker mapping summaries and review flowdimachyy
  • 2026-09-23 15:55Merge pull request #7 from BAITC-Hacks/audioyedenov
  • 2026-09-23 15:49Добавлена память голосовых профилейHackAlem Team
  • 2026-09-23 15:41Merge pull request #8 from BAITC-Hacks/codex/quality-controldimachyy
  • 2026-09-23 15:39Add local transcript anonymization tooldimachyy
  • 2026-09-23 15:37Улучшен анализ поручений и ручная проверка транскриптаIslam
  • 2026-09-23 15:37Add protocol quality validation toolsdimachyy
  • 2026-09-23 15:31Merge branch 'main' into audioErgazinovAknur
  • 2026-09-23 15:29Исправлено извлечение поручений и улучшен дизайнIslam
  • 2026-09-23 15:27Добавлена зависимость для PDF экспортаHackAlem Team
  • 2026-09-23 15:22Добавлено определение говорящего по обращениюHackAlem Team
  • 2026-09-23 15:12Завершён веб-прототип автопротоколированияIslam
  • 2026-09-23 15:02Merge pull request #6 from BAITC-Hacks/analysisyedenov
  • 2026-09-23 15:02Оформлен финальный веб-интерфейсIslam
  • 2026-09-23 14:59Merge pull request #5 from BAITC-Hacks/analysisyedenov
  • 2026-09-23 14:58Добавлен JSON экспорт и предупреждение о диаризацииIslam
  • 2026-09-23 14:58Merge pull request #4 from BAITC-Hacks/analysisyedenov
  • 2026-09-23 14:54Исправлено локальное разделение говорящихHackAlem Team
  • 2026-09-23 14:50Улучшено извлечение поручений и саммариIslam
  • 2026-09-23 14:22Merge pull request #3 from BAITC-Hacks/audioErgazinovAknur
  • 2026-09-23 14:20Улучшена локальная транскрибация и диаризацияHackAlem Team
  • 2026-09-23 14:16Merge pull request #2 from BAITC-Hacks/interfaceyedenov
  • 2026-09-23 14:14Улучшен интерфейс протоколаIslam
  • 2026-09-23 14:04Merge pull request #1 from BAITC-Hacks/interfaceyedenov
  • 2026-09-23 14:03Добавлен gitignoreIslam
  • 2026-09-23 14:01Добавлен рабочий прототип автопротоколированияIslam
Структура репозитория (21 файлов)
.gitignore
.streamlit/config.toml
README.md
app/__init__.py
app/analyzer.py
app/exporter.py
app/local_llm.py
app/main.py
app/pdf_exporter.py
app/privacy/__init__.py
app/privacy/anonymizer.py
app/quality/__init__.py
app/quality/validator.py
app/transcription.py
docs/privacy.md
docs/quality-check.md
requirements.txt
samples/demo_transcript.txt
samples/expected/demo_protocol.json
tools/anonymize_transcript.py
tools/evaluate_demo.py
Ветки (9)

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.