Kiến trúc SDK
Tổng quan tầng
Ứng dụng của bạn (C++ / C / Java / C#)
│
├── C++: #include <cvedix/nodes/...> ──────────────┐
│ ▼
├── C/Java/C#: cvedix_c_api.h ──► libcvedix_capi.so ─┤
│ ▼
┌────────────────────────────────────────────────────────┐
│ libcvedix_core.so — Core Runtime (80+ nodes) │
│ ├── libtrt_yolov11.so (plugin TensorRT) │
│ ├── libonnx_yolov11.so (plugin ONNX Runtime) │
│ └── libov_yolov11.so (plugin OpenVINO) │
└────────────────────────────────────────────────────────┘
│
▼
OpenCV · GStreamer · FFmpeg · CUDA/TensorRT (tùy chọn)Node — đơn vị xử lý
Mỗi node:
- Chạy trên thread riêng, nhận/gửi dữ liệu qua queue nội bộ.
- Xử lý
frame_meta(frame + danh sách target) vàcontrol_meta(event điều khiển). - Có thể
attach_to()/detach()lúc runtime.
3 loại node:
| Loại | Base class | Vai trò |
|---|---|---|
| Source | cvedix_src_node | Sinh frame (file, RTSP, app...) |
| Middle | cvedix_node | Xử lý (infer, track, BA, OSD...) |
| Destination | cvedix_des_node | Xuất kết quả (screen, file, RTMP...) |
Luồng dữ liệu
cvedix_frame_meta
├── frame (cv::Mat)
├── channel_index, frame_index
└── targets[] (cvedix_frame_target)
├── box (x, y, w, h)
├── label, score
├── track_id
├── secondary_labels[] ← VLM/classifier gắn thêm
└── embeddings[] ← feature vectorNode phía sau đọc và bổ sung metadata do node phía trước tạo ra — ví dụ tracker gắn track_id lên target mà detector đã tạo.
Backend plugin
cvedix_yolo_detector_node load backend qua plugin .so lúc runtime:
| BackendType | Plugin | Model format |
|---|---|---|
TENSORRT | libtrt_yolov11.so | .engine |
ONNX | libonnx_yolov11.so | .onnx |
OPENVINO | libov_yolov11.so | .xml/.bin |
AUTO | tự chọn theo phần cứng | — |
C API — ABI ổn định
libcvedix_capi.so bọc các node C++ thành hàm C thuần. Quy tắc: chỉ thêm hàm mới, không sửa/xóa — nhờ đó bindings Java/C# không vỡ khi core được refactor.
Chi tiết: C API.