Skip to content

Pipeline Patterns

Các topology pipeline thông dụng trong ứng dụng thực tế.

Pattern 1 — Simple Detection (1-1-1)

Source → Detector → OSD → Output

Use case: nhận diện đối tượng cơ bản từ 1 camera.

cpp
det->attach_to({src});
osd->attach_to({det});
out->attach_to({osd});
src->start();

Pattern 2 — Detection + Tracking

Source → Detector → Tracker → OSD → Output

Use case: giữ định danh (track_id) của đối tượng qua các frame.

cpp
auto tracker = std::make_shared<cvedix_nodes::cvedix_sort_track_node>(
    "tracker", cvedix_nodes::cvedix_track_for::NORMAL);
tracker->attach_to({det});

Pattern 3 — Multi-Output Fan-out (1-1-N)

                              ┌→ OSD → Screen
Source → Detector → Split ───┤
                              └→ Broker → MQTT

Use case: vừa hiển thị local, vừa đẩy event lên cloud.

Pattern 4 — Multi-Branch Parallel (1-N-1-N)

                    ┌→ Face Detector  ──┐
Source → Split ────┤                     ├→ Sync → OSD → Output
                    └→ Object Detector ─┘

Use case: chạy nhiều model song song trên cùng một stream, merge kết quả bằng cvedix_sync_node.

Pattern 5 — Behavior Analysis

Source → Detector → Tracker → BA Node → OSD → Output

                                  └→ Broker → MQTT/Kafka

Use case: đếm crossline, phát hiện đám đông, vi phạm giao thông. BA node bắt buộc có tracker phía trước.

Pattern 6 — Multi-Camera (N-1-N)

Camera 1 ──┐
Camera 2 ──┤→ Detector (shared) → Split by channel → Outputs
Camera 3 ──┘

Use case: nhiều camera RTSP dùng chung 1 detector — tiết kiệm GPU. Phân biệt nguồn bằng channel_index.

Pattern 7 — VLM Enrichment

Source → Detector → Tracker → VLM Feature → Broker

Use case: gắn mô tả ngữ nghĩa (màu áo, hành vi, thuộc tính) cho từng object bằng VLM. Xem VLM / LLM.


Building blocks

Nối node

cpp
// downstream->attach_to({upstream1, upstream2, ...});
detector->attach_to({source});

Vòng đời

cpp
source->start();               // chạy
std::cin.get();
source->detach_recursively();  // dừng + dọn dẹp toàn pipeline

Cập nhật config lúc runtime

cpp
auto cfg = osd->get_config();
cfg.show_bbox = true;
osd->update_config(cfg);       // hiệu lực ngay

Kiểm soát queue (tránh nghẽn)

cpp
detector->set_max_in_queue_size(1);  // realtime: bỏ frame cũ thay vì dồn queue

TIP

Nếu log xuất hiện queue full, dropped N meta — node phía sau xử lý chậm hơn phía trước. Giảm tần suất (skip frame ở source), giảm resolution, hoặc tăng queue size tùy mục tiêu realtime/đầy đủ.

Phần mềm độc quyền — CVEDIX