SmartOffice-1 / detector_chat.py
SuriRaja's picture
Upload 13 files
98b1db7 verified
import numpy as np
def pairwise_chat_flags(tracks, max_dist_px=80, min_stationary_s=10, fps=25.0):
# tracks: dict id -> {'centroid':(x,y), 'history':[...]} ; returns set of ids chatting
ids = list(tracks.keys())
centroids = [tracks[i]['centroid'] for i in ids]
chatting_ids = set()
# Stationary check: movement in last ~min_stationary_s
window = max(1, int(min_stationary_s * fps * 0.5))
def is_stationary(hist):
if len(hist) < window+1: return False
pts = np.array(hist[-window:])
d = np.linalg.norm(pts - pts.mean(axis=0), axis=1).mean()
return d < 2.5 # pixels
for i in range(len(ids)):
for j in range(i+1, len(ids)):
c1 = np.array(centroids[i]); c2 = np.array(centroids[j])
dist = np.linalg.norm(c1 - c2)
if dist <= max_dist_px and is_stationary(tracks[ids[i]]['history']) and is_stationary(tracks[ids[j]]['history']):
chatting_ids.add(ids[i]); chatting_ids.add(ids[j])
return chatting_ids