Skip to content

VLM / LLM — Phân tích ngữ nghĩa bằng AI

SDK có các node kết nối tới Vision-Language Model (VLM)LLM để phân tích ngữ nghĩa ảnh/video: mô tả đối tượng, trích thuộc tính (màu áo, loại xe...), enrich event.

Backend hỗ trợ

BackendGiao thứcVí dụ endpoint
OllamaOllama APIhttp://127.0.0.1:11434
llama.cpp serverOpenAI-compatiblehttp://127.0.0.1:8080
OpenAI / vLLMOpenAI APIhttps://api.openai.com

Chuẩn bị (Ollama)

bash
# Cài Ollama rồi pull model VLM
ollama pull qwen3-vl:latest    # bản đầy đủ (~6GB)
ollama pull qwen3-vl:2b        # bản nhẹ (~2GB)

Node VLM Feature

Gắn sau detector/tracker — trích đặc trưng ngữ nghĩa cho từng object:

cpp
#include <cvedix/nodes/infers/cvedix_vlm_feature_node.h>

auto vlm = std::make_shared<cvedix_nodes::cvedix_vlm_feature_node>(
    "vlm_feature_0",
    "qwen3-vl:latest",              // model
    "http://127.0.0.1:11434",       // API base URL
    "",                             // API key (nếu cần)
    llmlib::LLMBackendType::Ollama, // backend
    8,                              // run_every_n_frames
    4,                              // max_targets_per_frame
    0.03f, 0.03f, 10);

vlm->attach_to({tracker});

Kết quả gắn vào target:

  • secondary_labels: nhãn dạng vlm:object:red text, rectangular sign...
  • embeddings: vector đặc trưng (128 chiều)

Nếu VLM timeout, node tự fallback sang đặc trưng histogram + gradient (nhãn có hậu tố :fallback) — pipeline không bao giờ bị treo.

Node RapidMedia VLM (production)

Bản nâng cao có pre-filter (chỉ xử lý object có track_id, lọc theo diện tích/label) + metrics giám sát:

cpp
#include <cvedix/nodes/infers/cvedix_rapidmedia_vlm_feature_node.h>

auto vlm = std::make_shared<cvedix_nodes::cvedix_rapidmedia_vlm_feature_node>(
    "rapidmedia_vlm_0",
    "qwen3-vl:2b",
    "http://127.0.0.1:8080",
    "",
    llmlib::LLMBackendType::OpenAI,  // llama.cpp server
    4, 4, 0.02f, 0.02f, 12);

Tinh chỉnh qua biến môi trường:

BiếnMặc địnhÝ nghĩa
ASS_RAPIDMEDIA_VLM_REQUIRE_TRACKtrueChỉ xử lý target đã có track_id
ASS_RAPIDMEDIA_VLM_MIN_AREA_RATIO0.005Diện tích bbox tối thiểu (tỷ lệ so với frame)
ASS_RAPIDMEDIA_VLM_ALLOW_LABELSChỉ xử lý các label này (person,car)
ASS_RAPIDMEDIA_VLM_DENY_LABELSLoại trừ label
ASS_RAPIDMEDIA_VLM_METRICS_ENABLEDtrueXuất metrics định kỳ ra log

Phân tích ảnh tĩnh (batch)

Dùng sample enrichment để phân tích thư mục ảnh snapshot:

bash
./event_snapshot_vlm_enrichment_sample \
    --input /path/to/images \
    --model qwen3-vl:latest \
    --api http://127.0.0.1:11434 \
    --backend ollama \
    --output /tmp/results.jsonl

Output JSONL mỗi dòng một ảnh:

json
{"image":"/path/img.jpg","embedding_dim":128,"vlm_label":"vlm:object:red text, rectangular sign, pinkish background"}

Hiệu năng

  • Tăng run_every_n_frames khi FPS nguồn cao — không cần VLM mọi frame.
  • Giới hạn max_targets_per_frame để latency ổn định.
  • Dùng model nhỏ (qwen3-vl:2b) cho realtime, model lớn cho batch/offline.
  • VLM là semantic feature extractor — không thay thế detector.

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