def identity_detect(videos, exemplar, features):
log.debug('Loading features')
ids, vectors = zip(*[((i, j), f.load_features())
for i, vid_features in enumerate(features)
for j, f in enumerate(vid_features)])
log.debug('Building k-nn tree')
feat_nn = NearestNeighbors().fit(np.vstack(vectors))
log.debug('Doing look-up')
exemplar_vector = FaceFeatures.objects.get(
face=exemplar, labeler__name='facenet').load_features()
dists, id_indices = feat_nn.kneighbors([exemplar_vector], min(10000, len(vectors)))
face_map = defaultdict(list)
for (dist, k) in zip(dists[0], id_indices[0]):
(i, j) = ids[k]
if dist > FEATURE_DISTANCE_THRESHOLD:
break
face_map[videos[i].id].append(features[i][j])
return [face_map[video.id] for video in videos]
# Remove faces with negative coords and small height
评论列表
文章目录