ashish-001 commited on
Commit
cf4dabd
·
verified ·
1 Parent(s): f6dccc0

Upload 5009 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +0 -0
  2. app.py +145 -0
  3. data/2b9adfc7-6437-464a-9a6e-68d5e8f953a8/data_level0.bin +3 -0
  4. data/2b9adfc7-6437-464a-9a6e-68d5e8f953a8/header.bin +3 -0
  5. data/2b9adfc7-6437-464a-9a6e-68d5e8f953a8/index_metadata.pickle +3 -0
  6. data/2b9adfc7-6437-464a-9a6e-68d5e8f953a8/length.bin +3 -0
  7. data/2b9adfc7-6437-464a-9a6e-68d5e8f953a8/link_lists.bin +3 -0
  8. data/chroma.sqlite3 +3 -0
  9. images/000000000139.jpg +3 -0
  10. images/000000000285.jpg +3 -0
  11. images/000000000632.jpg +3 -0
  12. images/000000000724.jpg +3 -0
  13. images/000000000776.jpg +3 -0
  14. images/000000000785.jpg +3 -0
  15. images/000000000802.jpg +0 -0
  16. images/000000000872.jpg +3 -0
  17. images/000000000885.jpg +3 -0
  18. images/000000001000.jpg +3 -0
  19. images/000000001268.jpg +3 -0
  20. images/000000001296.jpg +3 -0
  21. images/000000001353.jpg +0 -0
  22. images/000000001425.jpg +3 -0
  23. images/000000001490.jpg +3 -0
  24. images/000000001503.jpg +0 -0
  25. images/000000001532.jpg +3 -0
  26. images/000000001584.jpg +3 -0
  27. images/000000001675.jpg +0 -0
  28. images/000000001761.jpg +3 -0
  29. images/000000001818.jpg +3 -0
  30. images/000000001993.jpg +3 -0
  31. images/000000002006.jpg +3 -0
  32. images/000000002149.jpg +0 -0
  33. images/000000002153.jpg +3 -0
  34. images/000000002157.jpg +3 -0
  35. images/000000002261.jpg +3 -0
  36. images/000000002299.jpg +3 -0
  37. images/000000002431.jpg +3 -0
  38. images/000000002473.jpg +0 -0
  39. images/000000002532.jpg +3 -0
  40. images/000000002587.jpg +3 -0
  41. images/000000002592.jpg +3 -0
  42. images/000000002685.jpg +3 -0
  43. images/000000002923.jpg +0 -0
  44. images/000000003156.jpg +3 -0
  45. images/000000003255.jpg +3 -0
  46. images/000000003501.jpg +3 -0
  47. images/000000003553.jpg +3 -0
  48. images/000000003661.jpg +3 -0
  49. images/000000003845.jpg +3 -0
  50. images/000000003934.jpg +3 -0
.gitattributes CHANGED
The diff for this file is too large to render. See raw diff
 
app.py ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import chromadb
2
+ from chromadb.config import Settings
3
+ import torchvision.models as models
4
+ import torch
5
+ from torchvision import transforms
6
+ from PIL import Image
7
+ import logging
8
+ import streamlit as st
9
+ import requests
10
+ import json
11
+ import uuid
12
+ import os
13
+
14
+ try:
15
+
16
+ logging.basicConfig(level=logging.INFO)
17
+ logger = logging.getLogger(__name__)
18
+
19
+ @st.cache_resource
20
+ def load_mobilenet_model():
21
+ device = 'cpu'
22
+ model = models.mobilenet_v3_small(pretrained=False)
23
+ model.classifier[3] = torch.nn.Linear(1024, 768)
24
+ model.load_state_dict(torch.load(
25
+ 'mobilenet_v3_small_distilled_new_state_dict.pth', map_location=device))
26
+ model.eval().to(device)
27
+ return model
28
+
29
+ @st.cache_resource
30
+ def load_chromadb():
31
+ chroma_client = chromadb.PersistentClient(
32
+ path='data', settings=Settings(anonymized_telemetry=False))
33
+ collection = chroma_client.get_collection(name='images')
34
+ return collection
35
+
36
+ model = load_mobilenet_model()
37
+ logger.info("MobileNet loaded")
38
+ collection = load_chromadb()
39
+ logger.info("ChromaDB loaded")
40
+ logger.info(
41
+ f"Connected to ChromaDB collection images with {collection.count()} items")
42
+
43
+ preprocess = transforms.Compose([
44
+ transforms.Resize((224, 224)),
45
+ transforms.ToTensor(),
46
+ transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[
47
+ 0.229, 0.224, 0.225])
48
+ ])
49
+
50
+ def get_image_embedding(image):
51
+ if isinstance(image, str):
52
+ img = Image.open(image).convert('RGB')
53
+ else:
54
+ img = Image.open(image).convert('RGB')
55
+ input_tensor = preprocess(img).unsqueeze(0).to('cpu')
56
+ with torch.no_grad():
57
+ student_embedding = model(input_tensor)
58
+
59
+ return torch.nn.functional.normalize(student_embedding, p=2, dim=1).squeeze(0).tolist()
60
+
61
+ def save_image(image_file):
62
+ unique_filename = f"{image_file.name}"
63
+ save_path = os.path.join('images', unique_filename)
64
+ with open(save_path, "wb") as f:
65
+ f.write(image_file.getbuffer())
66
+ return save_path
67
+
68
+ def resize_image(image_path, size=(224, 224)):
69
+ if isinstance(image_path, str):
70
+ img = Image.open(image_path).convert("RGB")
71
+ else:
72
+ # Handle uploaded file
73
+ img = Image.open(image_path).convert("RGB")
74
+ img_resized = img.resize(size, Image.LANCZOS) # High-quality resizing
75
+ return img_resized
76
+
77
+ st.sidebar.header("Upload Images")
78
+ image_files = st.sidebar.file_uploader(
79
+ "Upload images", type=["png", "jpg", "jpeg"], accept_multiple_files=True)
80
+ num_images = st.sidebar.slider(
81
+ "Number of results to return", min_value=1, max_value=10, value=3)
82
+
83
+ if image_files:
84
+ st.sidebar.subheader(
85
+ "Add Images to collection")
86
+ if st.sidebar.button("Add uploaded images"):
87
+ for idx, image_file in enumerate(image_files):
88
+ image_embedding = get_image_embedding(image_file)
89
+ saved_path = save_image(image_file)
90
+ unique_id = str(uuid.uuid4())
91
+ metadata = {
92
+ 'path': f'images/{image_file.name}', "type": "photo"
93
+ }
94
+ collection.add(
95
+ embeddings=[image_embedding],
96
+ ids=[unique_id],
97
+ metadatas=[metadata]
98
+ )
99
+ st.sidebar.success(
100
+ f"Image {image_file.name} added to the collection")
101
+
102
+ st.title('Image Search Using Text')
103
+ st.write(
104
+ "The images stored in this database are sourced from the [COCO 2017 Validation Dataset](https://cocodataset.org/#download).")
105
+ st.write('Enter the text to search for images with matching description')
106
+ text_input = st.text_input("Description", "Playground")
107
+ if st.button("Search"):
108
+ if text_input.strip():
109
+ params = {'text': text_input}
110
+ response = requests.get(
111
+ 'https://ashish-001-text-embedding-api.hf.space/embedding', params=params)
112
+ if response.status_code == 200:
113
+ logger.info("Embedding returned by API successfully")
114
+ data = json.loads(response.content)
115
+ embedding = data['embedding']
116
+ results = collection.query(
117
+ query_embeddings=[embedding],
118
+ n_results=num_images
119
+ )
120
+ images = [results['metadatas'][0][i]['path']
121
+ for i in range(len(results['metadatas'][0]))]
122
+ distances = [results['distances'][0][i]
123
+ for i in range(len(results['metadatas'][0]))]
124
+ if images:
125
+ cols_per_row = 3
126
+ rows = (len(images)+cols_per_row-1)//cols_per_row
127
+ for row in range(rows):
128
+ cols = st.columns(cols_per_row)
129
+ for col_idx, col in enumerate(cols):
130
+ img_idx = row*cols_per_row+col_idx
131
+ if img_idx < len(images):
132
+ resized_img = resize_image(
133
+ images[img_idx], size=(224, 224))
134
+ col.image(resized_img,
135
+ caption=f"Image {img_idx+1}\ndistance {distances[img_idx]}", use_container_width=True)
136
+ else:
137
+ st.write("No image found")
138
+ else:
139
+ st.write("Please try again later")
140
+ logger.info(f"status code {response.status_code} returned")
141
+ else:
142
+ st.write("Please enter text in the text area")
143
+
144
+ except Exception as e:
145
+ logger.info(f"Exception occured: {e}")
data/2b9adfc7-6437-464a-9a6e-68d5e8f953a8/data_level0.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b2615c0e69a7f28c18f6e0617b4bcea2e66e69d562e34b1b87636a78dcf368b7
3
+ size 16060000
data/2b9adfc7-6437-464a-9a6e-68d5e8f953a8/header.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aa80aba5314c8ce52cf6f6e7f1d45e6b8021453f9c7f7b292ee6a5dd1a776372
3
+ size 100
data/2b9adfc7-6437-464a-9a6e-68d5e8f953a8/index_metadata.pickle ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dc389628547534447cc61f658675b83226ca3ac7d507fc74e3700d004400bfab
3
+ size 187994
data/2b9adfc7-6437-464a-9a6e-68d5e8f953a8/length.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e3e5a4c01928bba72fd04ee278bf472b3293b60b979c0104fdc71105a9cbc587
3
+ size 20000
data/2b9adfc7-6437-464a-9a6e-68d5e8f953a8/link_lists.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1de5334c70f1165524f9ccc0309d5c67d6b37783b27179109edd39233e529914
3
+ size 42780
data/chroma.sqlite3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3cc86101247d3b61131d449cb045e687c8b808f69cc94ee0a48c9da0d52df6bc
3
+ size 22306816
images/000000000139.jpg ADDED

Git LFS Details

  • SHA256: ffe0f0cec3b2e27aab1967229cdf0a0d7751dcdd5800322f0b8ac0dffb3b8a8d
  • Pointer size: 131 Bytes
  • Size of remote file: 162 kB
images/000000000285.jpg ADDED

Git LFS Details

  • SHA256: f3a2974ce3686332609124c70e3e6a2e3aca43fccf1cd1bd7c5c03820977f57d
  • Pointer size: 131 Bytes
  • Size of remote file: 336 kB
images/000000000632.jpg ADDED

Git LFS Details

  • SHA256: a4cd7f45ac1ce27eaafb254b23af7c0b18a064be08870ceaaf03b2147f2ce550
  • Pointer size: 131 Bytes
  • Size of remote file: 156 kB
images/000000000724.jpg ADDED

Git LFS Details

  • SHA256: 5c0e559c75d3969c8e3e297b61f61063f78045c9d4802b526ba616361f3823fd
  • Pointer size: 131 Bytes
  • Size of remote file: 130 kB
images/000000000776.jpg ADDED

Git LFS Details

  • SHA256: 1dd31e9059c491992be2f562624eb4093e17aee08b4f7baf5ff9ea24543b0a33
  • Pointer size: 131 Bytes
  • Size of remote file: 176 kB
images/000000000785.jpg ADDED

Git LFS Details

  • SHA256: 83981537a7baeafbeb9c8cb67b3484dc26433f574b3685d021fa537e277e4726
  • Pointer size: 131 Bytes
  • Size of remote file: 134 kB
images/000000000802.jpg ADDED
images/000000000872.jpg ADDED

Git LFS Details

  • SHA256: c2aa138ee3a59b057a7ba6fc5a6a18e62af531aa7dab78a7bfd33c1cd7e55eb6
  • Pointer size: 131 Bytes
  • Size of remote file: 318 kB
images/000000000885.jpg ADDED

Git LFS Details

  • SHA256: 1c67b783f78b18ddb5dd20aaba4d4aacaf98e5277051688a96da096afa9cdf1f
  • Pointer size: 131 Bytes
  • Size of remote file: 111 kB
images/000000001000.jpg ADDED

Git LFS Details

  • SHA256: 24bb77a31928404e45a0454b06f6a0bd54a8db103590c9d7917288a1e0269f05
  • Pointer size: 131 Bytes
  • Size of remote file: 321 kB
images/000000001268.jpg ADDED

Git LFS Details

  • SHA256: 8e85a2e71ee512fe748a3a3be9bb40b8591e8c501c0f3896efcb5be5999ec236
  • Pointer size: 131 Bytes
  • Size of remote file: 181 kB
images/000000001296.jpg ADDED

Git LFS Details

  • SHA256: 34a98da7c11bc8811e6eec445145bb16f3d5f4338945ba116edcc1fe554d181b
  • Pointer size: 131 Bytes
  • Size of remote file: 205 kB
images/000000001353.jpg ADDED
images/000000001425.jpg ADDED

Git LFS Details

  • SHA256: 71a37c25cdf944cf0a88b66d00a66cf899a88bd55c7ac80fcf1c76329d617e6c
  • Pointer size: 131 Bytes
  • Size of remote file: 111 kB
images/000000001490.jpg ADDED

Git LFS Details

  • SHA256: a044804a0b0186a1267acae34975932f14ede96c4a2b78fcee74e6c2fbd8414d
  • Pointer size: 131 Bytes
  • Size of remote file: 101 kB
images/000000001503.jpg ADDED
images/000000001532.jpg ADDED

Git LFS Details

  • SHA256: 974f2af6d81f65627a680ea9f42bdee1067a0ddcdb9f8e7a945bacd21d4dc2ce
  • Pointer size: 131 Bytes
  • Size of remote file: 174 kB
images/000000001584.jpg ADDED

Git LFS Details

  • SHA256: 77131e2f74aa7e374f951a69157cf7f51e00201f81bacfa8a9ab7309b245553f
  • Pointer size: 131 Bytes
  • Size of remote file: 138 kB
images/000000001675.jpg ADDED
images/000000001761.jpg ADDED

Git LFS Details

  • SHA256: c06b1845c54bb886a8fb9f8a6e908b29ceb661ffda1ca8df9a27f123806de648
  • Pointer size: 131 Bytes
  • Size of remote file: 116 kB
images/000000001818.jpg ADDED

Git LFS Details

  • SHA256: e638b349929d13bb27e148f4303a576e0a964ef81c0907d36748e0adb822a8e6
  • Pointer size: 131 Bytes
  • Size of remote file: 203 kB
images/000000001993.jpg ADDED

Git LFS Details

  • SHA256: 039f3bfb862023bde7f835a36c32d8f59a3e66488863c2a47b7b746e78c44186
  • Pointer size: 131 Bytes
  • Size of remote file: 110 kB
images/000000002006.jpg ADDED

Git LFS Details

  • SHA256: eda4af13818b566f8fa4f479e76286ad90cd5da2e8dfd530be0ab3637e1482ed
  • Pointer size: 131 Bytes
  • Size of remote file: 203 kB
images/000000002149.jpg ADDED
images/000000002153.jpg ADDED

Git LFS Details

  • SHA256: 8795ff243cf20405bd442631d5d1cb7e60665dd459c8d57f5764333808dd49fd
  • Pointer size: 131 Bytes
  • Size of remote file: 136 kB
images/000000002157.jpg ADDED

Git LFS Details

  • SHA256: 1a038609e5ceb0719105b1438d257c3d588e45384cb7ffe77b137e4d7e3ed477
  • Pointer size: 131 Bytes
  • Size of remote file: 125 kB
images/000000002261.jpg ADDED

Git LFS Details

  • SHA256: 1a0ad595a5675bdc7a5e95c04def56109c00d61168fd826158322fd538d70279
  • Pointer size: 131 Bytes
  • Size of remote file: 198 kB
images/000000002299.jpg ADDED

Git LFS Details

  • SHA256: d53d17dd8ecded4ae25555a0b8e193445846c7db7a6199c3ea35b09b3021f99e
  • Pointer size: 131 Bytes
  • Size of remote file: 104 kB
images/000000002431.jpg ADDED

Git LFS Details

  • SHA256: fa0ce7b066c2fe7bd0892aa2c6361943148db9766de60241e69d8026a18e05ad
  • Pointer size: 131 Bytes
  • Size of remote file: 141 kB
images/000000002473.jpg ADDED
images/000000002532.jpg ADDED

Git LFS Details

  • SHA256: fc017f5308d348bdb6011f2312b10853ccd780a4a7369f48774ef67f499f2e77
  • Pointer size: 131 Bytes
  • Size of remote file: 210 kB
images/000000002587.jpg ADDED

Git LFS Details

  • SHA256: bc37072a4f32bc99d6b02a684dd9bc69bd63567382315e5f497c9bb4a44c7208
  • Pointer size: 131 Bytes
  • Size of remote file: 114 kB
images/000000002592.jpg ADDED

Git LFS Details

  • SHA256: ffa3d472d44184b1f48878f7b097189723e57a24f36c44c29e4bc561110fbf41
  • Pointer size: 131 Bytes
  • Size of remote file: 103 kB
images/000000002685.jpg ADDED

Git LFS Details

  • SHA256: 2430b9bffb5ff52dfbaf7b922ac8018547e233a5996a6b017bd1a206a46c5bdb
  • Pointer size: 131 Bytes
  • Size of remote file: 273 kB
images/000000002923.jpg ADDED
images/000000003156.jpg ADDED

Git LFS Details

  • SHA256: 3c929365d99581f03b70a810819df4781ac024d88dec7e592229cbea7489a779
  • Pointer size: 131 Bytes
  • Size of remote file: 127 kB
images/000000003255.jpg ADDED

Git LFS Details

  • SHA256: c075f51a798e65d23e1c65a3fcc7736aeae4e03fbdd126f6d6b82cb07957d28b
  • Pointer size: 131 Bytes
  • Size of remote file: 159 kB
images/000000003501.jpg ADDED

Git LFS Details

  • SHA256: 9615e4dc9099e860748ce3f839ed077fa6a1fa39a10b909c00600bf4e2b3f392
  • Pointer size: 131 Bytes
  • Size of remote file: 151 kB
images/000000003553.jpg ADDED

Git LFS Details

  • SHA256: 4286197d2b6fc18809a37a4ef3035109509fcf52782fb83894835faaa5743bea
  • Pointer size: 131 Bytes
  • Size of remote file: 148 kB
images/000000003661.jpg ADDED

Git LFS Details

  • SHA256: 8746b068c166782f4b4fb7e6be9d16e5311e9c15bc867e21409b7f5d2eddefb4
  • Pointer size: 131 Bytes
  • Size of remote file: 103 kB
images/000000003845.jpg ADDED

Git LFS Details

  • SHA256: d5c4394c712e5c24586f2531e2adf25d14e398993cc12af561ca760f20881df0
  • Pointer size: 131 Bytes
  • Size of remote file: 164 kB
images/000000003934.jpg ADDED

Git LFS Details

  • SHA256: c7b1180c75a332e8768a4ca76b1fe8b3e3e073e2b925d94f43fa5439535d5dcf
  • Pointer size: 131 Bytes
  • Size of remote file: 138 kB