Medical Transcriber - GUI Application
📋 Архитектура приложения
Medical Transcriber
│
├── 🎨 GUI Layer (PyQt6)
│ └── app/gui_app.py - Главное окно, вкладки, диалоги
│
├── 🔄 Pipeline Integration
│ ├── pipeline/medical_pipeline.py - Оркестрация STT + KB + LLM
│ ├── pipeline/pipeline_config.py - Конфигурация
│ │
│ ├── stt/whisper_transcriber.py - Транскрибирование аудио
│ ├── knowledge_base/ - База медицинских терминов
│ ├── corrector/ - LLM коррекция
│ └── corrector/report_generator.py - DOCX отчётность
│
├── 🧩 Common Utilities (готово к интеграции)
│ ├── common/exceptions.py - Кастомные исключения
│ ├── common/constants.py - Константы приложения
│ ├── common/logger.py - Централизованное логирование
│ ├── common/models.py - Модели данных
│ └── common/validators.py - Валидация данных
│
├── 🚀 Entry Points
│ ├── run_gui.py - Запуск GUI
│ ├── app/main.py - CLI для полного пайплайна (transmed)
│ ├── build_exe.py - Сборка Windows .exe
│ └── build_windows.spec - PyInstaller конфигурация
│
└── 📚 Documentation
├── USER_GUIDE.md - Руководство пользователя
├── BUILD_EXE.md - Инструкции по сборке
└── README.md - Общая информация
🎯 Основные компоненты GUI
1. Главное окно (MedicalTranscriptionApp)
- Приложение на PyQt6
- Две основные вкладки
- Кроссплатформенное (Windows, Linux, macOS)
2. Вкладка "Транскрибирование"
- Выбор аудиофайла
- Ввод данных пациента (диалог)
- Опции обработки (чекбоксы)
- Прогресс-бар
- Вывод результатов
3. Вкладка "Настройки"
- Параметры Whisper (модель, устройство, тип данных)
- OpenRouter API ключ
- Путь к базе медицинских терминов
4. Многопоточность (Worker/QThread)
- Длительные операции не блокируют UI
- Сигналы для обновления прогресса
- Обработка ошибок
🔌 Интеграция с пайплайном
Поток обработки:
┌─────────────────────┐
│ Выбор аудиофайла │
└──────────┬──────────┘
│
▼
┌─────────────────────────┐
│ Заполнение данных │
│ пациента │
└──────────┬──────────────┘
│
▼
┌──────────────────────────────┐
│ TranscriptionWorker (QThread)│
│ ┌──────────────────────────┐ │
│ │ 1. STT (Whisper) │ │
│ │ ▼ │ │
│ │ 2. Knowledge Base Check │ │
│ │ ▼ │ │
│ │ 3. LLM Correction │ │
│ │ ▼ │ │
│ │ 4. Report Generation │ │
│ └──────────────────────────┘ │
└──────────┬──────────────────┘
│
▼
┌────────────────────────────┐
│ Результаты и сохранение │
│ JSON + DOCX │
└────────────────────────────┘
🔄 Использование TranscriptionWorker
# Создание воркера
worker = TranscriptionWorker(
audio_path="path/to/audio.wav",
config=PipelineConfig(...),
patient_data={
"patient_name": "ФИО",
"patient_dob": "дата",
...
}
)
# Подключение сигналов
worker.signals.progress.connect(callback_progress)
worker.signals.finished.connect(callback_finished)
worker.signals.error.connect(callback_error)
# Запуск
worker.start()
📊 Структура результатов
Возвращаемый словарь process():
{
"timestamp": "2026-01-16T12:05:30",
"audio_file": "path/to/audio.wav",
"status": "success",
"transcription_original": "...",
"transcription_corrected": "...",
"corrections": [...],
"report_path": "path/to/report.docx",
"pipeline_steps": [
{
"step": "stt",
"status": "success",
"output_length": 5000
},
...
]
}
🛠 Сборка Windows .exe
Требования:
- Python 3.9+
- PyInstaller
- Все зависимости (requirements.txt)
Команда:
python build_exe.py
Результат:
dist/
└── MedicalTranscriber.exe (~500 МБ - 1.5 ГБ)
🎨 Кастомизация UI
Изменение стилей:
# В методе apply_styles() в MedicalTranscriptionApp
style = """
QMainWindow {
background-color: #f5f5f5;
}
...
"""
self.setStyleSheet(style)
Добавление новых вкладок:
# В методе init_ui()
new_tab = self.create_new_tab()
tabs.addTab(new_tab, "Новая вкладка")
📁 Файловая структура при использовании
Trans_for_doctors/
├── run_gui.py
├── medical_terms.txt
├── app_config.json - Конфигурация приложения
├── whisper_model_config.json - Конфигурация модели Whisper
├── model.safetensors
├── tokenizer_config.json
├── .env - API ключи (НЕ коммитится)
├── .env.example - Пример файла с ключами
│
├── results/
│ ├── result_20260116_120530.json
│ ├── result_20260116_120530_corrected.json
│ └── reports/
│ └── report_20260116_120530.docx
│
└── logs/
└── transcription_20260116_120530.log
🧩 Модуль Common (интегрирован в код)
Проект включает модуль common/ с утилитами, теперь интегрированными во все модули:
Компоненты модуля:
exceptions.py - Кастомные исключения
MedicalTranscriberException- базовый классAudioFileException,TranscriptionExceptionCorrectionException,ReportGenerationExceptionAPIException,ValidationException
constants.py - Централизованные константы
UIColors,UIDimensions- настройки интерфейсаAudioFormats,ModelDefaults- конфигурацияMessages,Placeholders- текстовые константы
logger.py - Логирование
configure_logging()- настройка логгераget_logger()- получение логгера для модуля
models.py - Модели данных
PipelineResult,PatientMetadataTranscriptionResult
validators.py - Валидация
- Проверка аудиофайлов, API ключей
- Валидация данных пациента
Статус: ✅ Модуль полностью интегрирован в app/gui_app.py, pipeline/medical_pipeline.py, corrector/llm_corrector.py, stt/whisper_transcriber.py
🔐 Сохранность данных
Где сохраняются результаты:
JSON файлы -
results/папка- Содержат текст транскрипции и коррекции
- Сохраняются с временной меткой
DOCX отчёты -
results/reports/папка ✓ СОЗДАНА- Готовые к использованию документы
- Названы по ФИО пациента или номеру исследования
- Папка автоматически создаётся при инициализации
Логи -
logs/папка- Полная информация о ходе обработки
- Полезны для отладки ошибок
Конфиденциальность:
- Все данные остаются на локальном компьютере
- API ключ передаётся через HTTPS (OpenRouter)
- Вы контролируете где сохраняются результаты
🚀 Запуск и отладка
Запуск в консоли для отладки:
python run_gui.py
- Видны все логи в консоли
- Видны ошибки и предупреждения
- Легче найти проблемы
Запуск скомпилированного .exe:
dist\MedicalTranscriber.exe
- Логи сохраняются в папку
logs/ - Без консоли на экране
🔧 Возможные улучшения
Пакетная обработка
- Обработка нескольких файлов за раз
Шаблоны отчётов
- Кастомные DOCX шаблоны
История операций
- Сохранение истории последних обработок
Встроенный плеер
- Проигрывание аудио перед обработкой
Темизирование
- Светлая/тёмная тема
Синхронизация
- Облачное сохранение результатов
📞 Контакты и поддержка
Для вопросов или предложений:
- Проверьте логи в папке
logs/ - Смотрите
USER_GUIDE.mdдля типичных проблем - Проверьте
BUILD_EXE.mdдля проблем со сборкой
Приложение готово к использованию! ✨