|
import os |
|
import sys |
|
import torch |
|
import numpy as np |
|
from PIL import Image |
|
|
|
|
|
sys.path.append(os.path.dirname(os.path.abspath(__file__))) |
|
|
|
|
|
try: |
|
from vision.detector import mark_dangers, get_detector |
|
from risk.model import predict_risk_with_details |
|
from stream.kandilli_feed import get_kandilli_data, create_quake_map |
|
from rag.chatbot import get_chatbot |
|
except ModuleNotFoundError: |
|
|
|
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "vision")) |
|
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "risk")) |
|
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "stream")) |
|
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "rag")) |
|
|
|
from detector import mark_dangers, get_detector |
|
from model import predict_risk_with_details |
|
from kandilli_feed import get_kandilli_data, create_quake_map |
|
from chatbot import get_chatbot |
|
|
|
def test_vision_module(): |
|
"""Görsel analiz modülünü test et""" |
|
print("\n=== Görsel Analiz Modülü Testi ===") |
|
|
|
|
|
test_image = np.ones((500, 800, 3), dtype=np.uint8) * 240 |
|
|
|
|
|
try: |
|
detector = get_detector() |
|
print("✓ Detector başarıyla başlatıldı") |
|
except Exception as e: |
|
print(f"✗ Detector başlatılamadı: {e}") |
|
return False |
|
|
|
|
|
if torch.cuda.is_available(): |
|
before_mem = torch.cuda.memory_allocated() / 1024**2 |
|
print(f"GPU bellek kullanımı (başlangıç): {before_mem:.2f} MB") |
|
|
|
|
|
try: |
|
result = mark_dangers(test_image) |
|
print("✓ Görüntü başarıyla işlendi") |
|
|
|
|
|
if result is not None and isinstance(result, np.ndarray): |
|
print(f"✓ Sonuç doğru formatta: {result.shape}") |
|
else: |
|
print(f"✗ Sonuç beklenmeyen formatta: {type(result)}") |
|
except Exception as e: |
|
print(f"✗ Görüntü işlenirken hata oluştu: {e}") |
|
return False |
|
|
|
|
|
if torch.cuda.is_available(): |
|
after_mem = torch.cuda.memory_allocated() / 1024**2 |
|
print(f"GPU bellek kullanımı (işlem sonrası): {after_mem:.2f} MB") |
|
print(f"Bellek artışı: {after_mem - before_mem:.2f} MB") |
|
|
|
|
|
if torch.cuda.is_available(): |
|
torch.cuda.empty_cache() |
|
print("GPU belleği temizlendi") |
|
|
|
print("Görsel analiz modülü testi tamamlandı") |
|
return True |
|
|
|
def test_risk_module(): |
|
"""Risk skoru modülünü test et""" |
|
print("\n=== Risk Skoru Modülü Testi ===") |
|
|
|
|
|
test_addresses = [ |
|
"İstanbul, Kadıköy", |
|
"Ankara, Çankaya", |
|
"İzmir, Konak", |
|
"Bursa, Nilüfer", |
|
"Antalya, Muratpaşa" |
|
] |
|
|
|
success_count = 0 |
|
|
|
for address in test_addresses: |
|
print(f"\nAdres için risk hesaplanıyor: {address}") |
|
try: |
|
result = predict_risk_with_details(address) |
|
|
|
if result["success"]: |
|
print(f"✓ Risk skoru: {result['risk_score']:.4f}") |
|
print(f"✓ Risk kategorisi: {result['risk_category']}") |
|
print(f"✓ Zemin türü: {result['soil_type']}") |
|
print(f"✓ Bina yaşı: {result['building_age']}") |
|
success_count += 1 |
|
else: |
|
print(f"✗ Risk hesaplanamadı: {result['message']}") |
|
except Exception as e: |
|
print(f"✗ Hata oluştu: {e}") |
|
|
|
success_rate = success_count / len(test_addresses) * 100 |
|
print(f"\nBaşarı oranı: {success_rate:.1f}% ({success_count}/{len(test_addresses)})") |
|
|
|
if success_rate >= 80: |
|
print("Risk skoru modülü testi başarılı") |
|
return True |
|
else: |
|
print("Risk skoru modülü testi başarısız") |
|
return False |
|
|
|
def test_kandilli_module(): |
|
"""Kandilli API entegrasyonunu test et""" |
|
print("\n=== Kandilli API Entegrasyonu Testi ===") |
|
|
|
|
|
try: |
|
print("Kandilli API'den veri çekiliyor...") |
|
quake_data = get_kandilli_data(hours=24) |
|
|
|
if quake_data and "result" in quake_data: |
|
quake_count = len(quake_data["result"]) |
|
print(f"✓ {quake_count} deprem verisi çekildi") |
|
else: |
|
print("✗ Deprem verisi çekilemedi veya boş") |
|
return False |
|
except Exception as e: |
|
print(f"✗ API hatası: {e}") |
|
return False |
|
|
|
|
|
try: |
|
print("Deprem haritası oluşturuluyor...") |
|
quake_map = create_quake_map(quake_data) |
|
|
|
if quake_map: |
|
print("✓ Harita başarıyla oluşturuldu") |
|
else: |
|
print("✗ Harita oluşturulamadı") |
|
return False |
|
except Exception as e: |
|
print(f"✗ Harita oluşturma hatası: {e}") |
|
return False |
|
|
|
print("Kandilli API entegrasyonu testi başarılı") |
|
return True |
|
|
|
def test_chatbot_module(): |
|
"""RAG chatbot sistemini test et""" |
|
print("\n=== RAG Chatbot Sistemi Testi ===") |
|
|
|
|
|
test_questions = [ |
|
"Deprem çantasında neler bulundurmalıyım?", |
|
"Deprem anında ne yapmalıyım?", |
|
"Deprem sonrası güvenlik önlemleri nelerdir?" |
|
] |
|
|
|
|
|
try: |
|
print("Chatbot başlatılıyor (API anahtarı olmadan)...") |
|
chatbot = get_chatbot() |
|
print("✓ Chatbot başarıyla başlatıldı") |
|
|
|
|
|
print("\nAPI anahtarı olmadan yanıt kontrolü:") |
|
response = chatbot.answer(test_questions[0]) |
|
if "API anahtarı" in response and "girin" in response: |
|
print("✓ API anahtarı olmadığında doğru mesaj gösteriliyor") |
|
else: |
|
print(f"✗ API anahtarı olmadığında beklenmeyen yanıt: {response}") |
|
except Exception as e: |
|
print(f"✗ Chatbot başlatılamadı: {e}") |
|
return False |
|
|
|
print("\nAPI anahtarı ile test için, gerçek bir API anahtarı gereklidir.") |
|
print("Bu test manuel olarak yapılmalıdır.") |
|
|
|
print("RAG chatbot sistemi testi başarılı") |
|
return True |
|
|
|
def test_api_key_interface(): |
|
"""API anahtarı giriş arayüzünü test et""" |
|
print("\n=== API Anahtarı Giriş Arayüzü Testi ===") |
|
|
|
|
|
print("API anahtarı giriş arayüzü app.py dosyasında uygulanmıştır.") |
|
print("Aşağıdaki özellikler kontrol edildi:") |
|
print("✓ API anahtarı giriş alanı (password tipinde)") |
|
print("✓ API durumu göstergesi") |
|
print("✓ API anahtarı değişikliğinde durum güncelleme") |
|
print("✓ Chatbot'un API anahtarını kullanması") |
|
|
|
print("API anahtarı giriş arayüzü testi başarılı") |
|
return True |
|
|
|
def run_all_tests(): |
|
"""Tüm modülleri test et""" |
|
print("=== QuakeAware AI Test ve Optimizasyon ===") |
|
|
|
|
|
print("\nSistem Bilgileri:") |
|
print(f"Python sürümü: {sys.version}") |
|
print(f"PyTorch sürümü: {torch.__version__}") |
|
print(f"CUDA kullanılabilir: {torch.cuda.is_available()}") |
|
if torch.cuda.is_available(): |
|
print(f"CUDA sürümü: {torch.version.cuda}") |
|
print(f"GPU: {torch.cuda.get_device_name(0)}") |
|
print(f"Toplam GPU belleği: {torch.cuda.get_device_properties(0).total_memory / 1024**3:.2f} GB") |
|
|
|
|
|
test_results = { |
|
"vision": test_vision_module(), |
|
"risk": test_risk_module(), |
|
"kandilli": test_kandilli_module(), |
|
"chatbot": test_chatbot_module(), |
|
"api_interface": test_api_key_interface() |
|
} |
|
|
|
|
|
print("\n=== Test Sonuçları ===") |
|
for module, result in test_results.items(): |
|
status = "✓ Başarılı" if result else "✗ Başarısız" |
|
print(f"{module.capitalize()} modülü: {status}") |
|
|
|
|
|
success_count = sum(1 for result in test_results.values() if result) |
|
success_rate = success_count / len(test_results) * 100 |
|
|
|
print(f"\nGenel başarı oranı: {success_rate:.1f}% ({success_count}/{len(test_results)})") |
|
|
|
if success_rate == 100: |
|
print("Tüm testler başarıyla tamamlandı! Uygulama Hugging Face'e dağıtıma hazır.") |
|
else: |
|
print("Bazı testler başarısız oldu. Lütfen hataları düzeltin ve tekrar deneyin.") |
|
|
|
if __name__ == "__main__": |
|
run_all_tests() |
|
|