Spaces:
Sleeping
Sleeping
| # Lane Detection Methods Documentation | |
| This document provides detailed information about the 6 lane detection methods implemented in this project. | |
| ## Overview | |
| The project now supports 6 different lane detection algorithms, each optimized for different scenarios: | |
| 1. **Basic Standard** - Fastest, simple straight lanes | |
| 2. **Basic Segmented** - Fast with curve support | |
| 3. **Advanced** - High accuracy with perspective transform | |
| 4. **YOLOP** - Multi-color lane detection | |
| 5. **UFLD** - Ultra-fast with good accuracy | |
| 6. **SCNN** - Best overall accuracy | |
| ## Method Comparison | |
| | Method | Speed | Accuracy | Curve Support | Best Use Case | | |
| |--------|-------|----------|---------------|---------------| | |
| | Basic Standard | β‘β‘β‘β‘β‘ | ββ | β | Straight highways | | |
| | Basic Segmented | β‘β‘β‘β‘ | βββ | β | Moderate curves | | |
| | Advanced | β‘β‘ | βββββ | ββ | Complex curved roads | | |
| | YOLOP | β‘β‘β‘β‘ | ββββ | β | Multi-color lanes | | |
| | UFLD | β‘β‘β‘ | ββββ | ββ | Real-time applications | | |
| | SCNN | β‘β‘β‘ | βββββ | ββ | Challenging conditions | | |
| ## Detailed Method Descriptions | |
| ### 1. Basic Standard (Hough Transform) | |
| **Algorithm:** | |
| - Grayscale conversion | |
| - Gaussian blur for noise reduction | |
| - Canny edge detection | |
| - Region of Interest (ROI) masking | |
| - Hough Line Transform | |
| - Line averaging and extrapolation | |
| **Pros:** | |
| - Fastest processing speed | |
| - Simple and reliable for straight lanes | |
| - Low computational requirements | |
| **Cons:** | |
| - Poor performance on curves | |
| - Struggles with dashed lines | |
| - Not suitable for complex road conditions | |
| **Best For:** Highway driving with straight lanes, dashcam footage, real-time low-power devices | |
| --- | |
| ### 2. Basic Segmented (Hough Transform) | |
| **Algorithm:** | |
| - Same preprocessing as Basic Standard | |
| - Multiple line segments instead of single averaged line | |
| - Better curve representation through segments | |
| - Maintains fast processing speed | |
| **Pros:** | |
| - Better curve handling than Basic Standard | |
| - Still very fast | |
| - Good balance for moderate curves | |
| **Cons:** | |
| - Not as accurate as polynomial methods | |
| - Can be choppy on sharp curves | |
| **Best For:** Urban driving with gentle curves, moderate-speed processing | |
| --- | |
| ### 3. Advanced (Perspective Transform + Polynomial) | |
| **Algorithm:** | |
| - Perspective transform to bird's eye view | |
| - HLS color space conversion | |
| - CLAHE (Contrast Limited Adaptive Histogram Equalization) | |
| - Enhanced gradient and direction filtering | |
| - Sliding window lane detection | |
| - 2nd degree polynomial fitting | |
| - Inverse perspective transform | |
| **Pros:** | |
| - Excellent accuracy on curves | |
| - Handles dashed lines very well | |
| - Enhanced mode for difficult conditions | |
| - Professional-grade results | |
| **Cons:** | |
| - Slower processing | |
| - More computationally intensive | |
| **Best For:** Complex curved roads, dashed lane lines, professional applications requiring high accuracy | |
| --- | |
| ### 4. YOLOP (Multi-task Learning) | |
| **Algorithm:** | |
| - Inspired by YOLOP (You Only Look Once for Panoptic Driving) | |
| - Multi-threshold color segmentation | |
| - Separate detection for white and yellow lanes | |
| - HLS color space analysis | |
| - Contour-based lane extraction | |
| - Morphological operations for noise reduction | |
| **Pros:** | |
| - Detects multiple lane colors (white, yellow) | |
| - Fast processing | |
| - Good accuracy for varied conditions | |
| - Robust to lighting changes | |
| **Cons:** | |
| - Less accurate than SCNN on complex curves | |
| - May struggle with worn lane markings | |
| **Best For:** Roads with yellow and white lanes, varied lighting conditions, multi-lane highways | |
| --- | |
| ### 5. UFLD (Ultra Fast Lane Detection) | |
| **Algorithm:** | |
| - Inspired by Ultra Fast Structure-aware Deep Lane Detection | |
| - Row-wise classification approach | |
| - CLAHE for contrast enhancement | |
| - Bilateral filtering for edge preservation | |
| - Adaptive thresholding | |
| - Row-based lane point detection | |
| - Polynomial curve fitting | |
| **Pros:** | |
| - Excellent speed/accuracy balance | |
| - Real-time capable | |
| - Good curve handling | |
| - Efficient row-wise processing | |
| **Cons:** | |
| - Slightly less accurate than SCNN in very complex scenarios | |
| - Requires good contrast | |
| **Best For:** Real-time applications, balanced performance requirements, curved roads | |
| --- | |
| ### 6. SCNN (Spatial CNN) | |
| **Algorithm:** | |
| - Inspired by Spatial CNN for traffic lane detection | |
| - Multi-scale edge detection | |
| - Spatial message passing in 4 directions | |
| - Enhanced gradient magnitude and direction analysis | |
| - Vertical edge filtering | |
| - Directional morphological operations | |
| - Sliding window with polynomial fitting | |
| **Pros:** | |
| - Best overall accuracy | |
| - Excellent for complex scenarios | |
| - Handles challenging conditions | |
| - Robust spatial feature extraction | |
| **Cons:** | |
| - More computationally intensive | |
| - Slower than basic methods | |
| **Best For:** Complex road conditions, challenging lighting, professional applications, maximum accuracy requirements | |
| ## Usage Examples | |
| ### Python API | |
| ```python | |
| from lane_detection import process_video, process_frame | |
| import cv2 | |
| # Process a single frame | |
| frame = cv2.imread('road_image.jpg') | |
| result = process_frame(frame, method='yolop') | |
| # Process a video with progress callback | |
| def progress_callback(value, desc): | |
| print(f"Progress: {value:.1%} - {desc}") | |
| success = process_video( | |
| 'input.mp4', | |
| 'output.mp4', | |
| method='ufld', | |
| progress_callback=progress_callback | |
| ) | |
| ``` | |
| ### Command Line Interface | |
| ```bash | |
| # Basic Standard | |
| python cli.py input.mp4 output.mp4 basic_standard | |
| # YOLOP | |
| python cli.py input.mp4 output.mp4 yolop | |
| # UFLD | |
| python cli.py input.mp4 output.mp4 ufld | |
| # SCNN | |
| python cli.py input.mp4 output.mp4 scnn | |
| # Advanced with enhanced thresholding | |
| python cli.py input.mp4 output.mp4 advanced true | |
| ``` | |
| ### Gradio Web Interface | |
| ```bash | |
| python app.py | |
| ``` | |
| Then open your browser to http://localhost:7860 and select your preferred method from the dropdown. | |
| ## Performance Benchmarks | |
| Based on test video (480p, 30fps, 60 frames): | |
| | Method | Processing Time | FPS | Relative Speed | | |
| |--------|----------------|-----|----------------| | |
| | Basic Standard | 0.08s | 750 | 1.0x (baseline) | | |
| | Basic Segmented | 0.09s | 667 | 0.89x | | |
| | YOLOP | 0.08s | 750 | 1.0x | | |
| | UFLD | 0.28s | 214 | 0.29x | | |
| | SCNN | 0.17s | 353 | 0.47x | | |
| | Advanced | 0.27s | 222 | 0.30x | | |
| *Note: Performance varies based on hardware, video resolution, and content complexity* | |
| ## Selection Guide | |
| ### Choose Basic Standard when: | |
| - Speed is the top priority | |
| - Lanes are mostly straight | |
| - Running on low-power devices | |
| - Real-time processing required | |
| ### Choose Basic Segmented when: | |
| - Need faster processing with curve support | |
| - Moderate curve handling needed | |
| - Good balance of speed and accuracy | |
| ### Choose Advanced when: | |
| - Best accuracy is required | |
| - Dealing with curved or dashed lanes | |
| - Can accept slower processing | |
| - Professional quality needed | |
| ### Choose YOLOP when: | |
| - Dealing with multiple lane colors | |
| - Need good speed with color robustness | |
| - Varied lighting conditions | |
| - Yellow and white lanes present | |
| ### Choose UFLD when: | |
| - Need real-time performance with good accuracy | |
| - Balanced speed/accuracy critical | |
| - Curved roads common | |
| - Resource-efficient processing needed | |
| ### Choose SCNN when: | |
| - Maximum accuracy required | |
| - Complex road conditions | |
| - Challenging scenarios | |
| - Can accept moderate processing time | |
| ## Technical Implementation Details | |
| ### Common Pipeline | |
| All methods share these preprocessing steps: | |
| 1. Video frame capture | |
| 2. ROI masking to focus on road area | |
| 3. Lane detection (method-specific) | |
| 4. Lane visualization | |
| 5. Side-by-side output generation | |
| ### Method-Specific Features | |
| **Basic Methods:** | |
| - Hough Transform for line detection | |
| - Line averaging and extrapolation | |
| - Fast but limited curve support | |
| **Advanced:** | |
| - Perspective transform | |
| - Polynomial fitting | |
| - Sliding window search | |
| - Inverse transform for visualization | |
| **YOLOP:** | |
| - Color-based segmentation | |
| - Contour extraction | |
| - Multi-color support | |
| **UFLD:** | |
| - Row-wise analysis | |
| - Adaptive thresholding | |
| - Efficient feature extraction | |
| **SCNN:** | |
| - Spatial convolutions | |
| - Message passing | |
| - Multi-scale detection | |
| ## Future Improvements | |
| Potential enhancements for future versions: | |
| - Deep learning models (actual YOLOP, UFLD, SCNN implementations) | |
| - GPU acceleration for all methods | |
| - Real-time video streaming support | |
| - Lane departure warning system | |
| - Vehicle positioning within lane | |
| - Distance estimation | |
| - Multiple lane tracking | |
| - Temporal smoothing across frames | |
| ## References | |
| - **Hough Transform**: Ballard, D.H. (1981). "Generalizing the Hough transform to detect arbitrary shapes" | |
| - **YOLOP**: Wu, D., et al. (2022). "YOLOP: You Only Look Once for Panoptic Driving Perception" | |
| - **UFLD**: Qin, Z., et al. (2020). "Ultra Fast Structure-aware Deep Lane Detection" | |
| - **SCNN**: Pan, X., et al. (2018). "Spatial As Deep: Spatial CNN for Traffic Scene Understanding" | |
| ## License | |
| MIT License - See LICENSE file for details | |