Skip to content

Commit b225de0

Browse files
committed
ITEP-90240: Reid vector length is configurable
1 parent 0411ae3 commit b225de0

File tree

4 files changed

+23
-9
lines changed

4 files changed

+23
-9
lines changed

controller/config/reid-config.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
"stale_feature_check_interval_secs": 1.0,
44
"feature_accumulation_threshold": 12,
55
"feature_slice_size": 10,
6-
"similarity_threshold": 60
6+
"similarity_threshold": 60,
7+
"vector_dimensions": 256
78
}

controller/src/controller/uuid_manager.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import time
99
from unittest import result
1010

11-
from controller.vdms_adapter import VDMSDatabase
11+
from controller.vdms_adapter import VDMSDatabase, DIMENSIONS
1212
from scene_common import log
1313
from scene_common.timestamp import get_epoch_time
1414

@@ -35,15 +35,17 @@ def __init__(self, database=DEFAULT_DATABASE, reid_config_data=None):
3535
self.features_for_database_timestamps = {} # Track when features were added
3636
self.quality_features = {}
3737
self.unique_id_count = 0
38-
self.reid_database = available_databases[database]()
38+
# Extract vector dimensions from reid config, pass to database
39+
if reid_config_data is None:
40+
reid_config_data = {}
41+
vector_dimensions = reid_config_data.get('vector_dimensions', DIMENSIONS)
42+
self.reid_database = available_databases[database](dimensions=vector_dimensions)
3943
self.pool = concurrent.futures.ThreadPoolExecutor()
4044
self.similarity_query_times = collections.deque(
4145
maxlen=DEFAULT_MAX_SIMILARITY_QUERIES_TRACKED)
4246
self.similarity_query_times_lock = threading.Lock()
4347
self.reid_enabled = True
4448
# Extract stale feature timeout from reid config, use default if not provided
45-
if reid_config_data is None:
46-
reid_config_data = {}
4749
self.stale_feature_timeout_secs = reid_config_data.get('stale_feature_timeout_secs', DEFAULT_STALE_FEATURE_TIMEOUT_SECS)
4850
self.stale_feature_check_interval_secs = reid_config_data.get('stale_feature_check_interval_secs', DEFAULT_STALE_FEATURE_CHECK_INTERVAL_SECS)
4951
self.stale_feature_timer = None

controller/src/controller/vdms_adapter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,10 @@ def addEntry(self, uuid, rvid, object_type, reid_vectors, set_name=SCHEMA_NAME,
145145
add_query = []
146146
for reid_vector in reid_vectors:
147147
# Ensure vector is properly formatted as 1D array of float32
148-
# reid_vector might be shape (1, 256) from moving_object, need to flatten to (256,)
148+
# reid_vector might be shape (N,) from moving_object, need to flatten to (N,)
149149
vec_array = np.asarray(reid_vector, dtype="float32").flatten()
150-
if vec_array.shape[0] != 256:
151-
log.warning(f"addEntry: Expected vector shape (256,) but got {vec_array.shape}, skipping this vector")
150+
if vec_array.shape[0] != self.dimensions:
151+
log.warning(f"addEntry: Expected vector shape ({self.dimensions},) but got {vec_array.shape}, skipping this vector")
152152
continue
153153
descriptor_blobs.append(vec_array.tobytes())
154154
# Create query dict for each vector

dlstreamer-pipeline-server/user_scripts/gvapython/sscape/sscape_policies.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,18 @@ def reidPolicy(pobj, item, fw, fh):
3737
name = tensor.get('name','')
3838
if name and ('reid' in name or 'embedding' in name):
3939
reid_vector = tensor.get('data', [])
40-
v = struct.pack("256f",*reid_vector)
40+
# Handle variable-length re-id vectors from different models
41+
if not reid_vector:
42+
continue
43+
vector_len = len(reid_vector)
44+
# Pack vector with its actual dimensions
45+
format_string = f"{vector_len}f"
46+
try:
47+
v = struct.pack(format_string, *reid_vector)
48+
except struct.error as e:
49+
import sys
50+
print(f"Failed to pack reid vector of length {vector_len}: {e}", file=sys.stderr)
51+
continue
4152
# Move reid under metadata key
4253
if 'metadata' not in pobj:
4354
pobj['metadata'] = {}

0 commit comments

Comments
 (0)