Wyszukiwanie wizualne z Visii

Zdarzają nam się w pracy hackathony, podczas których testujemy jakieś narzędzia, frameworki, albo zwyczajnie zapuszczamy się tam, gdzie zazwyczaj nie ma czasu. Czasem pracujemy w grupach, czasem w pojedynkę. Zawsze jest w tym dużo zabawy i taka dziecięca radość z odkrywania nowych rzeczy. Polecam każdemu! (jeśli Twoje pytanie brzmi: "ale jak przekonać do tego przełożonych?", to dodam, że wiele z konceptów testowanych podczas hackathonu ląduje na produkcji. Ba! Ląduje tam szybciej, niż gdyby miały początek w Jirze)

Do rzeczy. Na ostatnim hackathonie postanowiłam przetestować Visii, czyli serwis do wyszukiwania wizualnego. Współpraca polega na tym, że karmi się ich zbiór swoimi danymi, a oni zajmują się przeszukiwaniem tego zbioru na podstawie obrazów. Było to o tyle ciekawe, że moja koleżanka pracowała na tym samy zbiorze danych, ale z pomocą AWS SageMaker'a, więc na trochę niższym poziomie. Mogłyśmy na końcu porównać wyniki: czas + koszty vs jakość zwracanych produktów. 

Jest kilka sposobów na komunikację z serwisem, wykorzystałam oczywiście API, bo tarzanie się w danych to moja specjalność. Zanim zaczęłam eksperymentować, musiałam poprosić ich o testowy dostęp. Kiedy już stworzyli dla mnie organizację i podarowali mi klucz do tejże, mogłam stworzyć zbiór danych i go nakarmić. Odbyło się to za pomocą dwóch POSTów w rodzaju:

curl -X POST \      
-H "Authorization: token my-org-api-token" \      
-H "Content-Type: application/json" \      
-H "Accept: application/vnd.visii.v2+json" \      
-d '{"name":"products"}' \      
"https://api.visii.com/orgs/ola/datasets"

następnie

curl -X POST \      
-H "Authorization: token my-org-api-token" \      
-H "Content-Type: application/json" \      
-H "Accept: application/vnd.visii.v2+json" \      
-d '{"content":[{"id":"123","url": "http://example.com/image1.jpg"},{"id":"345","url":"http://example.com/image2.jpg"}]}' \      
"https://api.visii.com/orgs/ola/datasets/products/content"

Polecam sprawdzić stan danych, zanim się go wyeksportuje, polecam też wrzucać dużo więcej danych w sekcji metadata. W powyższym przykładzie dodajemy tylko id i link do obrazka, ale w przypadku wyszukiwania produktów przyda się też kategoria, dostępność, cena, czy ponownie link do obrazka (o tym za chwilę). Wrzuciłam do mojego zbioru ponad 800 produktów z działu mody i rozpoczęłam wyszukiwania od takiego zapytania:

https://api.visii.com/orgs/ola/datasets/products/explore
?id={id}&fields=url&search=category:Dresses&limit=20

Póżniej usunęłam kategorię, żeby wyniki były bardziej różnorodne. Mogłabym też wyświetlać ich cenę i filtrować po dostępności, ale skończył mi się czas.

Visual search ma sens tylko w przypadku, kiedy mamy jakiś frontend, żeby zaprezentować wyniki (inaczej jest tylko JSONem z linkami). Zbudowałam więc kawałek HTMLa, który prezentuje obrazek produktu i kilkanaście wyników. Po kliknięciu w którykolwiek z nich, następuje szukanie na jego podstawie. Visii nazywa to eksploracją i pokazuje przykład 
z zegarkami u siebie na stronie. Mój przykładowy wynik eksploracji w świecie mody (jest trochę duplikatów):




Wyszukiwanie działa w ciekawy sposób, bo zwraca nie tylko podobne produkty, ale ma element losowości. To ponoć broni przed zapętleniem wokół tych samych produktów. Zauważ, że wyszukuje nie tylko po kolorze, ale też po fakturze materiału <3 API jest bardzo dobrze opisane i przejrzyste. Miałam tylko jedną zagwozdkę, kiedy wyniki nie zwracały mi linków do obrazka produktu. Musiałam "dokarmić" zbiór URLem w dziale metadata i zapytać o to explicite w zapytaniu (jak wyżej). 

Kiedy już mamy jakiś produkt, wyszukiwanie jest dość proste, trudniej jest z wczytywaniem pliku losowego zdjęcia z dysku. No właśnie, z dysku. Nie ma możliwości zrobienia tego na podstawie URLa, co jest dość drogie w developmencie przy ograniczonych hackathonowych zasobach. 

Rozwiązanie jest oczywiście płatne. Są to grosze (albo raczej eurocenty) za zapytanie, ale przy wielomilionowej publiczności koszty mogą szybko wzrosnąć. My dostaliśmy do zabawy konkretną ilość smoczych monet do wykorzystania w API. Polecam poprosić ich o monety dla siebie i pobawić się, bo wyniki są naprawdę dobre. Jeśli ktoś nie przepada za modą, może to być cokolwiek innego, co ma różne kolory i kształty. Oni na swojej stronie pokazują ciekawy przykład ze sztuką. Potrzebny jest tylko odpowiednio duży zbiór danych. 

Komentarze

Popularne posty z tego bloga

Jeśli jesteś najmądrzejszą osobą w pokoju, to jak najszybciej zmień pokój!

Fastline dla kobiet w IT? Nie, dziękuję.

Kto jest bardziej inteligentny od Ciebie?