Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -45,21 +45,6 @@ def load_image_from_url(url, max_retries=3):
|
|
| 45 |
else:
|
| 46 |
return None
|
| 47 |
|
| 48 |
-
def initialize_faiss_index(collection):
|
| 49 |
-
# 모든 임베딩을 가져와 numpy 배열로 변환
|
| 50 |
-
all_data = collection.get(include=['embeddings', 'metadatas'])
|
| 51 |
-
all_embeddings = np.array(all_data['embeddings']).astype('float32')
|
| 52 |
-
all_metadatas = all_data['metadatas']
|
| 53 |
-
|
| 54 |
-
# faiss 인덱스 생성 및 임베딩 추가
|
| 55 |
-
dimension = all_embeddings.shape[1]
|
| 56 |
-
index = faiss.IndexFlatIP(dimension) # 코사인 유사도를 사용하려면 IndexFlatIP를 사용
|
| 57 |
-
index.add(all_embeddings)
|
| 58 |
-
|
| 59 |
-
return index, all_metadatas
|
| 60 |
-
|
| 61 |
-
faiss_index, all_metadatas = initialize_faiss_index(collection)
|
| 62 |
-
|
| 63 |
|
| 64 |
# 세그먼트 마스크 기반 임베딩 추출
|
| 65 |
def get_segmented_embedding(img, final_mask):
|
|
@@ -170,15 +155,14 @@ def find_similar_images(query_embedding, collection, top_k=5):
|
|
| 170 |
# 쿼리 임베딩 정규화 후 faiss 검색
|
| 171 |
query_embedding = query_embedding.reshape(1, -1).astype('float32')
|
| 172 |
faiss.normalize_L2(query_embedding)
|
| 173 |
-
|
| 174 |
|
| 175 |
# 검색된 상위 결과를 반환
|
| 176 |
structured_results = []
|
| 177 |
for metadata, idx in zip(all_metadatas, indices[0]):
|
| 178 |
-
similarity = np.dot(query_embedding, all_embeddings[idx]).item() # 코사인 유사도 계산
|
| 179 |
structured_results.append({
|
| 180 |
'info': metadata,
|
| 181 |
-
'similarity':
|
| 182 |
})
|
| 183 |
|
| 184 |
return structured_results
|
|
|
|
| 45 |
else:
|
| 46 |
return None
|
| 47 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
|
| 49 |
# 세그먼트 마스크 기반 임베딩 추출
|
| 50 |
def get_segmented_embedding(img, final_mask):
|
|
|
|
| 155 |
# 쿼리 임베딩 정규화 후 faiss 검색
|
| 156 |
query_embedding = query_embedding.reshape(1, -1).astype('float32')
|
| 157 |
faiss.normalize_L2(query_embedding)
|
| 158 |
+
distance, indices = index.search(query_embedding, top_k)
|
| 159 |
|
| 160 |
# 검색된 상위 결과를 반환
|
| 161 |
structured_results = []
|
| 162 |
for metadata, idx in zip(all_metadatas, indices[0]):
|
|
|
|
| 163 |
structured_results.append({
|
| 164 |
'info': metadata,
|
| 165 |
+
'similarity': 1-distance
|
| 166 |
})
|
| 167 |
|
| 168 |
return structured_results
|