fix: PeopleView 从 cluster 数据提取 trace_ids 和 representative_trace

- 构建 faceIdToTraceId 映射
- 从 representative_face.face_id 找到 trace_id
- 为每个 cluster 设置 trace_ids 字段
- 设置 representative_trace 字段
- 修复 group 缩略图无法显示的问题
This commit is contained in:
2026-10-01 11:22:44 +08:00
parent fef3b892d6
commit 28dfd3255d

View File

@@ -2056,6 +2056,8 @@ async function loadClusterResults() {
}
// Build cluster_id → faces[] mapping from frames
const clusterFacesMap: Record<string, any[]> = {}
const clusterTraceIdsMap: Record<string, Set<number>> = {}
const faceIdToTraceId: Record<string, number> = {}
for (const f of frames) {
for (const face of (f.faces || [])) {
const cid = face.cluster_id
@@ -2066,15 +2068,35 @@ async function loadClusterResults() {
frame: f.frame,
timestamp: f.timestamp,
confidence: face.confidence,
cluster_id: cid
cluster_id: cid,
trace_id: face.trace_id
})
if (face.trace_id !== undefined && face.trace_id !== null) {
if (!clusterTraceIdsMap[cid]) clusterTraceIdsMap[cid] = new Set()
clusterTraceIdsMap[cid].add(face.trace_id)
if (face.face_id) {
faceIdToTraceId[face.face_id] = face.trace_id
}
}
}
}
// Assign faces to each cluster
// Assign faces and trace_ids to each cluster
for (const c of groups) {
const cid = c.cluster_id || c.group_id
c.member_faces = clusterFacesMap[cid] || []
c.face_count = c.member_faces.length
c.trace_ids = Array.from(clusterTraceIdsMap[cid] || [])
// Set representative_trace from representative_face
if (c.representative_face?.face_id) {
const repTraceId = faceIdToTraceId[c.representative_face.face_id]
if (repTraceId !== undefined) {
c.representative_trace = repTraceId
}
}
// Fallback to first trace_id
if (c.representative_trace === undefined && c.trace_ids.length > 0) {
c.representative_trace = c.trace_ids[0]
}
}
if (groups.length) {
setClusterResults(fileUuid, groups)