Spaces:
Sleeping
Sleeping
Delete routes.py
Browse files
routes.py
DELETED
@@ -1,86 +0,0 @@
|
|
1 |
-
from fastapi import APIRouter, UploadFile, File, Depends, HTTPException, Query
|
2 |
-
from fastapi.responses import JSONResponse
|
3 |
-
from preprocessing import clean_audio
|
4 |
-
from asr import transcribe_file, MedicalASR
|
5 |
-
from diarization import diarize_segments
|
6 |
-
from privacy import MedicalPrivacyProcessor
|
7 |
-
from config import settings
|
8 |
-
from typing import Optional
|
9 |
-
import tempfile, os, uuid
|
10 |
-
from fastapi.concurrency import run_in_threadpool
|
11 |
-
|
12 |
-
router = APIRouter()
|
13 |
-
|
14 |
-
# Gizlilik işlemcisi
|
15 |
-
privacy_processor = MedicalPrivacyProcessor()
|
16 |
-
|
17 |
-
def get_asr_model():
|
18 |
-
"""ASR modelini oluşturur ve döndürür"""
|
19 |
-
config = {
|
20 |
-
"language": "tr",
|
21 |
-
"model": settings.ASR_MODEL,
|
22 |
-
"domain": "medical"
|
23 |
-
}
|
24 |
-
return MedicalASR(config)
|
25 |
-
|
26 |
-
@router.post("/transcribe")
|
27 |
-
async def transcribe_audio(
|
28 |
-
file: UploadFile = File(...),
|
29 |
-
diarize: bool = True,
|
30 |
-
enhance_audio: bool = True,
|
31 |
-
anonymize: Optional[bool] = Query(None, description="Kişisel verileri anonimleştir"),
|
32 |
-
asr_model: MedicalASR = Depends(get_asr_model)
|
33 |
-
):
|
34 |
-
"""Ses dosyasını transkribe eder"""
|
35 |
-
try:
|
36 |
-
# Geçici dosya oluştur
|
37 |
-
with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_file:
|
38 |
-
temp_file.write(await file.read())
|
39 |
-
temp_file_path = temp_file.name
|
40 |
-
|
41 |
-
# CPU/GPU yoğun işlemi thread pool'da çalıştır
|
42 |
-
result = await run_in_threadpool(
|
43 |
-
asr_model.transcribe,
|
44 |
-
temp_file_path,
|
45 |
-
speaker_diarization=diarize,
|
46 |
-
enhance_audio=enhance_audio
|
47 |
-
)
|
48 |
-
|
49 |
-
# Geçici dosyayı temizle
|
50 |
-
os.unlink(temp_file_path)
|
51 |
-
|
52 |
-
# Kişisel veri anonimleştirme
|
53 |
-
# Eğer açıkça belirtilmediyse uygulama konfigürasyonuna göre davran
|
54 |
-
should_anonymize = anonymize if anonymize is not None else app.state.asr_config.get("anonymize_data", True)
|
55 |
-
|
56 |
-
identified_data = {}
|
57 |
-
if should_anonymize:
|
58 |
-
# Ana metni anonimleştir
|
59 |
-
anonymized_text, main_data = privacy_processor.anonymize_text(result["text"])
|
60 |
-
result["text"] = anonymized_text
|
61 |
-
identified_data.update(main_data)
|
62 |
-
|
63 |
-
# Diyarizasyon segmentlerini anonimleştir
|
64 |
-
if "diarization" in result:
|
65 |
-
for segment in result["diarization"]:
|
66 |
-
if segment["text"]:
|
67 |
-
anonymized_segment, segment_data = privacy_processor.anonymize_text(segment["text"])
|
68 |
-
segment["text"] = anonymized_segment
|
69 |
-
# Her segment için tespit edilen verileri güncelle
|
70 |
-
for key, values in segment_data.items():
|
71 |
-
identified_data.setdefault(key, []).extend(values)
|
72 |
-
|
73 |
-
# Tespit edilen verileri güvenli şekilde sakla
|
74 |
-
# NOT: Gerçek uygulamada bu verileri şifreli bir veritabanında saklayın
|
75 |
-
session_id = str(uuid.uuid4())
|
76 |
-
# Burada verileri güvenli bir şekilde saklama kodunuz olacak
|
77 |
-
|
78 |
-
# Yanıtta tespit edilen veri tipleri hakkında bilgi ver
|
79 |
-
result["anonymized"] = True
|
80 |
-
result["identified_data_types"] = {k: len(v) for k, v in identified_data.items() if v}
|
81 |
-
result["session_id"] = session_id
|
82 |
-
|
83 |
-
return JSONResponse(content=result)
|
84 |
-
|
85 |
-
except Exception as e:
|
86 |
-
raise HTTPException(status_code=500, detail=f"Transkripsiyon hatası: {str(e)}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|