CAPS đoạt Á quân 2 Qualcomm Hack The Challenge 2026: camera AI đếm chỗ đỗ xe chạy trên thiết bị

Qualcomm Future Makers — Hack The Challenge 2026 là chương trình đổi mới sáng tạo dành cho sinh viên, ra đề quanh một ràng buộc duy nhất: mô hình AI phải chạy thẳng trên thiết bị. Vòng Grand Finale — Hack Day diễn ra ngày 16/8/2026 tại Trường Đại học Khoa học Tự nhiên, ĐHQG-HCM, do Qualcomm tổ chức cùng innoex. CAPS của nhóm Mặt Trời Nhỏ vào Top 12 chung kết và nhận giải Á quân 2, giá trị 10.000.000 đồng.

Bài này ghi lại phần kỹ thuật: các con số đo được trên thiết bị, những tham số đã chọn, và lý do chọn chúng. Mã nguồn công khai, đường dẫn ở cuối bài.
Đề bài buộc mô hình chạy tại chỗ, và ràng buộc đó quyết định mọi thứ phía sau
Chạy trên thiết bị nghĩa là khung hình được xử lý ngay tại bo mạch treo trên trần, thay vì gửi về một máy chủ ở nơi khác. Bãi xe hưởng ba thứ từ cách làm này: hình ảnh ở lại trong bãi, hệ thống vẫn đếm được khi đường truyền chập chờn, và chi phí vận hành dừng ở tiền điện.
Đổi lại, toàn bộ ngân sách tính toán gói gọn trong một bo nhúng. Mọi lựa chọn thiết kế còn lại của CAPS đều bắt nguồn từ ràng buộc đó.
CAPS đặt một camera trên trần thay cho mỗi ô một cảm biến
Cách quen thuộc ở bãi xe là gắn cho từng ô một cảm biến siêu âm hoặc từ trường, rồi kéo dây về bộ điều khiển. Số cảm biến tăng theo số chỗ, và số điểm hỏng cũng vậy.
CAPS treo một camera lên trần và khai từng chỗ đỗ thành một vùng đa giác trên khung hình. Trong bản chạy tại cuộc thi, hai camera giữ sáu chỗ trên hai tầng: camera 01 (MaixCam) giữ A1–A3, camera 02 (ESP32-CAM) giữ B-1–B3. Mỗi thiết bị mang thêm một đèn báo, chiếu đỏ xuống ô đang có xe.

616 ms mỗi lần suy luận là con số quyết định ngân sách camera
Đo trên Arduino UNO Q — chip QRB2210, aarch64, 2 GB RAM — mô hình nhận dạng xe mất trung vị 616 ms cho mỗi lần suy luận ở độ phân giải 640×640. Đây là số đo trên thiết bị thật, chạy onnxruntime trên CPU.
Từ con số đó suy ra phần còn lại. Chu kỳ chụp mặc định 3 giây kham được khoảng ba camera và vẫn còn dư tải. Lên sáu camera thì chu kỳ phải giãn thành 5 giây, nếu muốn giữ nguyên bo mạch.
Đó là cách một con số đo được biến thành giới hạn triển khai: người lắp đặt biết trước mình đang đánh đổi giữa số camera và độ trễ cập nhật, thay vì phát hiện ra khi bãi đã lắp xong.
Bốn trên năm khung hình đồng thuận thì một chỗ đỗ mới đổi trạng thái
Một người đi ngang, một bóng đổ, một khung hình mờ vì rung — mỗi thứ đều đủ để một lần nhận dạng ra kết quả sai. Đọc từng khung hình rồi báo ngay sẽ cho một bảng trạng thái nhấp nháy liên tục.
CAPS đặt một bộ lọc bỏ phiếu: một chỗ đỗ chỉ đổi trạng thái khi 4 trong 5 khung hình liên tiếp cùng nói một điều. Giá phải trả là độ trễ, và nó tính được: với chu kỳ 3 giây, một xe vừa đỗ xuất hiện trên bảng sau khoảng 12–15 giây.
"Chưa xác định" là trạng thái thứ ba, và nó khác "trống"
Bộ lọc bỏ phiếu sinh ra một tình huống mà hệ thống hai trạng thái xử lý sai: chỗ đỗ mà máy chưa thấy đủ khung hình để kết luận. Gọi nó là "trống" thì bảng điện tử sẽ chỉ tài xế tới một ô có thể đang có xe.
CAPS báo ba trạng thái tách bạch — trống, có xe, và chưa xác định — và ghi thẳng lời giải thích lên màn hình quản trị: Unknown is not free: the system has not yet seen enough frames to decide.

Bảng còn giữ mốc thời gian cho từng lần đổi trạng thái, nên một chỗ đỗ báo sai luôn truy ngược được về khung hình đã sinh ra nó.
Chỗ đỗ được khai bằng cách vẽ đa giác lên chính khung hình camera
Bãi xe nào cũng có hình học riêng, nên vị trí các ô là thứ phải khai lại ở mỗi lần lắp. CAPS đưa việc đó lên trình duyệt: người lắp đặt mở khung hình của camera, vẽ một đa giác cho mỗi ô, đặt mã ô rồi lưu. Thay đổi có hiệu lực ngay, tiến trình nhận dạng vẫn chạy.

Cách khai này giữ được các ô chéo và ô bị cột che một phần — thứ mà một khung chữ nhật căn theo trục sẽ cắt nhầm.
Tài xế tra chỗ đỗ bằng biển số, trên một màn hình riêng
Màn hình quản trị dành cho người vận hành bãi. Người lái xe cần một thứ khác hẳn: chỗ nào còn trống, và lát nữa xe mình đậu ở đâu. CAPS tách hẳn giao diện đó ra — mở lên là một ô tìm kiếm Tìm xe của bạn, nhập biển số rồi tra, bên dưới là số chỗ trống của từng tầng.

Giao diện có sẵn hai ngôn ngữ, Việt và Anh, và bản điện thoại giữ nguyên bố cục ấy theo chiều dọc. Một tầng hết chỗ hiện số 0 màu đỏ kèm dòng "Tầng này đã hết chỗ trống", thay vì bắt người đọc tự suy từ một con số.

Vỏ thiết bị do nhóm tự dựng, tách đế bắt trần khỏi thân mang camera

Đế bắt cố định lên trần, thân xoay quanh khớp cầu. Người lắp bắt vít một lần rồi ngắm hướng camera sau, thay vì tháo ra bắt lại cho tới khi đủ tầm nhìn.
Phần cứng và phần mềm CAPS đang chạy
Lớp | Thành phần |
|---|---|
Xử lý | Arduino UNO Q — QRB2210, aarch64, 2 GB RAM, 32 GB flash |
Camera chính | MaixCam, cảm biến GC4653, phục vụ ảnh JPEG qua HTTP |
Camera phụ | ESP32-CAM, cảm biến OV3660 hoặc OV2640 |
Đèn báo | Vòng LED WS2812B |
Nhận dạng | YOLO xuất sang ONNX, chạy onnxruntime trên CPU |
Dịch vụ | FastAPI, SQLAlchemy, SQLite |
Giao diện | React, Ant Design, TypeScript, Vite |
Triển khai | Docker Compose, systemd |

Mã nguồn công khai theo giấy phép MIT
CAPS-DASH nằm trên GitHub theo giấy phép MIT: github.com/nguyminhdc78-del/CAPS-DASH. Kho mã gồm dịch vụ nhận dạng, giao diện quản trị và tài liệu triển khai bằng Docker Compose.
Kết quả cuộc thi được công bố trong bài đăng của ban tổ chức.

Xem CAPS chạy
Đoạn ghi hình nhóm mang đi thi cho thấy trọn vòng đời một lượt đỗ: xe vào ô, đèn trần đổi màu, và bảng trạng thái cập nhật sau khi bộ lọc bỏ phiếu chốt.
Hình ảnh khác từ vòng chung kết



Các con số trong bài đo trên bản dựng tháng 8/2026. Bo mạch khác, độ phân giải khác hoặc mô hình khác sẽ cho kết quả khác — đo lại trước khi mang sang một cấu hình mới.
Bình luận
Chưa có bình luận nào. Nếu bài này sai ở đâu, nói giúp.