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(): """Load SpaCy model with fallback to small model""" try: return spacy.load(settings.SPACY_MODEL) except OSError: print(f"Downloading {settings.SPACY_MODEL}...") subprocess.run(["python", "-m", "spacy", "download", settings.SPACY_MODEL], check=True) return spacy.load(settings.SPACY_MODEL) # 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_file, is_pediatrics=True): """Process audio with improved error handling""" try: # Clean audio cleaned_audio = clean_audio(audio_file) # Transcribe transcription = transcribe_file(cleaned_audio) # Diarize diarization = diarize_segments(transcription["segments"]) # Process text nlp = load_spacy_model() processed_text = process_text(transcription, nlp, is_pediatrics) return { "transcription": transcription, "diarization": diarization, "processed_text": processed_text } except Exception as e: print(f"Error processing audio: {e}") return { "error": str(e), "transcription": "", "diarization": [], "processed_text": "" } # 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.