cc1234 commited on
Commit
55bf202
1 Parent(s): ec38330
Files changed (1) hide show
  1. app.py +9 -9
app.py CHANGED
@@ -14,9 +14,6 @@ import gradio as gr
14
  from annoy import AnnoyIndex
15
  from deepface import DeepFace
16
 
17
- import lancedb
18
- db = lancedb.connect("../../.lancedb")
19
- tbl = db.open_table("face")
20
 
21
  index = AnnoyIndex(512, "euclidean")
22
  index.load(f"face.db")
@@ -56,6 +53,7 @@ def image_search_performers(image, threshold=20.0, results=3):
56
  t = time.time()
57
  faces = DeepFace.represent(img_path = image_array, detector_backend='retinaface', model_name='Facenet512', normalization="Facenet2018")
58
  # faces = DeepFace.represent(img_path = image_array, detector_backend='yolov8', model_name='Facenet512', normalization="Facenet2018")
 
59
  print(f"Time to find faces: {time.time() - t}")
60
  for face in faces:
61
  embedding = face['embedding']
@@ -100,11 +98,12 @@ def search_performer(vector, threshold=20.0, results=3):
100
  threshold = threshold or 20.0
101
  results = results or 3
102
 
103
- db_results = tbl.search(vector).limit(50).to_list()
104
-
 
105
  persons = {}
106
- for result in db_results:
107
- id = result['performer_id']
108
  if id in persons:
109
  persons[id]["hits"] += 1
110
  persons[id]["distance"] -= 0.5
@@ -113,8 +112,8 @@ def search_performer(vector, threshold=20.0, results=3):
113
 
114
  persons[id] = {
115
  "id": id,
116
- "distance": round(result['_distance'], 2),
117
- "confidence": normalize_confidence_from_distance(result['_distance'], threshold),
118
  "hits": 1,
119
  }
120
 
@@ -122,6 +121,7 @@ def search_performer(vector, threshold=20.0, results=3):
122
  persons[id].update(PERFORMER_DB.get(id))
123
 
124
  persons = sorted(persons.values(), key=lambda x: x["distance"])
 
125
  return persons[:results]
126
 
127
 
 
14
  from annoy import AnnoyIndex
15
  from deepface import DeepFace
16
 
 
 
 
17
 
18
  index = AnnoyIndex(512, "euclidean")
19
  index.load(f"face.db")
 
53
  t = time.time()
54
  faces = DeepFace.represent(img_path = image_array, detector_backend='retinaface', model_name='Facenet512', normalization="Facenet2018")
55
  # faces = DeepFace.represent(img_path = image_array, detector_backend='yolov8', model_name='Facenet512', normalization="Facenet2018")
56
+ # faces = DeepFace.represent(img_path = image_array, detector_backend='mtcnn', model_name='Facenet512', normalization="Facenet2018")
57
  print(f"Time to find faces: {time.time() - t}")
58
  for face in faces:
59
  embedding = face['embedding']
 
98
  threshold = threshold or 20.0
99
  results = results or 3
100
 
101
+ ids, distances = index.get_nns_by_vector(
102
+ vector, 50, search_k=100000, include_distances=True
103
+ )
104
  persons = {}
105
+ for p, distance in zip(ids, distances):
106
+ id = ANNOY_INDEX[p]
107
  if id in persons:
108
  persons[id]["hits"] += 1
109
  persons[id]["distance"] -= 0.5
 
112
 
113
  persons[id] = {
114
  "id": id,
115
+ "distance": round(distance, 2),
116
+ "confidence": normalize_confidence_from_distance(distance, threshold),
117
  "hits": 1,
118
  }
119
 
 
121
  persons[id].update(PERFORMER_DB.get(id))
122
 
123
  persons = sorted(persons.values(), key=lambda x: x["distance"])
124
+ # persons = [p for p in persons if p["distance"] < threshold]
125
  return persons[:results]
126
 
127