Hệ thống AI giám sát phương tiện tại cổng trường

13/10/2026

Hệ thống AI giám sát phương tiện tại cổng trường

Tôi sẽ nâng cấp thành chương trình Python chạy trên PyCharm 2025.3.4, sử dụng YOLO + OpenCV + Flask, có giao diện web tiếng Việt để giám sát bằng USB Camera.

Phiên bản này tập trung vào việc phân biệt người đang ngồi trên xe với người đứng cạnh xe, giảm cảnh báo nhầm tại cổng trường.

1. Các chức năng chính

Chức năng

Thiết kế

Camera

USB Webcam, lựa chọn Camera 0–5

Độ phân giải

640×480, 1280×720, 1920×1080

Xem trực tiếp

Trình duyệt web trên máy tính hoặc điện thoại

Nhận diện

Người, xe đạp, xe máy

Ghép người–xe

Kết hợp YOLO và tư thế cơ thể (Pose)

Cảnh báo

Khung đỏ, thông báo phát hiện

Thống kê

Tổng người, phương tiện, người đang ngồi trên xe

Lưu sự kiện

Ảnh JPG, thời gian, loại phương tiện

Xem lại

Thư viện ảnh sự kiện trên web

Cài đặt

Camera, độ phân giải, độ nhạy, bật/tắt lưu ảnh

Về xe điện: mô hình YOLO chuẩn chưa có nhãn riêng cho xe đạp điện và xe máy điện. Phiên bản này nhận diện chúng theo nhóm xe đạp/xe máy tương ứng, chưa thể phân loại chính xác động cơ điện hay xăng.

2. Cách nâng độ chính xác

Thay vì chỉ kiểm tra hai hình chữ nhật có chồng lên nhau, chương trình sẽ sử dụng các đặc điểm:

  1. Người và xe phải nằm gần nhau.

  2. Vị trí hông của người phải phù hợp với khu vực yên xe.

  3. Tư thế đầu gối, mắt cá chân và thân người phải phù hợp với tư thế ngồi.

  4. Kết quả phải xuất hiện ổn định trong nhiều khung hình liên tiếp.

  5. Một người đứng cạnh xe sẽ bị loại nếu tư thế và vị trí không phù hợp.

Phương pháp này vẫn là nhận diện xác suất, không đảm bảo chính xác tuyệt đối. Đặc biệt, camera nhìn từ trên xuống quá dốc hoặc người bị che khuất sẽ làm giảm độ chính xác.

3. Tải chương trình Python

School Gate AI – Python Web

Mã nguồn Flask, YOLO, Pose, giao diện web và cơ sở dữ liệu SQLite

Tải toàn bộ project ZIP

Cấu trúc project:

school_gate_ai/
├── app.py
├── config.json
├── requirements.txt
├── README.md
├── templates/
│   └── index.html
├── static/
└── events/

4. Cách chạy trên PyCharm 2025.3.4

  1. Giải nén project và mở thư mục school_gate_ai trong PyCharm.

  2. Chọn Python Interpreter, khuyến nghị Python 3.11 hoặc 3.12.

  3. Mở Terminal và chạy:

pip install -r requirements.txt

4. Chạy file:

python app.py

5. Mở trình duyệt tại:

http://127.0.0.1:5000

Lần đầu chương trình sẽ tải hai mô hình AI yolo11n.pt và yolo11n-pose.pt.

5. Những gì phiên bản này đã thực hiện

  • Giao diện web có xem camera trực tiếp.

  • Chọn USB Camera và độ phân giải.

  • Nhận diện người, xe đạp và xe máy.

  • Kết hợp tư thế hông, đầu gối và chân để đánh giá khả năng ngồi trên xe.

  • Vẽ khung đỏ và lưu ảnh sự kiện.

  • Thống kê số đối tượng trong hình.

  • Xem lại tối đa 100 sự kiện gần nhất trên giao diện.

Hai điểm cần phân biệt: Số người đang ngồi trên xe là số lượng trong hình, chưa phải tổng số lượt đi qua cổng. Ngoài ra, phiên bản này mới cảnh báo bằng hình ảnh, chưa phát âm thanh.

Mã nguồn đã được kiểm tra cú pháp Python, nhưng chưa kiểm thử trực tiếp với USB Camera thực tế.

6. Đề xuất nâng cấp tiếp theo

Đối với cổng trường, tôi đề xuất bổ sung ByteTrack và đường đếm ảo để mỗi người đi xe qua cổng chỉ được tính một lần, đồng thời dùng thời gian theo dõi để giảm nhầm người đứng cạnh xe.

Một thông tin rất quan trọng: Camera USB của bạn sẽ đặt ở độ cao bao nhiêu mét, và nhìn từ trên xuống hay nhìn ngang về phía cổng? Tôi sẽ dựa vào góc lắp đặt đó để điều chỉnh thuật toán nhận diện tư thế người ngồi trên xe.

Tôi đã bổ sung chức năng gửi ký tự A từ Python sang Arduino qua cổng USB Serial khi AI xác nhận có người đang ngồi trên xe, đồng thời giữ nguyên các chức năng nhận diện, camera và lưu ảnh hiện tại.

1. Chương trình Python đã nâng cấp

Tải project School Gate AI + Arduino Serial

Trong phần Cài đặt trên giao diện web đã bổ sung:

  • Bật/tắt kết nối Arduino.

  • Quét và chọn cổng COM, ví dụ COM3, COM4.

  • Chọn tốc độ Baud: 9600–115200.

  • Hiển thị trạng thái kết nối Arduino.

  • Nút Gửi thử A để kiểm tra kết nối.

Khi AI xác nhận người ngồi trên xe qua số khung hình đã cài đặt, Python gửi:

A\n

Tín hiệu chỉ được gửi một lần khi bắt đầu một đợt phát hiện đã xác nhận, không gửi liên tục ở mỗi khung hình. Nếu hết phát hiện rồi xuất hiện đợt phát hiện mới, chương trình sẽ gửi lại.

2. Code Arduino nhận tín hiệu A

File arduino_receiver.ino đã có sẵn trong project.

Nguyên lý hoạt động

9600 baud

Python AI phát hiện người ngồi trên xe

USB Serial gửi ký tự A

Arduino nhận A → D8 HIGH trong 2 giây

D8 LOW trở lại

Bạn có thể dùng D8 để kích module relay, còi hoặc đèn cảnh báo thông qua mạch điều khiển phù hợp. Không đấu trực tiếp tải công suất vào chân Arduino.

3. Hướng dẫn sử dụng

  1. Nạp file arduino_receiver.ino vào Arduino Uno hoặc Nano.

  2. Kết nối Arduino với máy tính bằng USB.

  3. Giải nén project mới, mở trong PyCharm.

  4. Cài thêm thư viện Serial:

pip install pyserial
  1. Chạy app.py, vào trang web, mở phần Cài đặt Arduino USB.

  2. Nhấn Quét cổng COM, chọn cổng Arduino, chọn 9600 baud và bật kết nối.

  3. Nhấn Lưu cài đặt, sau đó Gửi thử A.

Khi Arduino nhận được A, chân D8 sẽ lên HIGH trong 2 giây rồi trở về LOW.

Lưu ý: Đóng Serial Monitor của Arduino IDE trước khi kết nối từ Python vì một cổng COM thường không thể mở đồng thời bởi hai chương trình.

4. Một điểm cần xác nhận

Hiện tại tôi thiết kế Arduino nhận A rồi kích chân D8 trong 2 giây.

Bạn muốn Arduino hoạt động theo cách nào?

Chọn chế độ điều khiển

Bình luận
Nội dung này chưa có bình luận, hãy gửi bình luận đầu tiên của bạn.
VIẾT BÌNH LUẬN CỦA BẠN