Seicas commited on
Commit
0e902f8
·
verified ·
1 Parent(s): 36ae77b

Update asr.py

Browse files
Files changed (1) hide show
  1. asr.py +56 -29
asr.py CHANGED
@@ -1,10 +1,11 @@
1
  import torch
2
  import whisper
3
- from ..config import settings
4
  from typing import Dict, Any, Optional
5
  import os
6
-
7
- _model = whisper.load_model(settings.ASR_MODEL)
 
 
8
 
9
  class MedicalASR:
10
  def __init__(self, config: Dict[str, Any]):
@@ -27,8 +28,11 @@ class MedicalASR:
27
  # Modeli yükle
28
  self.model = whisper.load_model(self.model_name, device=self.device)
29
 
30
- # Türkçe tıbbi terim sözlüğü - gerçek bir uygulama için genişletilebilir
31
- self.medical_terms = self._load_medical_terms()
 
 
 
32
 
33
  def _load_medical_terms(self) -> Dict[str, str]:
34
  """Türkçe tıbbi terim sözlüğünü yükler"""
@@ -40,54 +44,77 @@ class MedicalASR:
40
  # ... daha fazla tıbbi terim
41
  }
42
 
43
- def transcribe(self, audio_file: str, speaker_diarization: bool = True) -> Dict[str, Any]:
44
  """
45
  Ses dosyasını transkribe eder
46
 
47
  Args:
48
  audio_file: Ses dosyasının yolu
49
  speaker_diarization: Konuşmacı diyarizasyonu yapılsın mı
 
50
 
51
  Returns:
52
  Transkripsiyon sonuçları
53
  """
54
- # Transkripsiyon için Whisper modelini kullan
 
 
 
 
 
 
55
  transcribe_options = {
56
  "language": self.language,
57
  "task": "transcribe",
 
 
 
 
58
  }
59
 
60
- result = self.model.transcribe(audio_file, **transcribe_options)
61
 
62
- # Tıbbi terimleri düzelt
63
  corrected_text = self._correct_medical_terms(result["text"])
64
  result["text"] = corrected_text
65
 
66
- # Diyarizasyon isteniyorsa ekle
67
  if speaker_diarization:
68
- # Burada bir diyarizasyon kütüphanesi kullanılabilir (pyannote.audio gibi)
69
- # Bu örnekte yapmıyoruz
70
- pass
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
 
72
  return result
73
 
74
  def _correct_medical_terms(self, text: str) -> str:
75
- """
76
- Transkribe edilmiş metindeki tıbbi terimleri düzeltir
77
-
78
- Args:
79
- text: Düzeltilecek metin
80
-
81
- Returns:
82
- Düzeltilmiş metin
83
- """
84
- # Bu basit bir örnek - daha gelişmiş NLP teknikleri kullanılabilir
85
- for term, correct_form in self.medical_terms.items():
86
- # Basit string değiştirme - gerçek uygulamada daha sofistike olmalı
87
- text = text.replace(term, correct_form)
88
-
89
- return text
90
 
 
91
  def transcribe_file(file_path: str) -> str:
 
 
 
92
  result = _model.transcribe(file_path)
93
- return result.get('text', '').strip()
 
1
  import torch
2
  import whisper
 
3
  from typing import Dict, Any, Optional
4
  import os
5
+ from .preprocessing import clean_audio
6
+ from .diarization import diarize_segments
7
+ from .medical_terms import load_turkish_medical_terms
8
+ from .advanced_term_correction import MedicalTermCorrector
9
 
10
  class MedicalASR:
11
  def __init__(self, config: Dict[str, Any]):
 
28
  # Modeli yükle
29
  self.model = whisper.load_model(self.model_name, device=self.device)
30
 
31
+ # Türkçe tıbbi terim sözlüğü
32
+ self.medical_terms = load_turkish_medical_terms()
33
+
34
+ # Gelişmiş terim düzeltici
35
+ self.term_corrector = MedicalTermCorrector(self.medical_terms)
36
 
37
  def _load_medical_terms(self) -> Dict[str, str]:
38
  """Türkçe tıbbi terim sözlüğünü yükler"""
 
44
  # ... daha fazla tıbbi terim
45
  }
46
 
47
+ def transcribe(self, audio_file: str, speaker_diarization: bool = True, enhance_audio: bool = True) -> Dict[str, Any]:
48
  """
49
  Ses dosyasını transkribe eder
50
 
51
  Args:
52
  audio_file: Ses dosyasının yolu
53
  speaker_diarization: Konuşmacı diyarizasyonu yapılsın mı
54
+ enhance_audio: Ses iyileştirme yapılsın mı
55
 
56
  Returns:
57
  Transkripsiyon sonuçları
58
  """
59
+ # 1. Ses iyileştirme (optional)
60
+ if enhance_audio:
61
+ processed_file = clean_audio(audio_file)
62
+ else:
63
+ processed_file = audio_file
64
+
65
+ # 2. Transkripsiyon
66
  transcribe_options = {
67
  "language": self.language,
68
  "task": "transcribe",
69
+ "beam_size": 5, # Daha geniş arama ile alternatif kelimeleri değerlendir
70
+ "best_of": 5, # En iyi sonucu seç
71
+ "temperature": 0, # Deterministik sonuçlar için
72
+ "initial_prompt": "Çocuk doktoru vizitesi, pediatri uzmanı, çocuk hastalıkları, yenidoğan" # Modele ipucu ver
73
  }
74
 
75
+ result = self.model.transcribe(processed_file, **transcribe_options)
76
 
77
+ # 3. Tıbbi terimleri düzelt
78
  corrected_text = self._correct_medical_terms(result["text"])
79
  result["text"] = corrected_text
80
 
81
+ # 4. Diyarizasyon isteniyorsa ekle
82
  if speaker_diarization:
83
+ segments = diarize_segments(processed_file)
84
+
85
+ # Basit bir yaklaşım: Segmentlerin zaman etiketlerini kullanarak
86
+ # Whisper'ın döndürdüğü segmentleri konuşmacılara atayabiliriz
87
+ if "segments" in result:
88
+ whisper_segments = result["segments"]
89
+
90
+ # Her bir diyarizasyon segmenti için
91
+ for diar_seg in segments:
92
+ # Whisper segmentlerinden hangilerinin bu diyarizasyon segmentinde
93
+ # olduğunu bulalım
94
+ for whisper_seg in whisper_segments:
95
+ w_start = whisper_seg["start"]
96
+ w_end = whisper_seg["end"]
97
+
98
+ # Zaman aralıkları çakışıyorsa
99
+ if (diar_seg["start"] <= w_end and diar_seg["end"] >= w_start):
100
+ if not diar_seg["text"]:
101
+ diar_seg["text"] = whisper_seg["text"]
102
+ else:
103
+ diar_seg["text"] += " " + whisper_seg["text"]
104
+
105
+ result["diarization"] = segments
106
 
107
  return result
108
 
109
  def _correct_medical_terms(self, text: str) -> str:
110
+ """Transkribe edilmiş metindeki tıbbi terimleri düzeltir"""
111
+ # Gelişmiş düzelticiyi kullan
112
+ return self.term_corrector.correct_text(text)
 
 
 
 
 
 
 
 
 
 
 
 
113
 
114
+ # Basit dosya transkripsiyon fonksiyonu
115
  def transcribe_file(file_path: str) -> str:
116
+ # Bu fonksiyon eski API için burada bırakıldı
117
+ from config import settings
118
+ _model = whisper.load_model(settings.ASR_MODEL)
119
  result = _model.transcribe(file_path)
120
+ return result.get('text', '').strip()