pcktm / agh-vpr

0 stars 1 forks source link

Change requests #1

Closed pcktm closed 1 year ago

pcktm commented 1 year ago
pcktm commented 1 year ago
@router.post("/find")
async def find_place(file: UploadFile = File(...), db: Session = Depends(get_db)):
    image = cv2.imdecode(np.fromstring(await file.read(), np.uint8), cv2.IMREAD_UNCHANGED)
    places = best_match(image, db)

Coś takiego chyba działa, tylko wszędzie trzeba zmienić cv2.imread na po prostu cv2.cvtcolor i przekazywać to samo zdjęcie głębiej

anetaap commented 1 year ago

Okay, dziękuję, poprawię jak najszybciej.

anetaap commented 1 year ago

Co do bovw z faiss-em wydaje mi się, że poprawnie tam trenuję

with open('VPR/data/descriptors.pkl', 'rb') as fp:
    files = pickle.load(fp)

descriptors = np.concatenate([f['descriptors'] for f in files],
                                 axis=0).astype(np.float32)

kmeans_ = faiss_kmeans(descriptors)
kmeans_.train(descriptors)

w descriptors znajdują się deskryptory z danych wejściowych.

pcktm commented 1 year ago

Hmm faktycznie chyba tak, musiałem się przeoczyć, przepraszam.

Możesz zrobić to kmeans tylko na startupie albo jeszcze lepiej całkowicie offline, podczas tego extract keypoints? W sensie bo przy kazdym request-cie to wydaje sie troche wasteful...

pcktm commented 1 year ago

I wiesz jak dostaniesz z tego faiss-owego KMeans centroidy to potem już łatwo, bo wystarczy znaleźć najbliższy dla każdego punktu, tak jak tutaj: image

pcktm commented 1 year ago

Ale w gruncie rzeczy mam wyjebane, moze sie liczyć na całym datasecie przy startupie serwera no biggie i będzie Ci łatwiej bo nie trzeba nic robić manualnie wtedy.

anetaap commented 1 year ago

Chyba przerzucę się na tę wersję z zapisywaniem go do pliku i potem odczytywaniem tylko, bo jak użytkownik doda nowy budynek do bazy to pasuje zaktualizować kmeans (no i fajnie jakby to szybkie było) i do keypointów, deskryptorów dodać dane z nowego zdjęcia, więc to tam jeszcze będzie poprawiane. Plus tak sobie myślałam, że w tym przypadku chyba pasuje jednak zdjęcie zapisać na dysku, bo ono wtedy będzie tym zdjęciem reprezentującym to miejsce, które będziesz chciał wyświetlać w przypadku rozpoznania tego budynku. Tylko wtedy tam muszę ujednolicić ścieżki zapisania tych zdjęć.

pcktm commented 1 year ago

To znaczy, pewnie - zapisuj do pliku, ale podczas requesta nie ładuj go 3 razy z dysku tylko żongluj tym jednym.

anetaap commented 1 year ago

Jasne jasne, wtedy to zdjęcie będzie tylko potrzebne do przekazania Ci go na front w razie rozpoznania miejsca. A to w sumi pytanko, w jakiej formie przekazywać Ci zdjęcie reprezentacyjne budynku?

pcktm commented 1 year ago

Ja chcę URL do pliku, który serwujesz z serwera