# STT Module Модуль транскрибации речи в текст (Speech-to-Text) на базе Whisper. ## Структура ``` stt/ ├── __init__.py # Экспорты модуля ├── whisper_transcriber.py # Основной класс транскрибера ├── audio_processor.py # Обработка аудио └── README.md # Документация ``` ## WhisperTranscriber Основной класс для транскрибации медицинских диктовок. ### Возможности - ✅ Поддержка GPU/CPU - ✅ Локальные модели Whisper - ✅ Медицинские промпты для улучшения точности - ✅ Различные форматы аудио (wav, mp3, flac и др.) - ✅ Временные метки (timestamps) - ✅ Автоматический выбор устройства ## Примеры использования ### Базовая транскрибация ```python from stt import WhisperTranscriber from pathlib import Path # Инициализация transcriber = WhisperTranscriber( model_path=Path("./"), # путь к папке с моделью device="auto", # auto, cuda, cpu dtype="float32", # float32, float16, bfloat16 language="russian" ) # Транскрибация файла result = transcriber.transcribe_file( audio_path=Path("audio.wav") ) print(f"Текст: {result['text']}") ``` ### С медицинским промптом ```python from stt import WhisperTranscriber from knowledge_base import MedicalTermManager # Загружаем медицинские термины term_manager = MedicalTermManager("medical_terms.txt") medical_prompt = term_manager.get_terms_as_text() # Инициализация транскрибера transcriber = WhisperTranscriber(model_path=Path("./")) # Транскрибация с промптом result = transcriber.transcribe_file( audio_path=Path("medical_dictation.wav"), medical_prompt=medical_prompt ) print(result['text']) ``` ### С временными метками ```python result = transcriber.transcribe_file( audio_path=Path("audio.wav"), return_timestamps=True ) print(f"Текст: {result['text']}") print(f"Временные метки:") for chunk in result['timestamps']: print(f" {chunk['timestamp']}: {chunk['text']}") ``` ### Обработка аудио ```python from stt import load_audio, resample_audio, get_audio_duration # Загрузка аудио audio = load_audio(Path("audio.wav"), sr=16000) # Получить длительность duration = get_audio_duration(audio, sr=16000) print(f"Длительность: {duration:.2f} сек") # Ресемплинг audio_resampled = resample_audio(audio, orig_sr=16000, target_sr=8000) ``` ### Информация о модели ```python transcriber = WhisperTranscriber(model_path=Path("./")) info = transcriber.get_model_info() print(f"Модель: {info['model_path']}") print(f"Устройство: {info['device']}") print(f"CUDA доступна: {info['cuda_available']}") if info['cuda_device_name']: print(f"GPU: {info['cuda_device_name']}") ``` ## Интеграция с pipeline ```python from stt import WhisperTranscriber from knowledge_base import MedicalTermManager from corrector import MedicalLLMCorrector # Шаг 1: Загрузка медицинских терминов term_manager = MedicalTermManager("medical_terms.txt") medical_prompt = term_manager.get_terms_as_text() # Шаг 2: STT транскрибация transcriber = WhisperTranscriber(model_path=Path("./")) stt_result = transcriber.transcribe_file( audio_path=Path("dictation.wav"), medical_prompt=medical_prompt ) original_text = stt_result['text'] print(f"STT: {original_text}") # Шаг 3: LLM коррекция corrector = MedicalLLMCorrector() corrector.medical_terms = medical_prompt corrected_text, corrections = corrector.correct_transcription(original_text) print(f"LLM: {corrected_text}") print(f"Исправлений: {len(corrections)}") ``` ## Параметры WhisperTranscriber ### __init__ - `model_path` (Path): Путь к папке с моделью Whisper - `device` (str): Устройство для вычислений - `"auto"` - автоматический выбор (CUDA > MPS > CPU) - `"cuda"` - NVIDIA GPU - `"cpu"` - Процессор - `dtype` (str): Тип данных - `"float32"` - полная точность (медленнее, но точнее) - `"float16"` - половинная точность (быстрее, GPU) - `"bfloat16"` - brain float (оптимально для новых GPU) - `language` (str): Язык транскрибации (по умолчанию "russian") ### transcribe / transcribe_file - `audio` / `audio_path`: Аудио данные или путь к файлу - `medical_prompt` (Optional[str]): Медицинский промпт для улучшения точности - `return_timestamps` (bool): Возвращать временные метки ## Audio Processor Functions ### load_audio(audio_path, sr=16000) Загрузить аудио файл с автоматическим ресемплингом. ### resample_audio(audio, orig_sr, target_sr) Изменить частоту дискретизации. ### get_audio_duration(audio, sr=16000) Получить длительность аудио в секундах. ### validate_audio(audio_path) Проверить валидность аудио файла. ## Поддерживаемые форматы аудио - WAV - MP3 - FLAC - OGG - M4A - WMA Все форматы автоматически конвертируются в нужную частоту дискретизации (16000 Hz). ## Требования ``` torch>=2.3.0 transformers>=4.44.0 librosa>=0.10.2 soundfile>=0.12.1 ``` ## Производительность ### GPU (CUDA) - float16: ~10x быстрее CPU - bfloat16: оптимально для A100/H100 ### CPU - float32: высокая точность, медленно - Рекомендуется для небольших файлов ## Troubleshooting ### CUDA out of memory Используйте `dtype="float16"` или уменьшите размер аудио. ### Низкая точность транскрибации 1. Добавьте медицинский промпт 2. Проверьте качество аудио 3. Используйте более крупную модель Whisper