О проекте
Команда: 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.mdMeetingMind — автопротоколирование совещаний
Локальный 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 обычно точнее, но заметно медленнее и требует больше памяти.
Как пользоваться
- Загрузите аудиозапись совещания.
- Подтвердите, что участники уведомлены о записи и локальной обработке.
- Выберите размер модели и язык записи.
- Оставьте режим
Авто: pyannote + fallbackили включите демо-разметку для презентации. - Нажмите Создать протокол.
- Проверьте саммари, транскрипт, имена спикеров, поручения и сроки.
- При необходимости измените строки транскрипта или статусы задач.
- Используйте вкладки Результат, Транскрипт и Экспорт.
- Скачайте 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. Перед промышленным внедрением потребуются тестовый набор записей, оценка качества распознавания, разграничение доступа и интеграция с корпоративной СЭД.
Авторы коммитов
История коммитов
- 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
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.