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 # HuggingFace token'ını ayarla HF_TOKEN = os.getenv("HF_TOKEN", "") if not HF_TOKEN: print("Warning: HF_TOKEN not set!") def load_spacy_model(): try: return spacy.load("tr_core_news_md") except OSError: print("Türkçe SpaCy modeli indiriliyor...") subprocess.run(["python", "-m", "spacy", "download", "tr_core_news_md"], check=True) return spacy.load("tr_core_news_md") # 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;} """ async def process_audio(audio_file, diarize=True, enhance=True, anonymize=True, progress=gr.Progress()): try: if audio_file is None: return {"error": "Lütfen bir ses dosyası yükleyin."}, None progress(0, desc="Ses dosyası hazırlanıyor...") # Ses dosyasını temizle if enhance: progress(0.1, desc="Ses iyileştiriliyor...") audio_file = clean_audio(audio_file) # Transkripsiyon yap progress(0.3, desc="Ses metne dönüştürülüyor...") result = transcribe_file( audio_file, language="tr", model_name=settings.ASR_MODEL ) # Konuşmacı ayrımı if diarize: progress(0.6, desc="Konuşmacılar ayrıştırılıyor...") diarization_result = diarize_segments(result["segments"]) result["diarization"] = diarization_result # Kişisel verileri anonimleştir if anonymize: progress(0.8, desc="Kişisel veriler anonimleştiriliyor...") privacy_processor = MedicalPrivacyProcessor() result["text"] = privacy_processor.anonymize_text(result["text"]) result["anonymized"] = True # Sonucu formatla progress(0.9, desc="Sonuçlar hazırlanıyor...") formatted_text = "" if diarize and "diarization" in result: for segment in result["diarization"]: speaker = segment["speaker"] text = segment["text"] start = segment["start"] end = segment["end"] formatted_text += f"[{speaker}] ({start:.1f}s - {end:.1f}s): {text}\n\n" else: formatted_text = result["text"] if result.get("anonymized"): formatted_text += "\n🔒 Kişisel veriler anonimleştirildi." progress(1.0, desc="Tamamlandı!") return result, formatted_text except Exception as e: print(f"Error in process_audio: {str(e)}") return {"error": f"İşlem sırasında hata: {str(e)}"}, None # 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.