|
import configparser |
|
import gradio as gr |
|
import numpy as np |
|
import pandas as pd |
|
from search_engine_model import SearchEngineModel |
|
|
|
def get_image_embeddings(input_image_paths_list): |
|
search_engine_model = SearchEngineModel() |
|
|
|
model, preprocess = search_engine_model.load_clip_model() |
|
images_paths_list = [] |
|
image_embeddings_list = [] |
|
for current_input_image_path_aux in input_image_paths_list: |
|
current_image_embeddings = search_engine_model.encode_image(model, preprocess, current_input_image_path_aux) |
|
image_embeddings_list.append(current_image_embeddings.values[0]) |
|
|
|
image_embeddings_np = np.array(image_embeddings_list) |
|
image_embeddings_df = pd.DataFrame(image_embeddings_np) |
|
image_embeddings_df.insert(0, "image_name", input_image_paths_list) |
|
image_embeddings_np = image_embeddings_df.values |
|
|
|
output_df = gr.DataFrame( |
|
type="numpy", |
|
headers=['image_name'] + [f'feature_{it}' for it in range(0, len(image_embeddings_df.columns)-1)], |
|
value=image_embeddings_np |
|
) |
|
|
|
return output_df |
|
|
|
def main(): |
|
config_manager_obj = configparser.ConfigParser() |
|
config_manager_obj.read('./config.cfg') |
|
|
|
main_app = gr.Interface( |
|
fn=get_image_embeddings, |
|
inputs=[ |
|
gr.File(label="Upload Image", file_count="multiple"), |
|
], |
|
outputs=[ |
|
gr.Dataframe(type='numpy'), |
|
], |
|
title="CLIP Image Embeddings", |
|
description="Obtain the embeddings of the input images", |
|
flagging_mode="never" |
|
) |
|
|
|
HOST_IP_ADDRESS = config_manager_obj['SERVER']['HOST_IP_ADDRESS'] |
|
PORT_NUMBER = int(config_manager_obj['SERVER']['PORT_NUMBER']) |
|
main_app.launch(server_name=HOST_IP_ADDRESS, server_port=PORT_NUMBER) |
|
|
|
main() |