Trans_for_doctors / stt /README.md
Mintik24's picture
🎉 Полный рефакторинг проекта Medical Transcriber
e275025
# 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