Files
vehicle-counter/README.md
Joachim Hummel c8f49e41f9 YouTube-Demo-Video im README eingebettet
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-09 15:06:03 +00:00

119 lines
4.2 KiB
Markdown

# 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/)