Vela commited on
Commit
df464b1
Β·
1 Parent(s): 5427e5e

Set up api

Browse files
src/api/main.py CHANGED
@@ -3,5 +3,4 @@ from routes import homepage_router
3
 
4
  app = FastAPI()
5
 
6
- # Include the routers in the app
7
  app.include_router(homepage_router, prefix="/api", tags=["Home Page"])
 
3
 
4
  app = FastAPI()
5
 
 
6
  app.include_router(homepage_router, prefix="/api", tags=["Home Page"])
src/api/routes/home_page_api.py CHANGED
@@ -3,14 +3,25 @@ import sys
3
  src_directory = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..", "src"))
4
  sys.path.append(src_directory)
5
  from fastapi import APIRouter, HTTPException
6
- from schemas import schema
7
  from app import homepage
8
 
9
-
10
  router = APIRouter()
11
 
12
- @router.post("/{text_querry}", summary="Find the image by text")
13
- def search_image(search_image: schema.ImageSearch):
14
- homepage.get_images_by_text(search_image.querry_text)
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
 
 
3
  src_directory = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../..", "src"))
4
  sys.path.append(src_directory)
5
  from fastapi import APIRouter, HTTPException
6
+ from schemas.schema import ImageSearch
7
  from app import homepage
8
 
 
9
  router = APIRouter()
10
 
11
+ @router.post("/search", summary="Find images by text")
12
+ def search_image(search_request: ImageSearch):
13
+ try:
14
+ query = search_request.query_text.strip()
15
+ if not query:
16
+ raise HTTPException(status_code=400, detail="Query text cannot be empty")
17
+
18
+ images = homepage.get_images_text_query(query)
19
+ if not images:
20
+ raise HTTPException(status_code=404, detail="No images found")
21
+
22
+ return images
23
+
24
+ except Exception as e:
25
+ raise HTTPException(status_code=500, detail=str(e))
26
 
27
 
src/api/schemas/schema.py CHANGED
@@ -1,5 +1,5 @@
1
  from pydantic import BaseModel
2
 
3
  class ImageSearch(BaseModel):
4
- querry_text : str
5
 
 
1
  from pydantic import BaseModel
2
 
3
  class ImageSearch(BaseModel):
4
+ query_text: str = "Dogs"
5
 
src/app/__pycache__/homepage.cpython-313.pyc CHANGED
Binary files a/src/app/__pycache__/homepage.cpython-313.pyc and b/src/app/__pycache__/homepage.cpython-313.pyc differ
 
src/app/app.py CHANGED
@@ -2,5 +2,6 @@ import homepage
2
  import torch
3
 
4
  homepage.setup_page()
5
- homepage.search_tab()
 
6
  # st.link_button("Navigate to load data page",url="http://localhost:8501/load_data_page")
 
2
  import torch
3
 
4
  homepage.setup_page()
5
+ if homepage.get_or_greet_user_name():
6
+ homepage.search_tab()
7
  # st.link_button("Navigate to load data page",url="http://localhost:8501/load_data_page")
src/app/homepage.py CHANGED
@@ -4,7 +4,7 @@ src_directory = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..",
4
  sys.path.append(src_directory)
5
  import streamlit as st
6
  from utils import logger
7
- from database_pinecone import querry_database,create_database
8
  from model.clip_model import ClipModel
9
  from data import data_set
10
 
@@ -25,7 +25,7 @@ def setup_page():
25
  <i>{PAGE_TITLE} πŸ”πŸ“Έ</i>
26
  </h1>
27
  """, unsafe_allow_html=True)
28
- st.toast("✨ Welcome to Look-a-Like: The Ultimate Image Finder! Start searching now. πŸ”")
29
  logger.info(f"Page successfully configured with title: {PAGE_TITLE}")
30
 
31
  def search_tab():
@@ -99,6 +99,7 @@ def display_images(response):
99
  for i, result in enumerate(response.matches):
100
  with cols[i % 2]:
101
  st.image(result.metadata["url"], width=500)
 
102
  logger.info("Displayed the images successfully")
103
 
104
  def write_message(message):
@@ -106,14 +107,14 @@ def write_message(message):
106
 
107
  def get_images_by_text(query):
108
  embedding = clip_model.get_text_embedding(query)
109
- response = querry_database.fetch_data(embedding)
110
  message = f"πŸ” Showing search results for {query}"
111
  write_message(message)
112
  images = display_images(response)
113
 
114
  def get_images_by_image(query):
115
  embedding = clip_model.get_uploaded_image_embedding(query)
116
- response = querry_database.fetch_data(embedding)
117
  message = f"πŸ” Showing search results of relevant images"
118
  write_message(message)
119
  images = display_images(response)
@@ -161,6 +162,23 @@ def load_data():
161
  logger.error(f"Error loading data: {e}")
162
  st.session_state.load_clicked = False
163
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
 
165
  def about_us():
166
  if st.button("About us"):
 
4
  sys.path.append(src_directory)
5
  import streamlit as st
6
  from utils import logger
7
+ from database_pinecone import create_database, query_database
8
  from model.clip_model import ClipModel
9
  from data import data_set
10
 
 
25
  <i>{PAGE_TITLE} πŸ”πŸ“Έ</i>
26
  </h1>
27
  """, unsafe_allow_html=True)
28
+ # st.toast("✨ Welcome to Look-a-Like: The Ultimate Image Finder! Start searching now. πŸ”")
29
  logger.info(f"Page successfully configured with title: {PAGE_TITLE}")
30
 
31
  def search_tab():
 
99
  for i, result in enumerate(response.matches):
100
  with cols[i % 2]:
101
  st.image(result.metadata["url"], width=500)
102
+ st.write(f"Image score : {result.score}")
103
  logger.info("Displayed the images successfully")
104
 
105
  def write_message(message):
 
107
 
108
  def get_images_by_text(query):
109
  embedding = clip_model.get_text_embedding(query)
110
+ response = query_database.fetch_data(embedding)
111
  message = f"πŸ” Showing search results for {query}"
112
  write_message(message)
113
  images = display_images(response)
114
 
115
  def get_images_by_image(query):
116
  embedding = clip_model.get_uploaded_image_embedding(query)
117
+ response = query_database.fetch_data(embedding)
118
  message = f"πŸ” Showing search results of relevant images"
119
  write_message(message)
120
  images = display_images(response)
 
162
  logger.error(f"Error loading data: {e}")
163
  st.session_state.load_clicked = False
164
 
165
+ def get_or_greet_user_name():
166
+ if 'user_name' not in st.session_state:
167
+ st.session_state.user_name = None
168
+ logger.info("User_name not found in session_state, setting to None.")
169
+
170
+ if st.session_state.user_name is None:
171
+ logger.info("User_name is None, requesting user input.")
172
+ user_name = st.text_input("Please let me know your name:",
173
+ placeholder="Enter your name buddy")
174
+ if user_name:
175
+ st.session_state.user_name = user_name
176
+ logger.info(f"User entered name: {user_name}. Setting session_state.user_name.")
177
+ st.rerun()
178
+ else:
179
+ logger.info(f"User already entered a name: {st.session_state.user_name}. Displaying greeting.")
180
+ return st.toast(f"Hello {st.session_state.user_name}! Happy Searching")
181
+
182
 
183
  def about_us():
184
  if st.button("About us"):
src/app/requests/request_api.py ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sys
3
+ src_directory = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..", "src"))
4
+ sys.path.append(src_directory)
5
+ from utils import logger
6
+ import requests
7
+
8
+ logger = logger.get_logger()
9
+
10
+ def get_api(end_point : str = None , query: str = 'Dog'):
11
+ try:
12
+ API_URL = f"http://127.0.0.1:8000/api/{end_point}"
13
+ response = requests.post(API_URL, json={"query_text": query})
14
+ response.raise_for_status()
15
+ return response.json()
16
+ except requests.exceptions.RequestException as e:
17
+ logger.error(f"API Error: {e}")
18
+ return []
src/data/__pycache__/request_images.cpython-313.pyc CHANGED
Binary files a/src/data/__pycache__/request_images.cpython-313.pyc and b/src/data/__pycache__/request_images.cpython-313.pyc differ
 
src/database_pinecone/__pycache__/query_database.cpython-313.pyc ADDED
Binary file (1.31 kB). View file
 
src/database_pinecone/{querry_database.py β†’ query_database.py} RENAMED
File without changes