-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindx_pinecone_db.py
68 lines (49 loc) · 1.64 KB
/
indx_pinecone_db.py
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
63
64
65
66
67
68
import pinecone
import os
import requests
import shortuuid
import tqdm
import numpy as np
from PIL import Image
from decouple import config
import torch
import torchvision
from torchvision.transforms import (
Compose,
Resize,
CenterCrop,
ToTensor,
Normalize
)
def process_images(img_dir, model):
vectors = []
preprocess = Compose([
Resize(256),
CenterCrop(224),
ToTensor(),
Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
for file_name in os.listdir(img_dir):
if file_name.lower().endswith(('.jpg', '.jpeg', '.png', '.gif', '.bmp')):
img_path = os.path.join(img_dir, file_name)
img = Image.open(img_path)
embedding = model(preprocess(img).unsqueeze(0)).tolist()
vector = {'id':str(file_name), 'values':embedding[0]}
vectors.append(vector)
return vectors
def new_index(index_name,dim):
pinecone_api_key = config("PINECONE_API_KEY")
pinecone.init(api_key=pinecone_api_key, environment="us-west4-gcp")
model = torchvision.models.squeezenet1_1(pretrained=True).eval()
# if the index does not already exist, we create it
if index_name not in pinecone.list_indexes():
pinecone.create_index(name=index_name, dimension=dim)
# instantiate connection to your Pinecone index
index = pinecone.Index(index_name)
vectors = process_images(img_dir="static/img",model=model)
index.upsert(vectors)
check = index.describe_index_stats()
return check
INDEX_NAME = 'pinecone-image-search'
INDEX_DIMENSION = 1000
print(new_index(INDEX_NAME,INDEX_DIMENSION))