Skip to content
This repository was archived by the owner on Sep 10, 2026. It is now read-only.
emirkvrakPublic archive

About

YOLOv8 ve PySide6 ile otopark videolarında araç tespiti ve doluluk analizi.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

Otopark Araç Tespit ve Doluluk Analizi

Python PySide6 YOLOv8 ONNX Runtime PostgreSQL Docker

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.

İçindekiler

Özellikler

  • YOLOv8s ONNX modeliyle car, bus ve truck tespiti
  • 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

Proje bağlamı

Bu çalışma, Pamukkale Üniversitesi Teknoloji Fakültesi'nde 3. sınıfta verilen bir ders ödevi kapsamında geliştirilmiştir.

Ekran görüntüleri

Araç tespiti açık

Araç tespiti açık

Araç tespiti kapalı

Araç tespiti kapalı

Gereksinimler

  • Python 3.12 veya üzeri
  • Docker Desktop
  • Windows
  • NVIDIA ekran kartı yalnızca CUDA hızlandırması için gereklidir

Hızlı başlangıç

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.main

Uygulama 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.

Kullanım

  1. Sol panelde Alan çizimi açıkken video üzerinde dört noktaya tıklayın.
  2. Yeni alan bölümünde blok adı ve alan numarasını girin.
  3. Alan numarası kutusunda Enter tuşuna basarak alanı kaydedin.
  4. Yeni alan çizmek için aynı işlemi tekrarlayın.
  5. Araç tespitini sol paneldeki Araç tespiti kontrolünden açın.
  6. Geçici çizimi geri almak için video üzerinde sağ tıklayın.
  7. 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.

Yapılandırma

.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.

Veritabanı

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
    }
Loading

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.

Teknik mimari

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
Loading

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.

Proje yapısı

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

Model ve GPU

Ç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.txt

Arayü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.

Durdurma ve temizleme

PostgreSQL konteynerini durdurmak için:

docker compose down

Konteyner ve veritabanı volume’unu da silmek için:

docker compose down -v

Sınırlamalar

  • Araç tespiti COCO sınıflarındaki car, bus ve truck etiketleriyle 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.

About

YOLOv8 ve PySide6 ile otopark videolarında araç tespiti ve doluluk analizi.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Contributors

Languages