Canonical AI tags
NovaVMS uses a controlled vocabulary derived from COCO, AVA, Kinetics, ONVIF Profile M, UCF-Crime, VIRAT, iSafetyBench, PETA and Market1501. The compiled-rule compiler and structured query parser validate exact canonical-tag terms against this list.
New event tags are not assigned by a MobileCLIP text-image tag deriver. The current ingest pipeline aggregates YOLO26n object detections into event_object_facets and writes those ordered class names into events.canonical_tags and event_signatures.canonical_tags for compatibility. Therefore, a compiled canonical_tags predicate can match a newly indexed event only when the exact term is also a class emitted by the current object detector. The broader vocabulary remains useful to parsing and validation but is not proof that every term is produced at ingest.
Source of truth: cloud/config/canonical_tags.json (version 3.0, 345 tags across 30 categories).
Entity categories
| Category | Tags |
|---|---|
entity | person, vehicle, animal, object, furniture, food, electronic, appliance, sports_equipment |
person_type | adult_male, adult_female, child, elderly, group, staff, visitor, security_guard, delivery_person, worker, customer, pedestrian, unknown_person |
person_age | age_under_15, age_15_30, age_30_45, age_45_60, age_over_60 |
vehicle_type | car, truck, motorcycle, bicycle, bus, van, suv, taxi, ambulance, police_car, fire_truck, forklift, golf_cart, scooter, boat, airplane, train, unknown_vehicle |
animal_type | dog, cat, bird, horse, cow, sheep, elephant, bear, zebra, giraffe, unknown_animal |
Action categories
| Category | Tags |
|---|---|
action_movement | walking, running, standing, sitting, lying_down, crawling, climbing, jumping, dancing, swimming, driving, cycling, skating |
action_transition | entering, exiting, approaching, departing, turning, stopping, starting, crossing, passing, following |
action_interaction | carrying, holding, pushing, pulling, lifting, throwing, catching, picking_up, putting_down, opening, closing, handshake, hugging, kissing, fighting, helping, giving, receiving, exchanging |
action_communication | talking, listening, gesturing, waving, pointing, using_phone, reading, writing, typing, photographing, recording |
action_posture | bending, crouching, kneeling, leaning, raising_arm, lowering_arm, stretching, squatting |
action_suspicious | loitering, falling, running_away, hiding, trespassing, vandalism, abandoned_object, removed_object, shoplifting, theft, assault, break_in, fighting, threatening, fleeing |
action_industrial | operating_machinery, lifting_heavy, wearing_ppe, not_wearing_ppe, unsafe_posture, near_hazard, emergency_response, equipment_malfunction, welding, grinding, forklift_operating, ladder_climbing, confined_space_entry, chemical_handling |
Appearance categories
| Category | Tags |
|---|---|
color_basic | red, blue, green, yellow, orange, purple, pink, black, white, gray, brown, beige |
color_extended | navy, maroon, olive, teal, aqua, silver, gold, crimson, coral, khaki, turquoise, indigo, violet, tan, cream, charcoal |
clothing_upper | shirt, t_shirt, sweater, jacket, coat, hoodie, vest, suit_jacket, uniform_top, tank_top, blouse, safety_vest, lab_coat, work_shirt |
clothing_lower | pants, jeans, shorts, skirt, dress, suit_pants, uniform_pants, leggings, work_pants, coveralls |
clothing_full | dress, jumpsuit, uniform, suit, robe, gown, coverall, hazmat_suit |
accessory_head | hat, cap, helmet, beanie, headscarf, turban, glasses, sunglasses, mask, face_mask, hard_hat, safety_glasses, face_shield, respirator |
accessory_carry | backpack, handbag, suitcase, briefcase, shopping_bag, umbrella, luggage, box, package, toolbox, equipment_bag, cart |
accessory_other | tie, scarf, watch, jewelry, badge, lanyard, gloves, safety_gloves, ear_protection, knee_pads |
Scene categories
| Category | Tags |
|---|---|
location_indoor | entrance, exit, lobby, reception, hallway, corridor, staircase, elevator, escalator, room, office, restroom, kitchen, cafeteria, warehouse, storage, factory_floor, assembly_line, control_room, server_room |
location_outdoor | parking_lot, sidewalk, road, intersection, crosswalk, driveway, loading_dock, plaza, courtyard, garden, fence, gate, barrier, construction_site, yard, rooftop |
location_general | indoor, outdoor, doorway, window, corner, perimeter, restricted_area, hazard_zone |
time_of_day | daytime, nighttime, dawn, dusk, morning, afternoon, evening |
weather | clear, cloudy, overcast, rainy, snowy, foggy, windy |
lighting | bright, dim, dark, backlit, shadowed, artificial_light, natural_light |
Event and movement categories
| Category | Tags |
|---|---|
event_type | normal_activity, suspicious_activity, security_incident, traffic_violation, crowd_gathering, emergency, intrusion_detected, line_crossing, area_violation, object_detected, object_removed, object_left, safety_violation, ppe_violation, equipment_issue, fall_detected, fire_detected, smoke_detected |
direction | north, south, east, west, left, right, forward, backward, up, down |
speed | stationary, slow, normal_speed, fast, very_fast |
count | single, pair, small_group, large_group, crowd |
Current event-tag derivation
The current pipeline uses one deterministic object-evidence path:
- Detect: YOLO26n returns class, bounding box, confidence, and frame index for each sampled frame.
- Aggregate: the cloud writes one
event_object_facetsrow per class.countmeans sampled frames containing that class, not a distinct-object count. - Project: the same facets are sorted by
countdescending and class name ascending, then their class names are stored in both compatibilitycanonical_tagsfields and forwarded withEventIndexed.
There is no tag-similarity threshold or per-event top-K label selection in this path. When no object class is detected, the event’s canonical-tag list is empty. The historical MobileCLIP derivation design remains in search ranking and canonical tags v5, but it is not current runtime behavior.
Do not use the legacy alert-rule custom_tags or min_confidence fields as a firing filter. The API accepts and persists them, but the live immediate evaluator skips such rows. Create new AI rules through the compiled wizard and verify the emitted evidence predicates. See Alert rule schema.
Related
- Alert rule schema — legacy tag-field limits and the compiled-rule path
- AI provider fields — Vertex AI + AI Runtime reference
- Three-lane search — Phase 2 search architecture (retired in v5 spec; the page itself describes the legacy design)