Spaces:
Running
Running
fix app
Browse files
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 |
-
|
104 |
-
|
|
|
105 |
persons = {}
|
106 |
-
for
|
107 |
-
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(
|
117 |
-
"confidence": normalize_confidence_from_distance(
|
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 |
|