Bu dosyayı projeye yeni katılan herkes okumalı. Teknik bilgi gerekmez. Aşağıda projeyi ve nasıl çalıştığını mümkün olduğunca sade anlatmaya çalıştım.
Yol kenarına veya araç içine kurulan bir kamera, yapay zeka ile görüntüyü analiz eder; tehlikeli bir durum gördüğünde 5G ağ hızını otomatik olarak artırır ve güvenlik ekibine anlık uyarı gönderir.
Bu proje TEKNOFEST 2026 yarışması için, Turkcell'in 5G & Yapay Zeka ile Akıllı Yol Güvenliği dalına katılmak üzere yapılıyor.
Yarışma bize şunu soruyor:
"Bir yol güvenlik sistemi kur. Araçları, sürücüleri ve plakalarını tespit et. Tehlike anında CAMARA QoD API ile bant genişliğini artır. Ama bant genişliğini her zaman yüksek tutma — sadece gerektiğinde kullan."
Bu üç şeyi ne kadar iyi yaptığımıza göre puan alıyoruz.
Projeyi bir fabrika gibi düşün. Fabrikada üç ana bölüm var:
┌─────────────────────────────────────────────────────────┐
│ SİSTEM AKIŞI │
│ │
│ 📱 Mobil/Web ──kare──► 🖥️ Backend ──kare──► 🤖 YZ │
│ (ön yüz) ◄──sonuç── (sunucu) ◄──sonuç── (ai) │
└─────────────────────────────────────────────────────────┘
- Web tarayıcıda açılan güvenlik konsolu (
frontend/) - iPhone/Android uygulaması (
mobile/) - Kameradan görüntü alır, saniyede 5-7 kare backend'e yollar
- Sonuçları ekranda gösterir (kutular, plaka, hız, risk skoru)
backend/klasöründe yaşar- Her gelen kareyi YZ'ye gönderir
- YZ'nin sonuçlarını alır, kaydeder, ön yüze gönderir
- QoD sistemini yönetir (bant genişliği kararı)
- REST API + WebSocket ile konuşur
ai/klasöründe yaşar- Her kareyi analiz eder:
- Araç var mı? Nerede?
- Plaka ne?
- Hız kaç km/h?
- Sürücü telefon tutuyor mu?
- Risk skoru kaç?
QoD = Quality on Demand = İsteğe Bağlı Kalite
Normal hayatta internete bağlandığında bir hız alırsın. Ama bazı durumlarda "şu an 5 dakika için bana 4 kat daha hızlı internet ver" diyebilirsin. İşte bu QoD.
Biz bunu yol güvenliğinde şöyle kullanıyoruz:
Durum 1 — Normal (Araç uzakta):
Kamera 480p görüntü gönderir → 5 Mbps yeterli
Durum 2 — Kritik (Araç yaklaşıyor, tehlike var):
Sistem CAMARA API'sine "bana 20 Mbps ver" der
Kamera 1080p görüntüye geçer
Daha detaylı analiz başlar
Tehlike geçince bant tekrar 5 Mbps'e düşer
Neden önemli? Yarışmada puan almak için bant genişliğini sadece gerektiğinde kullanmamız gerekiyor. Sürekli yüksek bant = puan kaybı.
teknofest-prototip/
│
├── ai/ ← Yapay Zeka kolu
│ ├── detector.py Araç tespiti (YOLOv8)
│ ├── plate_ocr.py Plaka okuma
│ ├── speed.py Hız tahmini
│ ├── driver_state.py Sürücü durumu (telefon, yorgunluk)
│ ├── risk.py Risk skoru hesaplama
│ ├── pipeline.py Hepsini bir araya getiren orkestratör
│ ├── qod_trigger.py Ne zaman bant artırılacağına karar verir
│ └── training/ Model eğitimi
│
├── backend/ ← API kolu
│ ├── main.py Sunucunun ana dosyası
│ ├── qod_manager.py QoD yönetimi
│ ├── db.py Veritabanı işlemleri
│ └── camara/ CAMARA API simülasyonu
│
├── frontend/ ← Web arayüzü (entegrasyon kolu)
│ ├── index.html Ana sayfa
│ ├── app.js Kamera + WebSocket kodu
│ └── styles.css Görsel tasarım
│
├── mobile/ ← Mobil kol
│ ├── App.tsx Ana uygulama
│ └── src/
│ ├── screens/ Ekranlar (Login, Dashboard, EventDetail)
│ └── api/ Backend bağlantısı
│
├── tests/ ← Test dosyaları
├── docs/ ← Bu belgeler (şu an buradasın)
├── config/settings.py Tüm ayarlar tek yerde
└── requirements.txt Python paketleri
| Kol | Sorumluluk | Dosyalar |
|---|---|---|
| YZ | Araç/plaka/sürücü tespiti, risk skoru | ai/ |
| API | Sunucu, veri akışı, CAMARA entegrasyonu | backend/ |
| Mobil | iPhone/Android uygulaması | mobile/ |
| Entegrasyon | Parçaları birleştirme, web arayüzü, testler | frontend/, tests/ |
| Rapor | Teknik rapor, sunum, dokümantasyon | docs/, sunumlar |
# Proje klasörüne gir
cd teknofest-prototip
# Çalıştır (ilk seferde bağımlılıkları indirir, biraz sürer)
./run_dev.shÇıktıda şunu görürsen başarılı:
http://localhost:8000/ adresinde çalışıyor
Tarayıcıda http://localhost:8000/ yaz, açılmalı.
make testProjede çok kullanılan teknik kelimelerin sade açıklamaları:
| Kelime | Ne Demek |
|---|---|
| API | İki yazılımın birbiriyle konuşması için kurallar seti. "Menü" gibi düşün — ne isteyebileceğini listeler. |
| WebSocket | Sürekli açık kalan bir bağlantı. Normal internet gibi değil; "kapıyı açık bırak, haberler gelince bana söyle" gibi. |
| REST | API'nin bir türü. Her şey URL'lerle ve HTTP istekleriyle yapılır. |
| YOLOv8 | Gerçek zamanlı nesne tespit yapay zeka modeli. Bir görüntüde "bu kare, bu nesne" der. |
| OCR | Optical Character Recognition — görüntüdeki yazıyı okuma. Plakayı okumak için kullanılıyoruz. |
| MediaPipe | Google'ın yüz ve vücut takip kütüphanesi. Sürücünün gözlerini takip etmek için. |
| FastAPI | Python ile hızlı API yazmak için kullanılan bir araç (framework). |
| React Native | Hem iOS hem Android için uygulama yazmayı sağlayan araç. |
| Expo | React Native'i kolaylaştıran ek araçlar paketi. |
| TypeScript | JavaScript'e tip kontrolü eklenmiş hali. Hatalar önceden yakalanır. |
| SQLite | Küçük, dosya tabanlı veritabanı. Olayları kaydetmek için kullanıyoruz. |
| QoD | Quality on Demand — isteğe bağlı ağ kalitesi. |
| CAMARA | 5G şebeke API'lerini standartlaştıran açık kaynak proje. |
| Mock | Gerçek olmayan, test için taklit eden. "Mock CAMARA" = gerçek 5G ağı yerine simülasyon. |
| Kare (Frame) | Videonun tek bir fotoğrafı. Saniyede ~30 kare geliyor. |
| Bbox | Bounding Box — tespit edilen nesnenin etrafını çizen dikdörtgen. |
| Confidence | Modelin "ne kadar emin olduğu" (0-1 arası). 0.85 = %85 emin. |
| Profile | Normal veya Kritik mod. Kritik'te daha ağır model çalışır. |
- Kamera görüntüyü alır → Telefon ya da bilgisayar kamerası açık
- Ön yüz kareyi sıkıştırır → 640px genişliğe düşürür, JPEG yapar
- WebSocket ile gönderir → Backend'e saniyede 5-7 kez
- Backend kareyi alır →
backend/main.py'deki/ws/ingestnoktasına gelir - YZ pipeline çalışır →
ai/pipeline.pyhepsini sırayla işler:- YOLO ile araç tespit et
- Takip et (aynı araç mı?)
- Hızı hesapla
- Plakayı oku (sadece kritik modda)
- Sürücü durumunu kontrol et
- Risk skorunu hesapla
- QoD motoru karar verir → "Kritik moda geç mi, geçme mi?"
- Sonuç ön yüze döner → JSON olarak WebSocket üzerinden
- Ön yüz ekrana çizer → Kutular, plaka, hız, risk gösterilir
- Olay kaydedilir → Risk skoru 30+ ise SQLite'a yazılır
.envdosyasını asla GitHub'a yükleme. Bu dosya API anahtarları gibi gizli bilgiler içerir..venv/klasörü de yüklenmemeli.requirements.txtzaten neyin gerekli olduğunu söylüyor.model.ptdosyaları da yüklenmemeli. Bunlar büyük model dosyaları.- Her kol kendi dalında (branch) çalışmalı,
maindoğrudan değiştirilmemeli.
S: Gerçek 5G ağım yok, nasıl test edeceğim? C: CAMARA API'si mock (simülasyon) modda çalışıyor. Gerçek 5G gerekmez. Sistem kendi kendine simüle ediyor.
S: YOLOv8 modeli yoksa ne olur? C: Sistem otomatik olarak "mock" moda geçer. Gerçek tespit yapamaz ama tüm sistem çalışmaya devam eder, testler geçer.
S: Koda hiç dokunmadan testleri nasıl çalıştırırım?
C: make test yaz. Otomatik olarak her şeyi mock modda çalıştırır.
S: Hangi Python sürümü gerekli? C: Python 3.10 veya üzeri (3.13'te test edildi).
S: Node.js gerekiyor mu?
C: Sadece mobil uygulamayı çalıştırmak için (mobile/ klasörü). Backend için gerekmez.
- YZ kolundaysanız:
docs/yz.md - API kolundaysanız:
docs/api.md - Mobil kolundaysanız:
docs/mobil.md - Entegrasyon kolundaysanız:
docs/entegrasyon.md - Rapor/Sunum kolundaysanız:
docs/rapor.md