File size: 1,338 Bytes
2ab45c8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import numpy as np
import gradio as gr
from sentence_transformers import util as st_util
import pandas as pd
import os
from utils import load_models, get_image_embedding, img_folder, model_name_to_ids, data_path, model_names


def search(input_img, num_outputs):
    results = []
    for model_name in model_names:
        query_embedding = get_image_embedding(model_name, input_img)
        top_results = st_util.semantic_search(query_embedding,
                                           np.vstack(list(corpus_embeddings[model_name + '-embedding'])),
                                              top_k=int(num_outputs))[0]
        results.append([os.path.join(img_folder,
                          corpus_embeddings.iloc[hit['corpus_id']]['name']) for hit in top_results])
    return results


load_models()
corpus_embeddings = pd.read_parquet(
    os.path.join(data_path, 'metadata/patagonia_losGatos_embeddings.pq'))



# Create the Gradio interface
iface = gr.Interface(
    fn=search,
    inputs=[gr.Image(type="pil"),
            gr.inputs.Number(label="Number of results", default=3)],
    outputs=[gr.Gallery(label=model_name, type='filepath') for model_name in model_names],
    title="Search Similar Images",
    description="Upload an image and find similar images",
)

# Launch the Gradio interface
iface.launch(debug=True)