import os import tempfile import json import time import gradio as gr import spacy import subprocess from preprocessing import clean_audio from asr import transcribe_file from diarization import diarize_segments from privacy import MedicalPrivacyProcessor from config import settings from typing import Tuple, Dict # HuggingFace token'ını ayarla HF_TOKEN = os.getenv("HF_TOKEN", "") if not HF_TOKEN: print("Warning: HF_TOKEN not set!") def load_spacy_model(): """Load SpaCy model with graceful fallback to blank model""" import spacy from config import settings try: # Önce tam modeli yüklemeyi dene return spacy.load(settings.SPACY_MODEL) except OSError: # Model yüklenemezse blank model kullan print(f"[warning] SpaCy model '{settings.SPACY_MODEL}' yüklenemedi; fallback olarak blank('tr') kullanılıyor.") return spacy.blank("tr") # SpaCy modelini yükle nlp = load_spacy_model() # Yardım metni usage_tips = """ ## Kullanım İpuçları 1. **Dosya formatı**: WAV formatında ses dosyaları en iyi sonuçları verir. 2. **Ses kalitesi**: Gürültüsüz ortamlarda kaydedilen sesler daha iyi sonuç verir. 3. **Konuşmacı ayrımı**: Konuşmacı sayısı arttıkça tanıma doğruluğu düşebilir. 4. **Hata durumlarında**: Sistem hata verirse, ses dosyasının formatını ve boyutunu kontrol edin. ## Pediatrik Uzmanlar İçin Sistem, çocuk hastalıkları, aşılar, ilaçlar ve muayene terimleri içeren geniş bir tıbbi terim sözlüğü kullanır. Bu sayede pediatri vizitelerindeki terminolojinin doğru transkribe edilmesini sağlar. """ # CSS stilleri css = """ .container {padding: 20px; border-radius: 10px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);} .result-text {margin-top: 10px; padding: 15px; background: #f8f9fa; border-radius: 5px; white-space: pre-wrap;} .speaker {font-weight: bold; color: #1a5fb4;} .timestamp {color: #666; font-size: 0.9em;} .success {color: green; font-weight: bold;} .error {color: red; font-weight: bold;} .footer {margin-top: 50px; text-align: center; color: #666; font-size: 0.9em;} .tips {background: #e7f5ff; padding: 15px; border-radius: 5px; margin-top: 20px;} """ def process_audio( audio_path: str, do_diarize: bool = True, do_enhance: bool = True, do_anonymize: bool = True ) -> Tuple[str, Dict]: """ Ses dosyasını işleyip transkripsiyon yapar. Args: audio_path: Ses dosyasının yolu do_diarize: Konuşmacı ayrımı yapılsın mı? do_enhance: Ses iyileştirme yapılsın mı? do_anonymize: Kişisel veriler anonimleştirilsin mi? Returns: Tuple[str, Dict]: (Transkripsiyon metni, JSON sonuç) """ if not audio_path: return "Lütfen bir ses dosyası yükleyin.", {} try: # Ses dosyasını yükle audio = Audio.from_file(audio_path) # Ses iyileştirme if do_enhance: audio = enhance_audio(audio) # Konuşmacı ayrımı if do_diarize: diarization = diarize_speakers(audio) else: diarization = None # Transkripsiyon result = transcribe_audio(audio, diarization) # Anonimleştirme if do_anonymize: result = anonymize_personal_info(result) return result["text"], result except Exception as e: error_msg = f"İşlem sırasında bir hata oluştu: {str(e)}" print(error_msg) return error_msg, {} # Ana arayüz with gr.Blocks(theme=gr.themes.Soft(primary_hue="indigo", secondary_hue="blue"), css=css) as demo: gr.HTML(f"""
Çocuk doktorları için geliştirilmiş, pediatri alanına özel tıbbi terminoloji tanıma özellikli transkripsiyon sistemi
Bu demo uygulaması yalnızca eğitim amaçlıdır ve gerçek hasta verilerinin işlenmesi için tasarlanmamıştır. Lütfen hasta bilgisi içeren ses kayıtlarını yüklemeyin. Sistemde paylaşılan ses kayıtları üçüncü şahıslar tarafından erişilebilir ve gizlilik/güvenlik garantisi yoktur.
Bu aracı kullanarak, yüklediğiniz verilerin Hugging Face Kullanım Koşulları'na uygun olduğunu kabul etmiş olursunuz.