diff --git a/server/cluster.py b/server/cluster.py index 516e90c..4d6b563 100644 --- a/server/cluster.py +++ b/server/cluster.py @@ -193,17 +193,36 @@ def update_face_identity(identities, face, closest): def cluster_faces(face): identities = [] + perc = -1 for i, face in enumerate(faces): - print(f'Clustering {i+1}/{len(faces)}') + new_perc = int(100 * (i+1) / len(faces)) + if new_perc != perc: + perc = new_perc + print(f'Clustering faces {perc}% complete with {len(identities)} identities.') closest = find_nearest_face(faces, identities, face, threshold = 0.25) if closest == None: - print(f'Face {i+1} does not have any matches.') continue identity = update_face_identity(identities, face, closest) # if identity['faces'] > 2: # print(f'Updated identity {identity["id"]} to hold {identity["faces"]} faces.') return identities +def cluster_identities(identities): + perc = -1 + last_len = 0 + while last_len != len(identities): + last_len = len(identities) + for i, identity in enumerate(identities): + new_perc = int(100 * (i+1) / len(identities)) + if new_perc != perc: + perc = new_perc + print(f'Clustering identities {perc}% complete with {len(identities)} identities.') + closest = find_nearest_face([], identities, face, threshold = 0.25) + if closest == None: + continue + update_face_identity(identities, identity, closest) + return identities + def identity_get_faces(item): return item['faces'] @@ -233,11 +252,14 @@ with conn: face['descriptors'] = np.frombuffer(descriptors) identities = cluster_faces(faces) + #identities = cluster_identities(identities) identities.sort(reverse = True, key = identity_get_faces) + sum = 0 for identity in identities: + sum += identity['faces'] print(f'{identity["id"]} has {identity["faces"]} faces') - print(f'{len(identities)} identities seeded.') + print(f'{len(identities)} identities seeded with {sum} faces.') exit(0) if False: