# --- Visualization --- (This code continues inside the while loop)
# Draw the lane polygons on the frame
cv2.polylines(frame, [LANE_1_POLYGON], isClosed=True, color=(255, 255, 0), thickness=2)
cv2.polylines(frame, [LANE_2_POLYGON], isClosed=True, color=(255, 255, 0), thickness=2)
# Check for congestion and display status for Lane 1
if lane_1_count > CONGESTION_THRESHOLD:
status_1 = "CONGESTED"
color_1 = (0, 0, 255) # Red
else:
status_1 = "NORMAL"
color_1 = (0, 255, 0) # Green
cv2.putText(frame, f"Lane 1: {lane_1_count} ({status_1})", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, color_1, 2)
# Check for congestion and display status for Lane 2
if lane_2_count > CONGESTION_THRESHOLD:
status_2 = "CONGESTED"
color_2 = (0, 0, 255) # Red
else:
status_2 = "NORMAL"
color_2 = (0, 255, 0) # Green
cv2.putText(frame, f"Lane 2: {lane_2_count} ({status_2})", (530, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, color_2, 2)
# Display the frame with detections and status
cv2.imshow("Traffic Congestion Monitor", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
# Hashtags: #DataVisualization #OpenCV #TrafficFlow
---
#Step 5: Results and DiscussionWhen you run the script, a video window will appear. You will see:
• Yellow polygons outlining the defined lanes.
• Text at the top indicating the number of vehicles in each lane and its status ("NORMAL" or "CONGESTED").
• The status text and its color will change in real-time based on the vehicle count exceeding the
CONGESTION_THRESHOLD.Discussion of Results:
Threshold is Key: The
CONGESTION_THRESHOLD is the most important variable to tune. A value of 10 might be too high for a short lane or too low for a long one. It must be calibrated based on the specific camera view and what is considered "congested" for that road.Polygon Accuracy: The system's accuracy is highly dependent on how well you define the
LANE_POLYGON coordinates. They must accurately map to the lanes in the video, accounting for perspective.Limitations: This method only measures vehicle density (number of cars in an area). It does not measure traffic flow (vehicle speed). A lane could have many cars moving quickly (high density, but not congested) or a few stopped cars (low density, but very congested).
Potential Improvements:
Object Tracking: Implement an object tracker (like DeepSORT or BoT-SORT) to assign a unique ID to each car. This would allow you to calculate the average speed of vehicles within each lane, providing a much more reliable measure of congestion.
Time-Based Analysis: Analyze data over time. A lane that is consistently above the threshold for more than a minute is a stronger indicator of a traffic jam than a brief spike in vehicle count.
#ProjectComplete #AIforCities #Transportation
━━━━━━━━━━━━━━━
By: @CodeProgrammer ✨