- Linienschnitt-Algorithmus für präzise Fahrzeugzählung - Interaktive Linienauswahl im Browser (Canvas-basiert) - Session-Management für benutzerdefinierte Zähllinien - Typ-spezifische Zähler (Autos, LKW, Busse, Motorräder) - REST-API für Linienkonfiguration und Zähler-Reset - Gestrichelte Zähllinie als Video-Overlay - Detailliertes Zähler-Display im Video Features: - Linienüberquerung-Erkennung (beide Richtungen) - Keine Mehrfachzählung durch Track-ID-Management - Funktioniert für Webcam und Video-Upload - Benutzerfreundliche UI mit Echtzeit-Feedback 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3.5 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
This is a Flask-based web application for real-time object detection and tracking using YOLOv11. The application supports both webcam streaming and uploaded video file processing with object detection overlays.
Key Dependencies
- Flask: Web framework for routing and serving HTML templates
- OpenCV (cv2): Video processing and frame manipulation
- Ultralytics YOLO: YOLOv11 model for object detection and tracking
- NumPy: Array operations for image data
The YOLO model file (yolo11s.pt) must be present in the root directory.
Running the Application
Start the Flask development server:
python3 app.py
The application runs on 0.0.0.0:8080 and is accessible at http://localhost:8080
Application Architecture
Single-File Structure
The entire application is contained in app.py with no separate modules. All routes, video processing logic, and model initialization are in this single file.
Core Components
YOLO Model (lines 10-11)
- Model loaded once at application startup:
model = YOLO("yolo11s.pt") - Class names extracted from model for labeling:
names = model.model.names
Video Processing Pattern Both webcam and uploaded video processing share identical detection logic:
- Frame skipping: Only processes every 2nd frame (
count % 2 != 0) for performance - Frame resizing: All frames resized to (1020, 600) for consistent output
- YOLO tracking: Uses
model.track(frame, persist=True)to maintain object IDs across frames - Annotation: Draws bounding boxes and labels with format
{track_id} - {class_name} - Streaming: Yields JPEG frames as multipart HTTP response
Duplicate Code
The functions detect_objects_from_webcam() (lines 21-52) and detect_objects_from_video() (lines 86-118) contain nearly identical logic - only the video source differs (webcam vs. file path).
Routes and Flow
Main Routes:
/- Landing page (index.html) with video upload form and webcam button/start_webcam- Webcam detection page (webcam.html)/upload[POST] - Handles video file uploads, saves touploads/directory/uploads/<filename>- Video playback page (play_video.html)
Streaming Routes:
/webcam_feed- Streams processed webcam frames with detections/video_feed/<filename>- Streams processed video file frames with detections/video/<filename>- Serves raw video files from uploads directory
Templates
All templates follow the same pattern:
- Centered layout with flex containers
- Fixed dimensions (1020x600) for video display
- "Back to Home" link for navigation
Important Notes
File Uploads
- Uploaded videos are saved to
uploads/directory (created automatically if missing) - No file size limits or validation beyond checking file existence
- No cleanup mechanism for uploaded files
Performance Optimization
- Frame skipping (every 2nd frame) reduces CPU load but may miss fast-moving objects
- Frame resizing to 1020x600 is hardcoded throughout
Object Tracking
- Uses persistent tracking (
persist=True) to maintain object IDs across frames - Track IDs are displayed alongside class names in the format:
{track_id} - {class_name} - Tracking state persists within a single video stream session
Webcam Access
- Uses
cv2.VideoCapture(0)for default webcam - No error handling if webcam is unavailable or already in use