import gradio as gr import os import tempfile import json import time from fastapi import FastAPI, UploadFile, Depends, HTTPException, Security, status from fastapi.security import OAuth2PasswordBearer import uvicorn from fastapi.middleware.cors import CORSMiddleware from routes import transcribe_audio as transcribe_endpoint # HuggingFace token'ını ayarla (kullanıcının kendi token'ını eklemesini sağla) os.environ["HF_TOKEN"] = os.environ.get("HF_TOKEN", "") os.environ["ENVIRONMENT"] = "production" # Arayüz konfigürasyonu THEME = gr.themes.Soft( primary_hue="indigo", secondary_hue="blue", ) LOGO = "assets/pediatric_logo.png" # Logo ekleyin (opsiyonel) # FastAPI uygulaması app = FastAPI(title="Pediatrik Transkripsiyon API") # Gradio arayüzü için fonksiyon async def process_audio(audio_file, diarize, enhance, anonymize, progress=gr.Progress()): if not audio_file: return {"error": "Lütfen bir ses dosyası yükleyin."}, None progress(0, desc="Ses dosyası hazırlanıyor...") # Geçici dosya oluştur with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio: temp_audio.write(audio_file) temp_path = temp_audio.name # FastAPI'nin beklediği UploadFile oluştur try: upload_file = UploadFile(filename="audio.wav", file=open(temp_path, "rb")) except Exception as e: os.unlink(temp_path) return {"error": f"Dosya açılamadı: {str(e)}"}, None # Endpoint'i çağır try: progress(0.1, desc="Ses iyileştiriliyor...") result = await transcribe_endpoint( file=upload_file, diarize=diarize, enhance_audio=enhance, anonymize=anonymize ) # JSON'a dönüştür progress(0.9, desc="Sonuçlar hazırlanıyor...") result_dict = json.loads(result.body) # Dosyayı temizle os.unlink(temp_path) # Metin sonucunu ayıkla full_text = result_dict.get("text", "") # Diyarizasyon sonuçlarını formatlı metne dönüştür formatted_text = "" if diarize and "diarization" in result_dict: for segment in result_dict["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" progress(1.0, desc="Tamamlandı!") return result_dict, formatted_text or full_text except Exception as e: os.unlink(temp_path) return {"error": f"İşlem sırasında hata: {str(e)}"}, None # Onay kontrolü fonksiyonu def check_agreement(agreement, *args): if not agreement: return {"error": "Devam etmek için gizlilik koşullarını kabul etmelisiniz."}, "Lütfen gizlilik koşullarını kabul edin." return process_audio(*args) # 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 Konuşma İçin Öneriler - Muayene sırasında arka planda gürültü olmamasına dikkat edin - Mikrofonu doğru konumlandırın - Konuşmaların üst üste binmemesine özen gösterin - 10 dakikadan uzun kayıtlarda sistem performansı düşebilir """ # Gradio arayüzünü oluştur with gr.Blocks(theme=THEME) as demo: gr.HTML("""
Ç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.