Vì sao chúng tôi chọn kiến trúc plugin cho tích hợp thiết bị
Camera IP không nói cùng một ngôn ngữ: ONVIF, VAPIX, ISAPI mỗi hãng một kiểu. Chúng tôi tách phần đọc hình ảnh khỏi phần phân tích, để thêm một hãng mới không đụng tới lõi hệ thống.
Khi bắt đầu tích hợp camera cho hệ thống giám sát SOAI, chúng tôi gặp ngay một sự thật khó chịu: mỗi hãng camera có một giao thức riêng. Camera IP theo chuẩn mở dùng ONVIF Profile S và RTSP. Axis dùng VAPIX song song với ONVIF. Hikvision dùng ISAPI và SDK riêng của họ. Không có một API duy nhất để "nói chuyện" với tất cả camera trên đời, và sẽ không bao giờ có.
Nếu viết logic đọc từng loại camera lẫn vào logic phân tích AI, mỗi lần thêm một hãng mới là một lần sửa lõi, và đó là rủi ro làm hỏng thứ đang chạy ổn định chỉ để thêm một thứ mới. Vì vậy chúng tôi dựng hai lớp trừu tượng tách biệt: `DeviceProvider` chịu trách nhiệm duy nhất là lấy được hình ảnh/video từ một thiết bị, bất kể giao thức gì bên dưới; `AnalysisEngine` chịu trách nhiệm duy nhất là phân tích một khung hình hoặc một video, không quan tâm hình đó lấy từ đâu.
Kết quả thực tế: thêm hỗ trợ một dòng camera mới nghĩa là viết một plugin `DeviceProvider` mới tuân theo interface đã định nghĩa, để yên engine phân tích và các module đã nghiệm thu (đếm SKU, phân tích video đóng gói, live view...). Tương tự, thêm một nghiệp vụ kiểm tra AI mới là viết một `AnalysisEngine` mới, để yên lớp đọc thiết bị.
Đây cũng là lý do chúng tôi có thể đàm phán hợp tác kỹ thuật với Axis và Hikvision mà không cần viết lại hệ thống. Dù mỗi hãng có SDK và tài liệu khác nhau, chúng tôi chỉ cần một plugin tuân theo cùng một hợp đồng interface.