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()