Spaces:
Running
Running
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() | |