Spaces:
Running
Running
SwitchAlpha
commited on
Commit
·
e0e8859
1
Parent(s):
f40cd47
multilang
Browse files
app.py
CHANGED
|
@@ -3,8 +3,9 @@ os.environ["NUMBA_DISABLE_CACHING"] = "1"
|
|
| 3 |
import torch
|
| 4 |
import torch.nn as nn
|
| 5 |
import numpy as np
|
| 6 |
-
from fastapi import FastAPI, File, UploadFile, HTTPException
|
| 7 |
from fastapi.responses import JSONResponse
|
|
|
|
| 8 |
import io
|
| 9 |
import torchaudio
|
| 10 |
import librosa
|
|
@@ -49,14 +50,39 @@ class Config:
|
|
| 49 |
|
| 50 |
cfg = Config()
|
| 51 |
|
| 52 |
-
# --- 3. Bakım Noktaları "Veritabanı" ---
|
| 53 |
-
|
| 54 |
-
"
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
}
|
| 59 |
-
# (Not: Veritabanı metinlerini daha iyi anlaşılması için İngilizce'den Türkçe'ye çevirdim)
|
| 60 |
|
| 61 |
# --- 4. Model Tanımı (Değişmedi) ---
|
| 62 |
# ... (ResidualBlock ve CryNetMultiBranch sınıflarınız burada, değişiklik yok) ...
|
|
@@ -151,11 +177,14 @@ async def lifespan(app: FastAPI):
|
|
| 151 |
).to(cfg.DEVICE)
|
| 152 |
logging.info("✅ Ses dönüştürücüleri başarıyla başlatıldı!")
|
| 153 |
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
app_globals["
|
| 158 |
-
|
|
|
|
|
|
|
|
|
|
| 159 |
|
| 160 |
app_globals["resampler_cache"] = {}
|
| 161 |
# [YENİ EKLEME] ESC-50 modeli için ayrı bir yeniden örnekleyici önbelleği
|
|
@@ -187,9 +216,13 @@ def get_resampler(cache, orig_freq, new_freq, device):
|
|
| 187 |
return cache[orig_freq][new_freq]
|
| 188 |
|
| 189 |
@app.post("/predict_cry_audio")
|
| 190 |
-
async def predict_cry_audio(file: UploadFile = File(...)):
|
| 191 |
if not app_globals.get("loaded_model") or not app_globals.get("esc50_model"):
|
| 192 |
raise HTTPException(status_code=503, detail="Modeller yüklenmedi, hizmet geçici olarak kullanılamıyor.")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 193 |
|
| 194 |
try:
|
| 195 |
audio_bytes = await file.read()
|
|
@@ -282,9 +315,9 @@ async def predict_cry_audio(file: UploadFile = File(...)):
|
|
| 282 |
logging.error(f"Ses dosyası işlenirken kritik hata: {e}", exc_info=True)
|
| 283 |
raise HTTPException(status_code=500, detail="Ses dosyası işlenemedi, lütfen tekrar deneyin veya dosya formatını kontrol edin.")
|
| 284 |
|
| 285 |
-
# Orijinal JSON yanıt mantığınız (
|
| 286 |
response_data = {}
|
| 287 |
-
CARE_POINTS_DB = app_globals["
|
| 288 |
|
| 289 |
if top1_score > cfg.THRESHOLD_HIGH_CONFIDENCE:
|
| 290 |
care_points = CARE_POINTS_DB.get(top1_label, [])
|
|
|
|
| 3 |
import torch
|
| 4 |
import torch.nn as nn
|
| 5 |
import numpy as np
|
| 6 |
+
from fastapi import FastAPI, File, UploadFile, HTTPException, Form
|
| 7 |
from fastapi.responses import JSONResponse
|
| 8 |
+
from typing import Optional
|
| 9 |
import io
|
| 10 |
import torchaudio
|
| 11 |
import librosa
|
|
|
|
| 50 |
|
| 51 |
cfg = Config()
|
| 52 |
|
| 53 |
+
# --- 3. Bakım Noktaları "Veritabanı" (Çok Dilli) ---
|
| 54 |
+
CARE_POINTS_DB_MULTILANG = {
|
| 55 |
+
"tr": {
|
| 56 |
+
"belly_pain": """Bebek olabilir: Karnı rahatsız. [Ana Neden] Hava yutma. Beslendikten hemen sonra geğirme, muhtemelen şişkinlikle birlikte; [Bakım Noktası] Besledikten sonra bebeği dik tutun ve 10-15 dakika dik pozisyonda tutarak gazını çıkarın.---Bebek olabilir: Karnı rahatsız. [Ana Neden] Olgunlaşmamış sindirim sistemi. Yenidoğanlarda sık geğirme, özellikle beslendikten sonra; [Bakım Noktası] Düzenli beslenmeyi sürdürün, aşırı beslemekten kaçının; gaz çıkarmasına yardımcı olmak için beslendikten sonra sırtına hafifçe vurun.---Bebek olabilir: Karnı rahatsız. [Ana Neden] Çok hızlı veya çok fazla yemek. Geğirme, huysuzluk, kusma eşliğinde; [Bakım Noktası] Besleme hızını kontrol edin, daha küçük, daha sık öğünler benimseyin; besleme sırasında uygun şekilde duraklayın.---Bebek olabilir: Karnı rahatsız. [Ana Neden] Duygusal değişiklikler. Ağladıktan veya güldükten sonra geğirme; [Bakım Noktası] Bebeğin duygularını yatıştırın, yoğun ağlama veya heyecandan kaçının; beslenmeden önce ve sonra sakin bir ortam sağlayın.---Bebek olabilir: Karnı rahatsız. [AnaNeden] Sıcaklık değişiklikleri. Ani ortam sıcaklığı değişiklerinden veya bebek üşüdüğünde geğirme; [Bakım Noktası] Oda sıcaklığını sabit tutun, bebeğin karnının üşümesini önleyin; sıcak tutmaya dikkat edin.""",
|
| 57 |
+
"burping": """Besledikten sonra daima bebeğin gazını çıkarın.---Geğirme pozisyonlarını değiştirin, birden fazla yöntem deneyin.---Çok fazla hava yutmasını önlemek için biberon emziği akış hızının uygun olup olmadığını kontrol edin.---Bir seferde yutulan hava miktarını azaltmak için daha küçük, daha sık öğünler sunun.---Eğer bebek sık sık geğiriyorsa, beslenme alışkanlıklarının ayarlanması gerekebilir.""",
|
| 58 |
+
"discomfort": """Bezin ıslak veya kirli olup olmadığını kontrol edin.---Oda sıcaklığının rahat olup olmadığını, bebeğin çok sıcak veya çok soğuk giydirilip giydirilmediğini onaylayın.---Bebeğin kıyafetlerinin çok sıkı olup olmadığını veya rahatsızlık verip vermediğini kontrol edin.---Bebeğin böcekler tarafından ısırılmadığından veya cildinin kaşınmadığından emin olun.---Rahatsızlığı hafifletip hafifletmediğini görmek için bebeğin pozisyonunu değiştirmeyi deneyin.""",
|
| 59 |
+
"hungry": """Bebek acıkmış olabilir, lütfen zamanında besleyin.---Son beslenme zamanını kontrol edin, yemek zamanı mı?---Biberon veya emzirmeyi deneyin, bebeğin aranma refleksi gösterip göstermediğine bakın.---Bebeğin doyduğundan emin olun, beslendikten sonra bebeğin tepkisini gözlemleyin.---Eğer bebek kontrolsüzce ağlıyorsa, küçük bir ek beslenme gerekebilir."""
|
| 60 |
+
},
|
| 61 |
+
"en": {
|
| 62 |
+
"belly_pain": """Baby may have: Belly pain. [Main Cause] Swallowing air. Burping immediately after feeding, possibly with bloating; [Care Point] Keep the baby upright after feeding and hold in an upright position for 10-15 minutes to help release gas.---Baby may have: Belly pain. [Main Cause] Immature digestive system. Frequent burping in newborns, especially after feeding; [Care Point] Continue regular feeding, avoid overfeeding; gently pat the back after feeding to help release gas.---Baby may have: Belly pain. [Main Cause] Eating too fast or too much. Burping accompanied by fussiness and vomiting; [Care Point] Control feeding pace, adopt smaller, more frequent meals; pause appropriately during feeding.---Baby may have: Belly pain. [Main Cause] Emotional changes. Burping after crying or laughing; [Care Point] Calm the baby's emotions, avoid intense crying or excitement; provide a calm environment before and after feeding.---Baby may have: Belly pain. [Main Cause] Temperature changes. Burping from sudden ambient temperature changes or when baby gets cold; [Care Point] Keep room temperature stable, prevent baby's belly from getting cold; pay attention to keeping warm.""",
|
| 63 |
+
"burping": """Always burp the baby after feeding.---Change burping positions, try multiple methods.---Check if the bottle nipple flow rate is appropriate to prevent swallowing too much air.---Offer smaller, more frequent meals to reduce the amount of air swallowed at once.---If the baby burps frequently, feeding habits may need to be adjusted.""",
|
| 64 |
+
"discomfort": """Check if the diaper is wet or dirty.---Confirm if the room temperature is comfortable, whether the baby is dressed too warm or too cold.---Check if the baby's clothes are too tight or causing discomfort.---Make sure the baby has not been bitten by insects or has itchy skin.---Try changing the baby's position to see if it relieves the discomfort.""",
|
| 65 |
+
"hungry": """Baby may be hungry, please feed in time.---Check the last feeding time, is it mealtime?---Try bottle or breastfeeding, see if the baby shows rooting reflex.---Make sure the baby is full, observe the baby's response after feeding.---If the baby cries uncontrollably, a small supplementary feeding may be needed."""
|
| 66 |
+
},
|
| 67 |
+
"de": {
|
| 68 |
+
"belly_pain": """Baby könnte haben: Bauchschmerzen. [Hauptursache] Luft schlucken. Aufstoßen unmittelbar nach dem Füttern, möglicherweise mit Blähungen; [Pflegepunkt] Halten Sie das Baby nach dem Füttern aufrecht und halten Sie es 10-15 Minuten in aufrechter Position, um Gas freizusetzen.---Baby könnte haben: Bauchschmerzen. [Hauptursache] Unreifes Verdauungssystem. Häufiges Aufstoßen bei Neugeborenen, besonders nach dem Füttern; [Pflegepunkt] Regelmäßige Fütterung fortsetzen, Überfütterung vermeiden; sanft auf den Rücken klopfen nach dem Füttern, um Gas freizusetzen.---Baby könnte haben: Bauchschmerzen. [Hauptursache] Zu schnell oder zu viel essen. Aufstoßen begleitet von Unruhe und Erbrechen; [Pflegepunkt] Fütterungstempo kontrollieren, kleinere, häufigere Mahlzeiten einführen; während des Fütterns angemessen pausieren.---Baby könnte haben: Bauchschmerzen. [Hauptursache] Emotionale Veränderungen. Aufstoßen nach Weinen oder Lachen; [Pflegepunkt] Babys Emotionen beruhigen, intensives Weinen oder Aufregung vermeiden; ruhige Umgebung vor und nach dem Füttern schaffen.---Baby könnte haben: Bauchschmerzen. [Hauptursache] Temperaturveränderungen. Aufstoßen durch plötzliche Umgebungstemperaturänderungen oder wenn Baby friert; [Pflegepunkt] Raumtemperatur stabil halten, Babys Bauch vor Kälte schützen; auf Warmhalten achten.""",
|
| 69 |
+
"burping": """Baby nach dem Füttern immer aufstoßen lassen.---Aufstoßpositionen ändern, mehrere Methoden ausprobieren.---Überprüfen, ob die Flaschensauger-Durchflussrate angemessen ist, um zu verhindern, dass zu viel Luft geschluckt wird.---Kleinere, häufigere Mahlzeiten anbieten, um die auf einmal geschluckte Luftmenge zu reduzieren.---Wenn das Baby häufig aufstößt, müssen möglicherweise Fütterungsgewohnheiten angepasst werden.""",
|
| 70 |
+
"discomfort": """Überprüfen, ob die Windel nass oder schmutzig ist.---Bestätigen, ob die Raumtemperatur angenehm ist, ob das Baby zu warm oder zu kalt angezogen ist.---Überprüfen, ob die Kleidung des Babys zu eng ist oder Unbehagen verursacht.---Sicherstellen, dass das Baby nicht von Insekten gebissen wurde oder juckende Haut hat.---Versuchen, die Position des Babys zu ändern, um zu sehen, ob es das Unbehagen lindert.""",
|
| 71 |
+
"hungry": """Baby könnte hungrig sein, bitte rechtzeitig füttern.---Letzte Fütterungszeit überprüfen, ist es Essenszeit?---Flasche oder Stillen versuchen, sehen, ob Baby Suchreflex zeigt.---Sicherstellen, dass Baby satt ist, Reaktion des Babys nach dem Füttern beobachten.---Wenn Baby unkontrolliert weint, könnte eine kleine Zusatzfütterung erforderlich sein."""
|
| 72 |
+
},
|
| 73 |
+
"ru": {
|
| 74 |
+
"belly_pain": """У ребенка может быть: Боль в животе. [Основная причина] Заглатывание воздуха. Отрыжка сразу после кормления, возможно с вздутием; [Уход] Держите ребенка в вертикальном положении после кормления в течение 10-15 минут, чтобы помочь выпустить газы.---У ребенка может быть: Боль в животе. [Основная причина] Незрелая пищеварительная система. Частая отрыжка у новорожденных, особенно после кормления; [Уход] Продолжайте регулярное кормление, избегайте перекармливания; осторожно похлопывайте по спине после кормления для выпуска газов.---У ребенка может быть: Боль в животе. [Основная причина] Слишком быстрое или чрезмерное питание. Отрыжка, сопровождаемая беспокойством и рвотой; [Уход] Контролируйте темп кормления, вводите меньшие, более частые приемы пищи; делайте соответствующие паузы во время кормления.---У ребенка может быть: Боль в животе. [Основная причина] Эмоциональные изменения. Отрыжка после плача или смеха; [Уход] Успокойте эмоции ребенка, избегайте интенсивного плача или возбуждения; обеспечьте спокойную обстановку до и после кормления.---У ребенка может быть: Боль в животе. [Основная причина] Изменения температуры. Отрыжка от резких изменений температуры окружающей среды или когда ребенок мерзнет; [Уход] Поддерживайте стабильную температуру в комнате, предотвращайте переохлаждение живота ребенка; обращайте внимание на сохранение тепла.""",
|
| 75 |
+
"burping": """Всегда помогайте ребенку отрыгнуть после кормления.---Меняйте позиции для отрыжки, пробуйте несколько методов.---Проверьте, подходит ли скорость потока соски бутылочки, чтобы предотвратить заглатывание слишком большого количества воздуха.---Предлагайте меньшие, более частые приемы пищи, чтобы уменьшить количество проглоченного воздуха за раз.---Если ребенок часто отрыгивает, возможно, необходимо скорректировать привычки кормления.""",
|
| 76 |
+
"discomfort": """Проверьте, мокрый или грязный подгузник.---Убедитесь, что температура в комнате комфортная, не одет ли ребенок слишком тепло или холодно.---Проверьте, не слишком ли тесная одежда ребенка или вызывает дискомфорт.---Убедитесь, что ребенка не укусили насекомые или у него нет зудящей кожи.---Попробуйте изменить положение ребенка, чтобы увидеть, облегчает ли это дискомфорт.""",
|
| 77 |
+
"hungry": """Ребенок может быть голоден, пожалуйста, покормите вовремя.---Проверьте время последнего кормления, не пора ли кормить?---Попробуйте бутылочку или грудное вскармливание, посмотрите, проявляет ли ребенок поисковый рефлекс.---Убедитесь, что ребенок сыт, наблюдайте за реакцией ребенка после кормления.---Если ребенок плачет неконтролируемо, может потребоваться небольшое дополнительное кормление."""
|
| 78 |
+
},
|
| 79 |
+
"ko": {
|
| 80 |
+
"belly_pain": """아기가 겪을 수 있는 증상: 복통. [주요 원因] 공기 삼킴. 수유 직후 트림, 복부 팽만 가능; [돌봄 요령] 수유 후 아기를 세워서 10-15분간 똑바로 세워 가스 배출을 돕습니다.---아기가 겪을 수 있는 증상: 복통. [주요 원因] 미성숙한 소화 시스템. 신생아의 잦은 트림, 특히 수유 후; [돌봄 요령] 규칙적인 수유를 유지하고 과식을 피하며, 수유 후 등을 부드럽게 두드려 가스 배출을 돕습니다.---아기가 겪을 수 있는 증상: 복통. [주요 원因] 너무 빠르거나 과도한 수유. 트림과 함께 보챔과 구토; [돌봄 요령] 수유 속도를 조절하고 소량씩 자주 먹이며, 수유 중 적절히 멈춥니다.---아기가 겪을 수 있는 증상: 복통. [주요 원因] 감정 변화. 울거나 웃은 후 트림; [돌봄 요령] 아기의 감정을 진정시키고 과도한 울음이나 흥분을 피하며, 수유 전후 차분한 환경을 제공합니다.---아기가 겪을 수 있는 증상: 복통. [주요 원因] 온도 변화. 급격한 주변 온도 변화나 아기가 추울 때 트림; [돌봄 요령] 실내 온도를 안정적으로 유지하고 아기 배가 차가워지지 않도록 하며, 보온에 주의합니다.""",
|
| 81 |
+
"burping": """수유 후 항상 아기의 트림을 시킵니다.---트림 자세를 바꾸고 여러 방법을 시도합니다.---젖병 젖꼭지 유속이 적절한지 확인하여 공기를 너무 많이 삼키지 않도록 합니다.---한 번에 삼키는 공기량을 줄이기 위해 소량씩 자주 수유합니다.---아기가 자주 트림을 한다면 수유 습관을 조정해야 할 수 있습니다.""",
|
| 82 |
+
"discomfort": """기저귀가 젖었거나 더러운지 확인합니다.---실내 온도가 편안한지, 아기가 너무 덥거나 춥게 입혀졌는지 확인합니다.---아기의 옷이 너무 꽉 끼거나 불편함을 주는지 확인합니다.---아기가 벌레에 물리지 않았는지 또는 피부가 가렵지 않은지 확인합니다.---아기의 자세를 바꿔보고 불편함이 완화되는지 확인합니다.""",
|
| 83 |
+
"hungry": """아기가 배고플 수 있으니 제때 수유하세요.---마지막 수유 시간을 확인하고 식사 시간인지 확인합니다.---젖병이나 모유 수유를 시도하고 아기가 빨기 반사를 보이는지 확인합니다.---아기가 배부른지 확인하고 수유 후 아기의 반응을 관찰합니다.---아기가 통제할 수 없이 운다면 소량의 추가 수유가 필요할 수 있습니다."""
|
| 84 |
+
}
|
| 85 |
}
|
|
|
|
| 86 |
|
| 87 |
# --- 4. Model Tanımı (Değişmedi) ---
|
| 88 |
# ... (ResidualBlock ve CryNetMultiBranch sınıflarınız burada, değişiklik yok) ...
|
|
|
|
| 177 |
).to(cfg.DEVICE)
|
| 178 |
logging.info("✅ Ses dönüştürücüleri başarıyla başlatıldı!")
|
| 179 |
|
| 180 |
+
# Çok dilli bakım noktalarını parse et
|
| 181 |
+
app_globals["CARE_POINTS_DB_MULTILANG"] = {}
|
| 182 |
+
for lang, categories in CARE_POINTS_DB_MULTILANG.items():
|
| 183 |
+
app_globals["CARE_POINTS_DB_MULTILANG"][lang] = {}
|
| 184 |
+
for category, raw_text in categories.items():
|
| 185 |
+
points = [point.strip() for point in raw_text.strip().split('---') if point.strip()]
|
| 186 |
+
app_globals["CARE_POINTS_DB_MULTILANG"][lang][category] = points
|
| 187 |
+
logging.info("✅ Çok dilli bakım bilgi bankası başarıyla ayrıştırıldı!")
|
| 188 |
|
| 189 |
app_globals["resampler_cache"] = {}
|
| 190 |
# [YENİ EKLEME] ESC-50 modeli için ayrı bir yeniden örnekleyici önbelleği
|
|
|
|
| 216 |
return cache[orig_freq][new_freq]
|
| 217 |
|
| 218 |
@app.post("/predict_cry_audio")
|
| 219 |
+
async def predict_cry_audio(file: UploadFile = File(...), language: Optional[str] = Form("tr")):
|
| 220 |
if not app_globals.get("loaded_model") or not app_globals.get("esc50_model"):
|
| 221 |
raise HTTPException(status_code=503, detail="Modeller yüklenmedi, hizmet geçici olarak kullanılamıyor.")
|
| 222 |
+
|
| 223 |
+
# Dil validasyonu
|
| 224 |
+
if language not in ["en", "de", "tr", "ru", "ko"]:
|
| 225 |
+
language = "tr" # Varsayılan dil
|
| 226 |
|
| 227 |
try:
|
| 228 |
audio_bytes = await file.read()
|
|
|
|
| 315 |
logging.error(f"Ses dosyası işlenirken kritik hata: {e}", exc_info=True)
|
| 316 |
raise HTTPException(status_code=500, detail="Ses dosyası işlenemedi, lütfen tekrar deneyin veya dosya formatını kontrol edin.")
|
| 317 |
|
| 318 |
+
# Orijinal JSON yanıt mantığınız (şimdi dile göre bakım noktaları kullanıyor)
|
| 319 |
response_data = {}
|
| 320 |
+
CARE_POINTS_DB = app_globals["CARE_POINTS_DB_MULTILANG"].get(language, app_globals["CARE_POINTS_DB_MULTILANG"]["tr"])
|
| 321 |
|
| 322 |
if top1_score > cfg.THRESHOLD_HIGH_CONFIDENCE:
|
| 323 |
care_points = CARE_POINTS_DB.get(top1_label, [])
|