Đang chạy mực qua máy in — từng lớp màu một, kiên nhẫn nhé!
№ 01
№ 02
№ 03
№ 04
№ 05
№ 06
Moniris (MFG-20) · AI·20K Demo Day Zine
№ 25
Moniris (MFG-20)
Hệ thống giám sát an toàn lao động thời gian thực, kết hợp AI Core phát hiện vi phạm PPE và Geofencing vùng cấm. Sản phẩm nổi bật với cơ chế làm mờ mặt bảo vệ quyền riêng tư và ứng dụng AI Agent (LangGraph) để tự động hóa luồng phê duyệt, sinh biên bản sự cố.
Fig. 01 · Ảnh dự án
Tài khoản dùng thử:
admin_safety / ChangeMe123! (cán bộ an toàn, xử lý được sự cố)
manager01 / ChangeMe123! (quản lý khu vực, chỉ đọc)
1. Bài toán thực tế & Thách thức
Các phân xưởng dập thép có nhiều khu vực nguy hiểm dễ xảy ra tai nạn. Giám sát thủ công bằng con người dễ bỏ sót và không kịp thời. Dự án MFG-20 giải quyết 3 thách thức lớn của doanh nghiệp:
Bảo mật quyền riêng tư: Tự động che mờ khuôn mặt công nhân trước khi truyền tải hoặc lưu trữ hình ảnh.
Giảm báo động giả (False Alarms): Chỉ kích hoạt leo thang cảnh báo khi máy móc thực sự hoạt động (RUNNING).
Quyết định dựa trên con người (HITL): Thiết lập cơ chế phê duyệt thủ công từ Cán bộ an toàn trước khi chính thức xử lý vi phạm.
2. Giải pháp kỹ thuật & Kiến trúc hệ thống
Hệ thống được thiết kế đồng bộ toàn trình (E2E) gồm 2 phần tách biệt đúng ranh giới thực tế:
AI Core (Thị giác máy tính & Agent):
Sử dụng YOLOv11 phát hiện người, mũ bảo hộ, áo phản quang. Tích hợp AI RetinaFace che mờ mặt thời gian thực (đạt tốc độ tối ưu 71.1 FPS dưới local).
Sử dụng thuật toán Convex Hull khoanh vùng đa giác cấm linh hoạt nạp trực tiếp từ JSON.
Thiết lập đồ thị quyết định thông minh bằng LangGraph. Agent sẽ ngắt tiến trình chờ Cán bộ an toàn duyệt (HITL). Nếu quá hạn 5 phút, Agent tự động gọi Gemini API để soạn thảo biên bản chi tiết (tích hợp 3 tầng Fallback dự phòng).
Backend & Giao diện (Kiến trúc bản triển khai):
Toàn bộ hệ thống web chạy trên một tên miền duy nhất: FastAPI vừa phục vụ API, vừa phục vụ giao diện React đã build sẵn, vừa nhận kết nối WebSocket. Cách gộp này loại bỏ hoàn toàn nhóm lỗi tên miền chéo (CORS) và chỉ cần triển khai một nơi.
AI Core không nằm trong bản triển khai web vì cần GPU và xử lý video theo lô. AI Core chạy trên máy riêng rồi đẩy sự cố vào backend qua endpoint nạp dữ liệu, đúng ranh giới của kiến trúc thật.
3. Trung tâm quản trị (Web Dashboard)
Giao diện là nơi cán bộ an toàn thực sự làm việc, nên được thiết kế theo đặc thù ca trực chứ không chỉ để hiển thị dữ liệu.
Camera giám sát: Bốn kênh phân khu phát lại video đã qua xử lý, có sẵn khung nhận diện và vùng cấm. Giao diện tự đổi độ phân giải theo bề ngang màn hình, mô phỏng đúng cơ chế hai luồng của camera IP công nghiệp: màn hình rộng dùng luồng chính 1080p, điện thoại dùng luồng phụ 480p để không nghẽn băng thông.
Cảnh báo thời gian thực: Sự cố mới hiện lên bảng điều khiển qua WebSocket ngay khi phát sinh, không phải tải lại trang. Khi mở trang, danh sách cảnh báo đang chờ được nạp sẵn từ API nên người trực thấy ngay tình hình thay vì một màn hình trống.
§
Phụ lục — Demo & Slides
Video demo
Bản demo trực tiếp
Slide trình bày
Xử lý sự cố (HITL): Cán bộ an toàn xác nhận tiếp nhận, đóng sự cố hoặc đánh dấu báo sai ngay trên thẻ cảnh báo. Hai thao tác sau bắt buộc ghi chú, và toàn bộ thao tác được lưu vết kèm thời điểm để truy xuất về sau.
Biên bản và ảnh bằng chứng: Mỗi sự cố kèm biên bản do Gemini lập và ảnh hiện trường đã làm mờ khuôn mặt. Ảnh tải qua kênh có xác thực chứ không nhúng khoá vào đường dẫn, tránh lộ khoá trong log máy chủ và lịch sử trình duyệt.
Phân quyền hai vai trò: Cán bộ an toàn xử lý được sự cố, Quản lý khu vực chỉ đọc. Giao diện tự ẩn các nút thao tác theo vai trò thay vì hiện ra rồi báo lỗi khi bấm.
Ba quyết định thiết kế đáng chú ý, đều xuất phát từ bối cảnh vận hành thực tế:
Chuyển động là tín hiệu, không phải hiệu ứng. Hiệu ứng nhấp nháy chỉ chạy khi còn sự cố chưa xử lý. Nếu để chạy cả lúc bình thường, mắt người trực quen dần và tới khi có sự cố thật thì không phân biệt được nữa, tức mất chính chức năng của bảng cảnh báo. Giao diện cũng tôn trọng thiết lập giảm chuyển động của hệ điều hành.
Nền tối và mật độ thông tin cao, vì người trực nhìn màn hình liên tục nhiều giờ. Mọi cặp màu chữ và nền đều được tính tương phản theo chuẩn WCAG 2.1 trước khi chốt, không ước lượng bằng mắt.
Bố cục thích ứng ba mức. Dưới 1024px xếp một cột cuộn dọc cho điện thoại, từ 1024px chia lưới, từ 1280px thành ba cột và khoá gọn trong một màn hình để không phải cuộn. Mọi vùng bấm cao tối thiểu 40px để thao tác được bằng ngón tay ngay tại xưởng.
4. Đóng gói & Tối ưu hóa tài nguyên (Docker Packaging)
Ứng dụng đóng gói bằng Docker nhiều tầng (Multi-stage build): một tầng Node build giao diện, một tầng cài thư viện Python, tầng cuối chỉ chứa những gì cần để chạy.
Container khởi động theo ba bước tuần tự trước khi phục vụ: tạo lược đồ cơ sở dữ liệu bằng Alembic, nạp tài khoản & danh sách camera, nạp bộ dữ liệu sự cố mẫu.
Danh sách thư viện cho web được tách riêng khỏi danh sách của toàn dự án, loại bỏ các gói thị giác máy tính và học sâu (PyTorch, Ultralytics) mà web service không dùng tới.
Hiệu năng đo được: Container chỉ tiêu thụ 127 MB trên giới hạn 512 MB của Render (còn dư 3/4 tài nguyên).
5. Dữ liệu trình diễn (Demo Data)
Bộ dữ liệu gồm 14 sự cố mẫu trải trên 4 camera và 5 ngày gần nhất, được nạp lại mỗi lần container khởi động giúp mốc thời gian luôn hiển thị tương đối so với thời điểm xem.
Dữ liệu bao phủ đủ các nhánh nghiệp vụ để đánh giá toàn bộ luồng: 8 sự cố đang xử lý, 4 đã đóng, 2 được đánh dấu báo sai, kèm 13 bản ghi thao tác có ghi chú của cán bộ an toàn (đây là dữ liệu mô phỏng phục vụ trình diễn, không phải kết quả nhận diện từ video thật).
6. Giới hạn đã biết & Bảo mật
Render Free Tier: Dịch vụ tạm ngủ sau 15 phút không có người truy cập, nên lần mở đầu tiên có thể mất khoảng một phút để khởi động lại (đây là đặc trưng gói miễn phí của Render, không phải lỗi hệ thống). Khi triển khai thật chỉ cần nâng gói phí là hết thời gian chờ, không cần sửa mã nguồn.
Bảo mật: Toàn bộ khoá bí mật (API Keys) được nhập qua phần biến môi trường của Render, không đóng gói vào ảnh Docker và không lưu trong mã nguồn công khai.