VoiceToWrite / asr.py
Seicas's picture
Upload 10 files
41979e6 verified
raw
history blame
3.23 kB
import torch
import whisper
from ..config import settings
from typing import Dict, Any, Optional
import os
_model = whisper.load_model(settings.ASR_MODEL)
class MedicalASR:
def __init__(self, config: Dict[str, Any]):
"""
Tıbbi konuşma tanıma için ASR modülü
Args:
config: Yapılandırma parametreleri
- language: Dil kodu (örn. "tr")
- model: Kullanılacak model adı
- domain: Alan adı (tıp için "medical")
"""
self.config = config
self.language = config.get("language", "tr")
self.model_name = config.get("model", "whisper-large-v3")
# CUDA kullanılabilirse tercih et
self.device = "cuda" if torch.cuda.is_available() else "cpu"
# Modeli yükle
self.model = whisper.load_model(self.model_name, device=self.device)
# Türkçe tıbbi terim sözlüğü - gerçek bir uygulama için genişletilebilir
self.medical_terms = self._load_medical_terms()
def _load_medical_terms(self) -> Dict[str, str]:
"""Türkçe tıbbi terim sözlüğünü yükler"""
# Örnek: Bu fonksiyon bir dosyadan ya da veritabanından tıbbi terimleri yükleyebilir
return {
"ateş": "ateş",
"hipertansiyon": "hipertansiyon",
"miyokard infarktüsü": "miyokard infarktüsü",
# ... daha fazla tıbbi terim
}
def transcribe(self, audio_file: str, speaker_diarization: bool = True) -> Dict[str, Any]:
"""
Ses dosyasını transkribe eder
Args:
audio_file: Ses dosyasının yolu
speaker_diarization: Konuşmacı diyarizasyonu yapılsın mı
Returns:
Transkripsiyon sonuçları
"""
# Transkripsiyon için Whisper modelini kullan
transcribe_options = {
"language": self.language,
"task": "transcribe",
}
result = self.model.transcribe(audio_file, **transcribe_options)
# Tıbbi terimleri düzelt
corrected_text = self._correct_medical_terms(result["text"])
result["text"] = corrected_text
# Diyarizasyon isteniyorsa ekle
if speaker_diarization:
# Burada bir diyarizasyon kütüphanesi kullanılabilir (pyannote.audio gibi)
# Bu örnekte yapmıyoruz
pass
return result
def _correct_medical_terms(self, text: str) -> str:
"""
Transkribe edilmiş metindeki tıbbi terimleri düzeltir
Args:
text: Düzeltilecek metin
Returns:
Düzeltilmiş metin
"""
# Bu basit bir örnek - daha gelişmiş NLP teknikleri kullanılabilir
for term, correct_form in self.medical_terms.items():
# Basit string değiştirme - gerçek uygulamada daha sofistike olmalı
text = text.replace(term, correct_form)
return text
def transcribe_file(file_path: str) -> str:
result = _model.transcribe(file_path)
return result.get('text', '').strip()