File size: 2,122 Bytes
0930d33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import os
import sys
src_directory = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..", "src"))
sys.path.append(src_directory)
import streamlit as st
from utils import logger
from database_pinecone import querry_database
from model.clip_model import ClipModel

clip_model = ClipModel()
logger = logger.get_logger()

PAGE_TITLE = "Look A Like - Image Finder"
PAGE_LAYOUT = "centered"
SIDEBAR_TITLE = "Find Similar Images"

def setup_page():
    if 'is_page_configured' not in st.session_state:
        st.set_page_config(page_title=PAGE_TITLE, layout=PAGE_LAYOUT)
        st.title(PAGE_TITLE)
        st.sidebar.title(SIDEBAR_TITLE)
        logger.info(f"Page configured with title '{PAGE_TITLE}', layout '{PAGE_LAYOUT}', and sidebar title '{SIDEBAR_TITLE}'")
        st.session_state.is_page_configured = True
    else:
        logger.info("Page configuration already completed. Skipping setup.")

def get_user_selection(options):
    selected_option = st.sidebar.selectbox("Select the option", options)
    return selected_option

def get_search_image_input():
    uploaded_image = st.sidebar.file_uploader("Upload the image to get similar images", type=['png', 'jpeg'])
    return uploaded_image

def get_search_text_input():
    user_search = st.sidebar.text_input("Enter the text to search")
    return user_search

def display_images(response):
    if response:
        cols = st.columns(2)
        for i, result in enumerate(response.matches):
            with cols[i % 2]:
                st.image(result.metadata["url"])

def write_message(message):
    st.write(message)

def get_images_by_text(query):
    embedding = clip_model.get_text_embedding(query)
    response = querry_database.fetch_data(embedding)
    message = f"Showing search results for {query}"
    write_message(message)
    images = display_images(response)

def get_images_by_image(query):
    embedding = clip_model.get_uploaded_image_embedding(query)
    response = querry_database.fetch_data(embedding)
    message = f"Showing search results of relevant images"
    write_message(message)
    images = display_images(response)