The core of the system is the DLStreamer Pipeline Server, which orchestrates
three parallel pipelines defined in config.json.
| Pipeline Name | Camera View | Primary Adapters | Key Models |
|---|---|---|---|
toll-front |
Front LPR | sscape_adapter_lpr.py |
vehicle-detection, license-plate-detection, PP-OCRv4 |
toll-rear |
Rear LPR | sscape_adapter_lpr.py |
vehicle-detection, license-plate-detection, PP-OCRv4 |
toll-side1 |
Side Profile Lane 1 | sscape_adapter_side.py |
axle_int8, vehicle_type_model, color_int8 |
toll-side2 |
Side Profile Lane 2 | sscape_adapter_side.py |
axle_int8, vehicle_type_model, color_int8 |
Counting wheels is easy; counting taxable wheels is hard. Our adapter implements physics-based logic:
-
IoU Deduplication:
- Problem: A slow-moving truck might trigger multiple detections for the same wheel.
- Solution: We apply Intersection-over-Union (IoU) filtering. If extensive overlap (>40%) is detected between wheel bounding boxes, only the highest confidence detection is kept.
-
Ground Contact Physics (Lift Axle Detection):
-
Problem: Trucks often lift axles to save tires. These should not be taxed.
-
Solution: The algorithm calculates a dynamic "Ground Plane"
($Y_{ground}$)based on the lowest points of the vehicle body and clearly grounded wheels. -
Logic:
$$ Wheel_{status} = \begin{cases} Grounded, & \text{if } Y_{wheel\_bottom} \ge Y_{ground} - \text{Tolerance} \\ Lifted, & \text{otherwise} \end{cases} $$ -
Result: The payload reports
wheels_touching_groundseparately fromwheel_count.
-
The system captures evidence from all angles to create a complete "Vehicle Package". Instead of sending raw video streams, adapters encode "Evidence Crops" as Base64 strings directly inside the JSON MQTT payload.