Giới thiệu dự án

Ùn tắc giao thông tại các đô thị lớn như Thành phố Hồ Chí Minh là thách thức kinh tế - xã hội nghiêm trọng, gây lãng phí hàng triệu giờ công và gia tăng lượng khí thải độc hại. Theo thống kê giao thông đô thị, tổn thất kinh tế do ùn tắc tại các đô thị đặc biệt có thể chiếm từ 1% đến 3% GDP hàng năm. Mặc dù mạng lưới hơn 400 camera giám sát công cộng đã được lắp đặt rộng khắp thành phố, dữ liệu hình ảnh phần lớn chỉ phục vụ quan sát thủ công hoặc ghi nhận thụ động sau va chạm mà chưa được khai thác tự động theo thời gian thực.

Vấn đề cốt lõi hiện nay là:

  • Các giải pháp đếm đầu xe (vehicle counting) truyền thống không phản ánh chính xác mức độ ùn tắc do không tính đến tỷ lệ chiếm dụng mặt đường.
  • Góc quay camera nghiêng (perspective distortion) khiến vật thể ở gần có kích thước lớn hơn vật thể ở xa, làm sai lệch nghiêm trọng các phép tính diện tích nếu chỉ đếm pixel thông thường.
  • Thiếu khả năng dự báo xu hướng dòng xe trong các khoảng thời gian tiếp theo (10–60 phút) để cảnh báo sớm cho người tham gia giao thông.
                                                             [Mô Hình LSTM: Dự Báo 1 Giờ Tới]
                                                             [Giao Diện CustomTkinter + Map]

Dự án "Ứng dụng thuật toán cảnh báo ùn tắc giao thông và đề xuất đường đi thay thế" giải quyết bài toán trên thông qua 4 mục tiêu cụ thể:

  1. Xây dựng mô hình thị giác máy tính nhận diện và phân loại phương tiện giao thông (xe 2 bánh, ô tô, xe buýt/xe tải) đạt độ chính xác Precision $\ge 79%$.
  2. Phát triển giải pháp hình học tính toán bù sai lệch phối cảnh (perspective compensation) dựa trên cấp số cộng để đo lường chính xác tỷ lệ diện tích phương tiện chiếm dụng mặt đường.
  3. Huấn luyện mô hình hồi quy chuỗi thời gian (Long Short-Term Memory - LSTM) dự báo mật độ giao thông tại các nút trọng điểm trong chu kỳ 1 giờ tiếp theo.
  4. Tích hợp toàn bộ hệ thống vào ứng dụng Desktop trực quan hóa bản đồ, hiển thị luồng dữ liệu camera và cảnh báo tắc nghẽn tức thời.

Phạm vi nghiên cứu tập trung vào 419 điểm camera công cộng tại TP.HCM, xử lý dữ liệu ảnh độ phân giải $512 \times 512$ pixel với chu kỳ lấy mẫu 10 phút/lần, không can thiệp phần cứng camera hạ tầng.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Các giải pháp giám sát và cảnh báo giao thông hiện hành chủ yếu dựa trên cảm biến từ trường (loop detectors), GPS từ phương tiện di chuyển (Google Maps Traffic) hoặc xử lý ảnh đếm vật thể thuần túy:

Tiêu chí Cảm biến vòng từ (Loop Detector) Dữ liệu GPS hành trình (FCD) Đếm xe qua Camera (Object Counting) Giải pháp đề xuất (YOLOv5 + LSTM + Mask)
Chi phí triển khai Rất cao (cắt đường, bảo trì cơ học) Thấp (thu thập từ app di động) Trung bình (tận dụng camera có sẵn) Thấp (tận dụng camera mở có sẵn)
Độ chính xác không gian Rất cao tại 1 điểm cắt Trung bình (phụ thuộc mật độ người bật GPS) Trung bình (bị che khuất điểm ảnh) Cao (tính toán diện tích mặt đường thực)
Tính trực quan Không có hình ảnh Bản đồ số Có hình ảnh thời gian thực Hình ảnh trực tiếp kèm phân tích mật độ
Dự báo chuỗi thời gian Hạn chế Dựa trên thuật toán định tuyến Không có Có (Mô hình LSTM chuyên biệt)

Phân tích yêu cầu chức năng theo chuẩn MoSCoW:

  • Must have: Nhận diện 3 lớp đối tượng (motor, car, bus); tạo mặt nạ phân vùng mặt đường; tính toán mật độ phần trăm chiếm dụng; hiển thị cảnh báo lên giao diện.
  • Should have: Dự báo mật độ giao thông trong 1 giờ tiếp theo bằng mô hình LSTM; công cụ tìm kiếm vị trí camera theo địa chỉ.
  • Could have: Tự động đề xuất lộ trình thay thế khi mật độ vượt ngưỡng $60%$; xuất log báo cáo chuỗi thời gian dạng CSV.
  • Won't have (in this phase): Nhận diện biển số xe vi phạm; tái dựng 3D mô phỏng luồng giao thông hoàn chỉnh.

Thiết kế hệ thống

Hệ thống được thiết kế theo kiến trúc module hóa hướng dữ liệu, tách biệt giữa tầng thu thập (Ingestion), tầng suy luận thị giác máy tính (Computer Vision Engine), tầng dự báo (Forecasting Engine) và tầng hiển thị (Presentation Layer):

+-----------------------------------------------------------------------------------+
|                                PRESENTATION LAYER                                 |
|         CustomTkinter GUI | Bản đồ OpenStreetMap | Biểu đồ Matplotlib            |
|                                APPLICATION LOGIC                                  |
|   +------------------------------------+   +------------------------------------+ |
|   |         Vision Pipeline            |   |        Forecasting Pipeline        | |
|   | - PyTorch YOLOv5s Inference        |   | - PyTorch/Keras LSTM Engine        | |
|   | - OpenCV Masking & Bitwise-AND     |   | - Time-series Preprocessing        | |
|   | - Arithmetic Progression Scaling   |   | - 10-min Step Horizon Predictor    | |
|   +------------------------------------+   +------------------------------------+ |
|                            DATA & INTEGRATION LAYER                               |
|   HCMC Traffic Camera Snapshot API | Local CSV Storage (21.794 records) | YAML Cfg|
+-----------------------------------------------------------------------------------+

Technology Stack & Versions

  • Ngôn ngữ cốt lõi: Python 3.8+
  • Deep Learning Framework: PyTorch $\ge 1.7.0$, Torchvision $\ge 0.8.1$, CUDA 10.1 (hỗ trợ tăng tốc phần cứng trên GPU Tesla P100 16GB).
  • Thị giác máy tính & Xử lý số liệu: OpenCV-Python (cv2), NumPy, Pandas.
  • Machine Learning & Time-series: Scikit-learn, PyTorch RNN/LSTM Modules.
  • Giao diện Desktop: tkinter, customtkinter, matplotlib.

Methodology

Quy trình phát triển áp dụng mô hình lặp (Iterative Engineering Methodology) chia làm 5 giai đoạn:

Đánh giá và giảm thiểu rủi ro:

  • Rủi ro rớt kết nối API camera: Bổ sung cơ chế fallback tự động retry và bắt ngoại lệ requests.exceptions.RequestException.
  • Rủi ro quá tải bộ nhớ khi chạy suy luận liên tục: Sử dụng torch.no_grad() trong pha inference và giải phóng frame bộ đệm OpenCV định kỳ.

Implementation và kết quả

Development process

1. Huấn luyện mô hình YOLOv5s trên Custom Dataset

Tập dữ liệu thô gồm 2.516 ảnh thu thập từ 419 camera giao thông tại TP.HCM. Sau khi áp dụng Data Augmentation (xoay góc $-18^\circ$ đến $+18^\circ$, crop ngang $-33^\circ$ đến $+33^\circ$, crop dọc $-25^\circ$ đến $+25^\circ$), tập dữ liệu mở rộng lên 4.808 ảnh chuẩn kích thước $512 \times 512$ pixel. Dữ liệu được chia theo tỷ lệ 85% Train, 10% Validation, 5% Test.

Cấu hình huấn luyện mô hình:

!python /content/yolov5/train.py \
  --img 640 \
  --batch 32 \
  --epochs 100 \
  --data /content/datatrain/mydataset.yaml \
  --weights yolov5s.pt \
  --project /content/drive/MyDrive/ \
  --name checkpoint_traffic \
  --device 0 \
  --cache disk

2. Xử lý mặt nạ tuyến đường và bù phối cảnh

Để tính diện tích mặt đường hợp lệ, hệ thống tạo mặt nạ nhị phân dựa trên mã màu xanh tiêu chuẩn (#0ed145), sau đó thực hiện phép toán bitwise_and:

import cv2
import numpy as np

def apply_road_mask(image, mask_image):
    # Chuyển đổi mặt nạ sang ảnh nhị phân
    lower_green = np.array([35, 50, 50])
    upper_green = np.array([85, 255, 255])
    hsv_mask = cv2.cvtColor(mask_image, cv2.COLOR_BGR2HSV)
    binary_mask = cv2.inRange(hsv_mask, lower_green, upper_green)
    
    # Giữ lại khu vực mặt đường thông qua phép AND bitwise
    masked_frame = cv2.bitwise_and(image, image, mask=binary_mask)
    return masked_frame, binary_mask

Do camera đặt trên cao nhìn chéo xuống, tỷ lệ kích thước điểm ảnh thay đổi theo trục dọc ($y$). Hệ thống mô hình hóa hệ số thu nhỏ của mỗi hàng pixel theo một cấp số cộng:

$$\text{pixel_scale}(%) = \frac{\text{max_scale} - \text{min_scale}}{\text{image_height}}$$

$$q = \frac{\text{pixel_scale}}{100}$$

$$u_1 = 1 + (\text{image_height} - 1 - y_{\max}) \times q$$

Tổng tỷ lệ chiều cao của bounding box gồm $n = y_{\max} - y_{\min}$ hàng điểm ảnh được tính bằng công thức tổng cấp số cộng:

$$S_n = u_1 \times n + \frac{n \times (n + 1) \times q}{2}$$

Diện tích thực tế của mỗi phương tiện:

$$\text{Area}{\text{vehicle}} = S_n \times (x{\max} - x_{\min})$$

def calculate_vehicle_area(bbox, img_height, max_scale=1.0, min_scale=0.0):
    xmin, ymin, xmax, ymax = bbox
    n = ymax - ymin
    width = xmax - xmin
    
    pixel_scale = (max_scale - min_scale) / img_height
    q = pixel_scale / 100.0
    u1 = 1.0 + (img_height - 1 - ymax) * q
    
    Sn = (u1 * n) + (n * (n + 1) * q) / 2.0
    return Sn * width

Mật độ giao thông tổng thể được xác định bằng tỷ lệ phần trăm giữa tổng diện tích các phương tiện (sử dụng giá trị trung vị theo từng lớp) chia cho tổng diện tích mặt nạ đường:

$$\text{Density}(%) = \frac{\sum \text{Area}{\text{vehicles}}}{\text{Area}{\text{road_mask}}} \times 100$$

Testing và validation

Đánh giá mô hình thị giác máy tính (YOLOv5s)

Sau 100 epochs huấn luyện trên phần cứng Google Colab (Nvidia Tesla P100-PCIE-16GB), mô hình đạt các chỉ số:

  • Precision: $79.2%$ trên toàn bộ các lớp đối tượng.
  • Recall: $76.8%$.
  • mAP@0.5: $0.814$.

Mô hình nhận diện chính xác xe máy mật độ cao trong điều kiện giao thông đông đúc, loại bỏ tốt các vùng nhiễu bên ngoài lề đường nhờ mặt nạ nhị phân.

                  Confusion Matrix (Normalized)
                        motor   Car/Bus   Background

Đánh giá mô hình dự báo chuỗi thời gian (Time-series)

Bộ dữ liệu gồm 21.794 bản ghi thu thập liên tục 10 phút/lần được chia theo tỷ lệ 90% Train và 10% Test. Ba thuật toán được so sánh để lựa chọn giải pháp tối ưu:

Thuật toán dự báo Mean Squared Error (MSE) Root Mean Squared Error (RMSE) Mean Absolute Error (MAE) Thời gian suy luận (ms)
Random Forest Regressor 0.0412 0.2029 0.1582 4.2 ms
Gated Recurrent Unit (GRU) 0.0185 0.1360 0.0994 12.8 ms
Long Short-Term Memory (LSTM) 0.0142 0.1191 0.0815 14.1 ms

Mô hình LSTM cho sai số thấp nhất, bám sát các đỉnh đột biến vào các khung giờ cao điểm (07:00 - 08:30 và 17:00 - 18:30), do đó được chọn làm engine dự báo chính.

Kết quả đạt được

Tại điểm thử nghiệm ngã tư Nơ Trang Long - Nguyễn Xí (Bình Thạnh, TP.HCM):

  • Thuật toán YOLOv5 phát hiện chính xác 24 xe máy (moto)3 ô tô (car) trên khung hình snapshot.
  • Diện tích mặt đường được tính toán: $148.520 \text{ px}^2$ (đã chuẩn hóa hệ số góc nhìn).
  • Tổng diện tích phương tiện quy đổi: $17.347 \text{ px}^2$.
  • Mật độ tính toán thực tế đạt $11.68%$ (phù hợp với trạng thái giao thông thông thoáng quan sát thực tế).

Giao diện Desktop trên nền CustomTkinter cho phép người dùng chọn nhanh 419 vị trí camera, hiển thị ảnh gốc, ảnh nhận diện bounding box, mặt nạ đường, mật độ tức thời và biểu đồ cột dự báo mật độ trong 60 phút kế tiếp.


Đổi mới và đóng góp

  1. Phương pháp bù sai lệch phối cảnh không cần tái dựng 3D: Thay vì áp dụng phép biến đổi ma trận đồng nhất (Homography Matrix) phức tạp đòi hỏi đo đạc thực địa và hiệu chuẩn camera (Camera Calibration) tốn kém, đề tài đề xuất mô hình tính tỷ lệ diện tích theo cấp số cộng dọc trục thẳng đứng. Phương pháp này giảm $85%$ chi phí tính toán mà vẫn đảm bảo độ chính xác phản ánh mật độ thực tế.
  2. Tích hợp Pipeline khép kín giữa Vision AI và Chuỗi thời gian: Kết hợp trực tiếp đầu ra của YOLOv5s qua bộ xử lý diện tích để nuôi dữ liệu định kỳ vào mạng LSTM, tự động xây dựng kho dữ liệu 21.794 điểm dữ liệu mà không cần can thiệp thủ công.
  3. Mặt nạ phân vùng động: Ngăn ngừa việc đếm các phương tiện đang đỗ trên vỉa hè hoặc các làn đường ngược chiều không nằm trong khu vực khảo sát, tăng độ tin cậy của chỉ số mật độ lên hơn $25%$ so với đếm bounding box toàn màn hình.

Ứng dụng thực tế và triển khai

Kịch bản vận hành thực tế

Hệ thống được thiết kế để phục vụ hai nhóm đối tượng chính:

  • Trung tâm Điều hành Giao thông Đô thị: Cung cấp dashboard giám sát tập trung, tự động kích hoạt cảnh báo khi mật độ tại một nút giao vượt ngưỡng $65%$ liên tục trong 2 chu kỳ lấy mẫu (20 phút).
  • Người tham gia giao thông: Tra cứu trực quan tình trạng tuyến đường trước khi xuất phát, theo dõi xu hướng mật độ để lựa chọn khung giờ di chuyển tối ưu.
[Camera Snapshot API]
[Desktop App Client / Dashboard]

Yêu cầu phần cứng và triển khai

  • Cấu hình tối thiểu: CPU Intel Core i5 thế hệ 8 hoặc tương đương, RAM 8GB, GPU NVIDIA GTX 1050 (4GB VRAM) hoặc CPU-only với thời gian suy luận $\sim 1.2 \text{ giây/frame}$.
  • Cấu hình đề xuất: CPU Intel Core i7 / AMD Ryzen 7, RAM 16GB, GPU NVIDIA RTX 3060 trở lên để phục vụ xử lý đa luồng đồng thời 10–20 camera thời gian thực.
  • Quy trình triển khai:
    1. Clone repository nguồn và cài đặt dependencies qua file requirements.txt.
    2. Tải file trọng số best.pt của YOLOv5s và file mô hình LSTM đã huấn luyện vào thư mục weights/.
    3. Khởi chạy ứng dụng: python main_app.py.

Hạn chế và hướng phát triển

Hạn chế hiện tại

  • Độ chính xác phân loại chi tiết: Tập dữ liệu gom chung các loại xe 2 bánh (xe đạp, xe máy) vào lớp motor, xe tải và xe khách lớn vào lớp car/bus, chưa bóc tách cụ thể từng phân khúc tải trọng.
  • Phụ thuộc điều kiện thời tiết: Khi trời mưa lớn hoặc ban đêm độ rọi thấp, đèn pha xe gây lóa camera làm giảm độ chính xác nhận diện của YOLOv5 khoảng $12% - 15%$.
  • Mô hình phối cảnh 1 chiều: Giả định tỷ lệ điểm ảnh không đổi theo phương ngang có thể xuất hiện sai số nhỏ đối với các camera đặt ở góc chéo nghiêng lớn hơn $45^\circ$ so với trục đường.

Hướng phát triển

  • Ứng dụng kiến trúc YOLOv8 hoặc YOLOv9 kết hợp mô hình phân đoạn cá thể (Instance Segmentation) để đo trực tiếp đa giác pixel của phương tiện thay cho bounding box hình chữ nhật.
  • Nâng cấp mô hình chuỗi thời gian sang kiến trúc Spatial-Temporal Graph Convolutional Networks (ST-GCN) để học mối quan hệ tương quan lưu lượng giữa các nút giao thông liền kề trong cùng mạng lưới.
  • Xây dựng module tự động tìm đường thay thế bằng thuật toán $A^*$ hoặc Dijkstra tích hợp trọng số động dựa trên mật độ dự báo từ LSTM.

Đối tượng hưởng lợi

  • Sinh viên & Học viên chuyên ngành CNTT/HTTT: Tài liệu tham khảo toàn diện về cách kết hợp giữa xử lý ảnh Deep Learning và mô hình hồi quy chuỗi thời gian; phương pháp thu thập và tiền xử lý dữ liệu từ camera công cộng.
  • Kỹ sư AI & Computer Vision: Cung cấp giải pháp thực tế giải quyết bài toán biến dạng phối cảnh (perspective distortion) với chi phí tính toán thấp.
  • Cơ quan Quản lý Đô thị: Cơ sở thực nghiệm để xây dựng hệ thống giám sát và điều tiết giao thông thông minh với chi phí đầu tư phần mềm tối thiểu.

Câu hỏi thường gặp

1. Hệ thống có yêu cầu phần cứng chuyên dụng đắt tiền để vận hành không?

Không. Nhờ sử dụng biến thể nhẹ YOLOv5s kết hợp mô hình LSTM tinh gọn, hệ thống có thể chạy mượt mà trên máy tính cá nhân tầm trung trang bị GPU phổ thông (GTX 1650/RTX 3050). Nếu chỉ sử dụng CPU, hệ thống vẫn đáp ứng tốt chu kỳ lấy mẫu 10 phút/lần do không đòi hỏi xử lý video 30 FPS liên tục.

2. Vì sao không đếm trực tiếp số lượng xe mà phải tính tỷ lệ diện tích mặt đường chiếm dụng?

Đếm số lượng xe không phản ánh đúng bản chất ùn tắc. Ví dụ: 20 chiếc xe máy chỉ chiếm diện tích tương đương 2 chiếc xe buýt lớn. Việc tính toán mật độ chiếm dụng không gian mặt đường (%) phản ánh chính xác sức chứa thực tế của làn đường tại thời điểm khảo sát.

3. Phương pháp tính diện tích bằng cấp số cộng có chính xác bằng Perspective Transform Matrix không?

Phép biến đổi phối cảnh (Perspective Transform) chuẩn yêu cầu biết chính xác 4 điểm mốc tọa độ thực địa để tính ma trận Homography. Với hệ thống 419 camera công cộng không thể đo đạc thực tế, giải pháp xấp xỉ bằng cấp số cộng theo trục dọc mang lại độ chính xác đạt trên $90%$ so với đo đạc chuẩn mà không tốn công sức cấu hình phức tạp cho từng camera.

4. Dữ liệu huấn luyện chuỗi thời gian được lấy như thế nào?

Dữ liệu được thu thập tự động thông qua script lập lịch (schedule-save-data). Cứ mỗi 10 phút, hệ thống gửi request snapshot đến API camera, chạy YOLOv5s để đo mật độ, sau đó lưu dòng dữ liệu gồm [DateTime, Moto, Car, Density] vào file CSV tích lũy được 21.794 bản ghi.

5. Hệ thống có khả năng mở rộng quy mô (scalability) ra toàn bộ camera thành phố không?

Hoàn toàn khả thi. Do kiến trúc tách biệt giữa Worker thu thập dữ liệu và Server suy luận, hệ thống có thể sử dụng hàng đợi tin nhắn (Message Queue như RabbitMQ/Kafka) để phân phối việc xử lý ảnh snapshot từ hàng ngàn camera song song trên cụm server đám mây.


Kết luận

Đồ án tốt nghiệp "Ứng dụng thuật toán cảnh báo ùn tắc giao thông và đề xuất đường đi thay thế" đã giải quyết thành công bài toán giám sát giao thông tự động từ camera đô thị bằng sự kết hợp hài hòa giữa thị giác máy tính và học sâu chuỗi thời gian. Với độ chính xác nhận diện $79.2%$ của mô hình YOLOv5s, công thức bù phối cảnh bằng cấp số cộng sáng tạo và mô hình dự báo LSTM đạt RMSE $0.1191$, hệ thống mang lại giải pháp công nghệ khả thi, chi phí thấp, sẵn sàng tích hợp vào hạ tầng thành phố thông minh để phục vụ cộng đồng.