YOLOv8s ve PySide6 ile geliştirilen bu masaüstü uygulaması, otopark videolarındaki araçları tespit eder, kullanıcı tarafından çizilen park alanlarını izler ve doluluk değişimlerini PostgreSQL veritabanına kaydeder.
Uygulama; video görüntüsünü ortada, alan çizimi ve araç tespit kontrollerini solda, canlı doluluk ile giriş/çıkış analizlerini sağda gösterir.
- Özellikler
- Proje bağlamı
- Ekran görüntüleri
- Gereksinimler
- Hızlı başlangıç
- Kullanım
- Yapılandırma
- Veritabanı
- Teknik mimari
- Proje yapısı
- Model ve GPU
- Durdurma ve temizleme
- Sınırlamalar
- YOLOv8s ONNX modeliyle
car,busvetrucktespiti - NVIDIA CUDA veya CPU ile çalışma
- PySide6 tabanlı donmayan masaüstü arayüzü
- Video üzerinde dört noktayla park alanı çizimi
- Alanları blok adı ve alan numarasıyla kaydetme
- Aynı blokta aynı alan numarasının tekrar oluşturulmasını engelleme
- Alan çizimi ve araç tespitini bağımsız kontrol etme
- Tek karelik kaçırmalara karşı zamansal kararlılık filtresi
- Araç giriş, çıkış ve kalış süresi kaydı
- Anlık doluluk ve araç türü analizi
- Sağ panelde bloklara göre gruplanmış alan listesi
Bu çalışma, Pamukkale Üniversitesi Teknoloji Fakültesi'nde 3. sınıfta verilen bir ders ödevi kapsamında geliştirilmiştir.
- Python 3.12 veya üzeri
- Docker Desktop
- Windows
- NVIDIA ekran kartı yalnızca CUDA hızlandırması için gereklidir
git clone https://github.com/emirkvrak/parking-vision.git
cd parking-vision
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
Copy-Item .env.example .env
docker compose up -d db
python -m src.parking_detection.mainUygulama ilk açılışta PostgreSQL tablolarını otomatik oluşturur. Model, örnek video ve sınıf listesi depoda hazır bulunduğu için ayrıca indirme gerekmez.
- Sol panelde
Alan çizimiaçıkken video üzerinde dört noktaya tıklayın. Yeni alanbölümünde blok adı ve alan numarasını girin.- Alan numarası kutusunda
Entertuşuna basarak alanı kaydedin. - Yeni alan çizmek için aynı işlemi tekrarlayın.
- Araç tespitini sol paneldeki
Araç tespitikontrolünden açın. - Geçici çizimi geri almak için video üzerinde sağ tıklayın.
- Kayıtlı alanı silmek için alanın içine sağ tıklayın.
Çizim ve araç tespiti aynı anda çalışabilir. Video penceresini kapatmak uygulamayı sonlandırır.
.env.example dosyasını .env olarak kopyalayın. Varsayılan ayarlarla ek bir değişiklik yapmanız gerekmez; yalnızca algılama hassasiyetini değiştirmek isterseniz şu değerleri düzenleyebilirsiniz:
DETECTION_CONFIDENCE=0.30
NMS_THRESHOLD=0.45.env dosyası Git'e gönderilmemelidir ve .gitignore tarafından korunur.
erDiagram
BLOCKS ||--o{ PARKING_AREAS : icerir
PARKING_AREAS ||--o{ ENTRY_EXIT_RECORDS : kaydeder
BLOCKS {
int id PK
string name UK
}
PARKING_AREAS {
int id PK
int block_id FK
int area_number
boolean is_full
jsonb points
}
ENTRY_EXIT_RECORDS {
int id PK
int parking_area_id FK
timestamp entry_time
timestamp exit_time
string vehicle_label
int duration_seconds
}
Bir blok birden fazla park alanı içerir; her alanın zaman içinde birden fazla giriş/çıkış kaydı olabilir. Aynı blokta aynı alan numarası tekrar oluşturulamaz ve alan silindiğinde ilişkili kayıtlar da silinir.
flowchart LR
Video[Video kaynağı] --> Reader[Video okuyucu]
Reader --> Detector[YOLOv8 ONNX]
Detector --> Processor[Doluluk işleme]
Processor --> UI[PySide6 arayüzü]
Processor --> Writer[Asenkron yazıcı]
Writer --> DB[(PostgreSQL)]
UI --> Area[Alan yönetimi]
Area --> DB
Video okuyucu ve araç tespit işlemleri ayrı thread’lerde çalışır. Veritabanı yazma işlemleri de asenkron yürütülerek arayüzün donması önlenir.
parking-vision/
├── assets/
│ ├── images/ # Yardımcı görseller
│ └── screenshots/ # README ekran görüntüleri
├── data/
│ ├── labels/ # Araç sınıf adları
│ └── videos/ # Örnek video
├── models/ # ONNX ve kaynak PT modeli
├── src/parking_detection/
│ ├── domain/ # Varlıklar ve iş kuralları
│ ├── application/ # Kullanım senaryoları ve servisler
│ ├── infrastructure/ # YOLO, video, PostgreSQL ve ayarlar
│ └── presentation/ # PySide6 arayüzü ve çizimler
├── tools/ # Model export aracı
├── docker-compose.yml # PostgreSQL konteyneri
├── requirements.txt # Çalışma zamanı paketleri
├── requirements-gpu.txt # CUDA destekli paketler
├── requirements-dev.txt # Geliştirme ve export paketleri
└── README.md
Çalışma zamanı modeli models/yolov8s.onnx dosyasıdır. models/yolov8s.pt yalnızca model dönüştürme veya geliştirme işlemleri için tutulur.
NVIDIA CUDA kullanmak için:
python -m pip install -r requirements-gpu.txtArayüzün sol panelinde modelin gerçekten GPU (CUDA) veya CPU ile çalıştığı gösterilir.
Model dışa aktarma işlemi yalnızca geliştiriciler için gereklidir; son kullanıcı requirements-dev.txt dosyasını kurmamalıdır.
PostgreSQL konteynerini durdurmak için:
docker compose downKonteyner ve veritabanı volume’unu da silmek için:
docker compose down -v- Araç tespiti COCO sınıflarındaki
car,busvetrucketiketleriyle sınırlıdır. - Model, özel otopark görüntüleriyle yeniden eğitilmemiş genel amaçlı YOLOv8s modelidir.
- Giriş/çıkış kaydı, sabit araç kimliği yerine alan doluluk değişimine göre oluşturulur.
- Uygulama şu anda tek video kaynağıyla çalışır.

