# Fahrzeug- und Objekt-Erkennungssystem [![Video Demo](https://img.youtube.com/vi/j94-OHGflT8/maxresdefault.jpg)](https://www.youtube.com/watch?v=j94-OHGflT8) Eine webbasierte Anwendung zur Echtzeit-Objekterkennung und -Verfolgung mittels YOLOv11. Die Anwendung unterstützt sowohl Live-Webcam-Streams als auch die Verarbeitung hochgeladener Videodateien. ## Funktionen - **Webcam-Erkennung**: Echtzeit-Objekterkennung über die Webcam - **Video-Upload**: Hochladen und Verarbeiten von Videodateien mit Objekterkennung - **Objekt-Tracking**: Persistente Verfolgung von Objekten mit eindeutigen IDs über Frames hinweg - **Visuelle Markierungen**: Bounding Boxes und Labels für erkannte Objekte - **Browser-basiert**: Einfacher Zugriff über den Webbrowser ## Voraussetzungen - Python 3.12 oder höher - Webcam (für Live-Erkennung) - YOLO-Modell (`yolo11s.pt`) im Hauptverzeichnis ## Installation 1. Repository klonen oder herunterladen 2. Erforderliche Python-Pakete installieren: ```bash pip3 install flask opencv-python numpy ultralytics ``` 3. Sicherstellen, dass die Modelldatei `yolo11s.pt` im Hauptverzeichnis vorhanden ist ## Verwendung ### Anwendung starten ```bash python3 app.py ``` Die Anwendung ist dann unter `http://localhost:8080` erreichbar. ### Webcam-Erkennung 1. Öffnen Sie `http://localhost:8080` im Browser 2. Klicken Sie auf "Start Webcam Detection" 3. Die Webcam wird aktiviert und Objekte werden in Echtzeit erkannt und markiert 4. Jedes Objekt erhält eine Track-ID und Klassenbeschriftung ### Video-Upload 1. Öffnen Sie `http://localhost:8080` im Browser 2. Wählen Sie eine Videodatei über das Upload-Formular aus 3. Klicken Sie auf "Upload Video" 4. Das Video wird verarbeitet und mit Objekterkennungen angezeigt ## Projektstruktur ``` . ├── app.py # Haupt-Flask-Anwendung ├── yolo11s.pt # YOLOv11-Modell (erforderlich) ├── templates/ # HTML-Templates │ ├── index.html # Startseite │ ├── webcam.html # Webcam-Anzeige │ └── play_video.html # Video-Wiedergabe ├── uploads/ # Hochgeladene Videos (automatisch erstellt) └── highway1.mp4 # Beispielvideo ``` ## Technische Details ### Verwendete Technologien - **Flask**: Web-Framework für Routing und Template-Rendering - **OpenCV**: Videobearbeitung und Frame-Manipulation - **Ultralytics YOLO**: YOLOv11-Modell für Objekterkennung und Tracking - **NumPy**: Array-Operationen für Bilddaten ### Verarbeitungs-Pipeline 1. **Frame-Erfassung**: Webcam oder Videodatei als Quelle 2. **Frame-Skipping**: Verarbeitung jedes 2. Frames zur Leistungsoptimierung 3. **Größenanpassung**: Alle Frames werden auf 1020x600 Pixel skaliert 4. **YOLO-Tracking**: Objekterkennung mit persistenten Track-IDs 5. **Annotation**: Zeichnen von Bounding Boxes und Labels 6. **Streaming**: Übertragung als MJPEG-Stream an den Browser ### Objekterkennung - Erkennt verschiedene Objektklassen (abhängig vom YOLO-Modell) - Vergibt eindeutige Track-IDs für jedes Objekt - Beschriftung im Format: `{Track-ID} - {Klassenname}` - Grüne Bounding Boxes um erkannte Objekte - Magenta-farbene Textbeschriftungen ## Leistungsoptimierung - **Frame-Skipping**: Nur jeder 2. Frame wird verarbeitet, um CPU-Last zu reduzieren - **Feste Auflösung**: Einheitliche Größe von 1020x600 Pixel für alle Frames - **Effizientes Streaming**: JPEG-Kompression für Frame-Übertragung ## Einschränkungen - Keine Validierung der Upload-Dateigröße - Keine automatische Bereinigung hochgeladener Dateien - Feste Frame-Dimensionen (1020x600) - Keine Fehlerbehandlung bei Webcam-Zugriffsproblemen ## Hinweise - Bei der ersten Verwendung kann das Laden des YOLO-Modells einige Sekunden dauern - Die Erkennungsgenauigkeit hängt vom verwendeten YOLO-Modell ab - Frame-Skipping kann bei sehr schnell bewegten Objekten zu Erkennungslücken führen - Hochgeladene Videos werden im Ordner `uploads/` gespeichert und müssen manuell gelöscht werden ## Lizenz Projekt basiert auf Ressourcen von [Pyresearch](https://pyresearch.org/)