Uydu goruntusu ile yapay zeka destekli cevresel monitoring ve erken uyari platformu.
GeoMorphosis, kullaniciin harita uzerinden sectigi bolgelerde yangin, kirlilik, agaclarin azalmasi ve cevresel degisimleri yapay zeka ile analiz eden, otomatik bildirimler gonderen ve PDF rapor ureten bir web platformudur.
GeoMorphosis/
├── frontend/ # Next.js + TailwindCSS + Leaflet
├── ai-engine/ # Python FastAPI + YOLOv8 + Rasterio (Vezne)
├── worker/ # Node.js kuyruk tuketicisi (Mutfak)
└── data/ # SQLite veritabani ve uydu goruntusu onbellegi
Tarayici Frontend (Next.js) AI Engine (FastAPI) Worker (Node)
| | | |
|-- bolge ciz + baslat --> | | |
| |-- POST /api/analyze -->| |
| | |-- Redis taskQueue -->|
|<---- task_id ------------|<---- task_id ----------| |
| | | |
| | |<-- POST /internal/analyze
| | | (uydu indir + YOLO + NDVI)
| | |--- sonuc ----------->|
| | | Redis: completed |
|-- 3sn'de bir polling --> |-- GET /api/status/id ->| |
|<---- analiz sonucu ------| | |
Model worker'in cagirdigi /internal/analyze icinde calisir. Worker kendisi
analiz yapmaz; kuyrugu tuketir, AI Engine'i cagirir, sonucu Redis'e yazar ve
erken uyari e-postasini gonderir.
- Node.js >= 18
- Python >= 3.11
- Docker >= 24.0 (opsiyonel)
cd frontend
npm install
npm run devUygulama http://localhost:3000 adresinde calisir.
cd ai-engine
python -m venv venv
source venv/Scripts/activate # Windows
# source venv/bin/activate # Linux/Mac
pip install -r requirements.txt
uvicorn main:app --reload --port 8000API http://localhost:8000 adresinde calisir.
Worker, Redis kuyrugunu dinler ve AI Engine'i cagirir; ikisi de ayakta olmali.
cd worker
npm install
REDIS_HOST=localhost AI_ENGINE_URL=http://localhost:8000 npm startGeliştirme ortamında hızlıca çalıştırmak ve değişiklikler yapmak için:
.\dev-start.ps1
veya .\dev-start.sh
.\dev-start.ps1 -Install
veya .\dev-start.sh -Install
Tum zinciri (frontend + ai-engine + worker + redis) birlikte ayaga kaldirmanin en kolay yolu:
# Ornek env dosyasini kopyala
cp .env.example .env
# .env dosyasini duzenle (API anahtarlari)
# Tum servisleri baslat
docker-compose up --buildBildirim kanallari (e-posta ve Telegram abonelikleri) notification_channels
tablosunda tutulur. Bu tablo Prisma migration'i ile geliyor ve otomatik
uygulanmiyor; uygulanmazsa bildirimler sessizce basarisiz olur, arayuzde
hicbir hata gorunmez.
docker compose exec web-client npx prisma migrate deployP3005: The database schema is not empty hatasi alirsaniz sebebi su: ai-engine
kendi tablolarini (regions_analysis, periodic_subscriptions) ham SQL ile
olusturuyor, dolayisiyla veritabani bos degil ama Prisma'nin migration gecmisi
yok. Mevcut migration'lari uygulanmis olarak isaretleyin:
docker compose exec web-client npx prisma migrate resolve --applied 20260822171849_notification_channelsSema degistiginde uretilmis Prisma istemcisi de yenilenmeli. node_modules
anonim volume'da donduğu icin restart yetmez:
docker compose exec web-client npx prisma generate && docker compose restart web-clientcd ai-engine && python -m pytest -q tests/cd worker && npm install && node --testcd frontend && npm run test| Komut | Aciklama |
|---|---|
npm install |
Bagimliliklari yukler |
npm run dev |
Gelistirme sunucusu baslatir |
npm run build |
Uretim derlemesi yapar |
npm start |
Uretim sunucusu baslatir |
npm run lint |
Kod denetimi yapar |
Iki adet ornek dosya var:
- Kok dizindeki
.env.example->docker-composetarafindan okunur frontend/.env.example-> Next.js tarafindan okunur
Ikisini de .env olarak kopyalayin ve doldurun.
| Degisken | Aciklama |
|---|---|
COPERNICUS_CLIENT_ID |
Copernicus API kimligi |
COPERNICUS_CLIENT_SECRET |
Copernicus API sifresi |
NASA_FIRMS_API_KEY |
NASA FIRMS API anahtari |
SMTP_USER |
E-posta gonderici adresi |
SMTP_PASS |
E-posta uygulama sifresi |
ALERT_EMAIL_TO |
Erken uyari e-postasinin alicisi (bos ise SMTP_USER) |
TELEGRAM_BOT_TOKEN |
Telegram bot anahtari |
TELEGRAM_CHAT_ID |
Varsayilan Telegram alicisi |
MODEL_PATH |
YOLO agirlik dosyasi yolu (bos ise otomatik aranir) |
YOLO_CONF_THRESHOLD |
Nesne tespiti guven esigi (varsayilan 0.25) |
REDIS_HOST / REDIS_PORT |
Kuyruk sunucusu (docker disinda localhost) |
AI_ENGINE_URL |
Worker'in cagiracagi AI Engine adresi |
ANALYSIS_TIMEOUT_MS |
Uydu indirme + YOLO ust siniri (varsayilan 180000) |
GEOMORPHOSIS_DATA_DIR |
AI Engine veritabani/onbellek klasoru (docker disinda paylasim icin) |
MODEL_PATH bos birakilirsa su sira ile aranir:
ai-engine/models/fire_yolov8_v2.ptai-engine/models/fire_yolov8.ptai-engine/yolov8n.pt
Hicbiri bulunamazsa sistem cokmez; nesne tespiti atlanir, risk degerleri
yalnizca NDVI degisimine dayanir ve sonuc model_loaded: false ile isaretlenir.
Agirlik dosyalari .gitignore'da oldugu icin repo ile birlikte gelmez.
| Method | Endpoint | Aciklama |
|---|---|---|
| POST | /api/analyze |
Analizi kuyruga alir, task_id doner |
| GET | /api/status/{task_id} |
Gorev durumunu doner (pending/processing/completed/failed) |
| POST | /internal/analyze |
Modeli senkron calistirir (worker kullanir, disariya acilmaz) |
| GET | /satellite/latest |
Bolgenin en guncel uydu goruntusunu doner |
| Method | Endpoint | Aciklama |
|---|---|---|
| POST | /api/analyze |
Analizi baslatir (AI Engine'e vekalet eder) |
| GET | /api/analyze?task_id= |
Analiz durumunu sorgular |
| POST | /api/subscribe |
Bildirim aboneligi olusturur |
| POST | /api/notify |
Telegram bildirimi gonderir |
| POST | /api/notify/email |
E-posta bildirimi gonderir |
completed durumundaki result alani hem frontend'in dogrudan okudugu duz
alanlari hem detayli blogu icerir:
- Frontend: Next.js 14, React 18, TailwindCSS 3, Leaflet, Bootstrap 5
- AI Engine: Python, FastAPI, YOLOv8, OpenCV, Rasterio
- Worker: Node.js, node-cron, Nodemailer
- Veritabani: SQLite
- Container: Docker, Docker Compose
MIT
{ "status": "Analiz tamamlandı", "timestamp": "2026-08-08T12:00:00Z", "region_name": "36.8530, 28.2715", "ndvi_score": 0.61, "fire_risk": "orta", // yok | dusuk | orta | yuksek "pollution_level": "dusuk", "demo_mode": false, "model_loaded": true, "region_id": 12, "ai_results": { "yolo_detections": [{ "class": "fire", "confidence": 0.82, "bbox": [] }], "environmental_metrics": { "ndvi_t1_mean": 0.0, "ndvi_t2_mean": 0.0, "ndvi_change": 0.0 }, "change_detection": { "deforestation": {}, "lake_shrinkage": {} } }, "downloaded": [] }