Jak korzystać z Google Vision API

Niedawno omówiłem, jak komputery mogą widzieć, słyszeć, czuć, wąchać i smakować. Jednym ze sposobów, w jaki Twój kod „widzi”, jest interfejs API Google Vision. Interfejs API Google Vision łączy Twój kod z funkcjami rozpoznawania obrazów Google. Możesz myśleć o wyszukiwarce grafiki Google jako o pewnego rodzaju interfejsie API / REST dla images.google.com, ale robi ona znacznie więcej niż tylko wyświetlanie podobnych obrazów.

Google Vision może wykryć, czy jesteś kotem, czy człowiekiem, a także części Twojej twarzy. Próbuje wykryć, czy pozujesz lub robisz coś, co nie byłoby w porządku dla Google Safe Search - czy nie. Próbuje nawet wykryć, czy jesteś szczęśliwy, czy smutny.

Konfigurowanie interfejsu API Google Vision

Aby korzystać z Google Vision API, musisz założyć konto Google Compute Engine. GCE można wypróbować bezpłatnie, ale do rejestracji potrzebna jest karta kredytowa. Stamtąd wybierasz projekt (ale Mój pierwszy projekt jest wybierany, jeśli właśnie się zarejestrowałeś). Następnie zdobądź klucz API z menu po lewej stronie.

Tutaj używam prostego klucza API, którego mogę używać z narzędziem wiersza poleceń Curl (jeśli wolisz, możesz użyć innego narzędzia zdolnego do wywoływania interfejsów API REST):

Zapisz generowany przez siebie klucz w pliku tekstowym lub gdzieś w buforze (odnoszę się do tego jak YOUR_KEYna razie) i włącz API w swoim projekcie (przejdź do tego adresu URL i kliknij Włącz API):

Wybierz swój projekt na następnym ekranie:

Teraz jesteś gotowy do pracy! Umieść ten tekst w pliku o nazwie google_vision.json:

{"requests": [{"image": {"source": {"imageUri": "//upload.wikimedia.org/wikipedia/commons/9/9b/Gustav_chocolate.jpg"}}, "features": [ {"type": "TYPE_UNSPECIFIED", "maxResults": 50}, {"type": "LANDMARK_DETECTION", "maxResults": 50}, {"type": "FACE_DETECTION", "maxResults": 50}, {" type ":" LOGO_DETECTION "," maxResults ": 50}, {" type ":" LABEL_DETECTION "," maxResults ": 50}, {" type ":" TEXT_DETECTION ","maxResults": 50}, {"type": "SAFE_SEARCH_DETECTION", "maxResults": 50}, {"type": "IMAGE_PROPERTIES", "maxResults": 50}, {"type": "CROP_HINTS", "maxResults ": 50}, {" type ":" WEB_DETECTION "," maxResults ": 50}]}]}{"type": "WEB_DETECTION", "maxResults": 50}]}]}{"type": "WEB_DETECTION", "maxResults": 50}]}]}

To żądanie JSON informuje interfejs API Google Vision, który obraz ma przeanalizować i które funkcje wykrywania włączyć. Po prostu zrobiłem większość z nich do 50 wyników.

Teraz użyj Curl:

curl -v -s -H "Content-Type: application / json" //vision.googleapis.com/v1/images:annotate?key=YOUR_KEY --data-binary @ google_vision.json> results 

Patrząc na odpowiedź Google Vision API

* Połączono z vision.googleapis.com (74.125.196.95) port 443 (# 0) * Połączenie TLS 1.2 przy użyciu TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 * Certyfikat serwera: * .googleapis.com * Certyfikat serwera: Google Internet Authority G3 * Certyfikat serwera: GlobalSign> POST / v1 / images: annotate? key = YOUR_KEY HTTP / 1.1> Host: vision.googleapis.com> User-Agent: curl / 7.43.0> Accept: * / *> Content-Type: application / json> Content-Length: 2252 > Oczekiwanie: 100-kontynuuj> * Gotowe, czekam na 100-kontynuuj} [2252 bajty danych] * Całkowicie załadowano i w porządku <HTTP / 1.1 200 OK <Content-Type: application / json; charset = UTF-8 <Różne: X-Origin <Różne: Referer <Data: wt., 24 kwietnia 2018 18:26:10 GMT <Serwer: ESF <Kontrola pamięci podręcznej: prywatna <Ochrona X-XSS: 1; tryb = blok <Opcje-ramki-X: SAMEORYGIN <X-Content-Type-Options: nosniff <Alt-Svc: hq = ": 443"; ma = 2592000; quic = 51303433; quic = 51303432; quic = 51303431; quic = 51303339; quic = 51303335, quic = ": 443"; ma = 2592000; v = "43,42,41,39,35" <Accept-Ranges: none <Vary: Origin, Accept-Encoding <Transfer-Encoding: chunked <{[905 bajtów danych] * Połączenie # 0 z hostem vision.googleapis. com pozostawiony nienaruszony

Powinieneś zobaczyć coś takiego:

Jeśli spojrzysz na wyniki, zobaczysz to:

{"responses": [{"labelAnnotations": [{"mid": "/ m / 01yrx", "description": "cat", "score": 0.99524164, "topicality": 0.99524164}, {"mid": "/ m / 035qhg", "opis": "fauna", "wynik": 0,93651986, "aktualność": 0,93651986}, {"mid": "/ m / 04rky", "description": "ssak", "wynik ": 0.92701304," aktualność ": 0.92701304}, {" mid ":" / m / 07k6w8 "," description ":" małe i średnie koty "," score ": 0.92587274," aktualność ": 0.92587274}, {" środek ":" / m / 0307l ","opis ":" kot jak ssak "," punktacja ": 0,9215815," aktualność ": 0,9215815}, {" mid ":" / m / 09686 "," description ":" kręgowiec "," score ": 0,90370363," aktualność ": 0.90370363}, {" mid ":" / m / 01l7qd "," description ":" wąsy "," score ": 0.86890864," aktualność ": 0.86890864…opis ":" wąsy "," wynik ": 0,86890864," aktualność ": 0,86890864…opis ":" wąsy "," wynik ": 0,86890864," aktualność ": 0,86890864…

Google wie, że dostarczyłeś mu zdjęcie kota. Znalazł nawet wąsy!

Teraz spróbuję większego ssaka. Zastąp adres URL w żądaniu moim zdjęciem profilowym na Twitterze i uruchom je ponownie. Jest na nim zdjęcie, na którym zostałem uduszony przez słonia podczas mojej podróży do Tajlandii w 2014 roku.

Wyniki będą obejmować lokalizacje moich rysów twarzy.

… "Punkty orientacyjne": [{"type": "LEFT_EYE", "position": {"x": 114.420876, "y": 252.82072, "z": -0,00017215312}}, {"type": "RIGHT_EYE", "position": {"x": 193.82027, "y": 259,787, "z": -4.495486}}, {"type": "LEFT_OF_LEFT_EYEBROW", "position": {"x": 95,38249, "y": 234.60289, "z": 11.487803}},…

Google nie jest tak dobry w ocenie emocji jak rysy twarzy:

"rollAngle": 5.7688847, "panAngle": -3.3820703, "joyLikelihood": "UNLIKELY", "sorrowLikelihood": "BARDZO_UNLIKELY", "angerLikelihood": "UNLIKELY", "surpriseLikelihood": "BARDZO", "UNLIKELIKELIhood" BARDZO_UNLIKELY ”,„ niewyraźneLikelihood ”:„ BARDZO_UNLIKELY ”,„ nakrycie głowyLikelihood ”:„ BARDZO_UNLIKELY ”

Byłem zdecydowanie zaskoczony, bo nie spodziewałem się pocałunku (chciałem tylko zrobić sobie selfie ze słoniem). Na zdjęciu może być trochę radości połączonej z „fuj”, ponieważ pocałunki słonia pyska są niechlujne i trochę oślizgłe.

Google Vision zauważyło również kilka innych rzeczy dotyczących zdjęcia i mnie:

{"mid": "/ m / 0jyfg", "description": "okulary", "score": 0,7390568, "topicality": 0,7390568}, {"mid": "/ m / 08g_yr", "description": " świątynia "," score ": 0.7100323," topicality ": 0.7100323}, {" mid ":" / m / 05mqq3 "," description ":" snout "," score ": 0.65698373," topicality ": 0.65698373}, { "mid": "/ m / 07j7r", "description": "tree", "score": 0.6460454, "aktualność": 0.6460454}, {"mid": "/ m / 019nj4", "description": "smile "," score ": 0,60378826," aktualność ": 0,60378826}, {" mid ":" / m / 01j3sz "," description ":" śmiech ",„wynik”: 0,51390797, „aktualność”: 0,51390797}]…

Google rozpoznał pysk słonia! Zauważył też, że się uśmiecham i śmieję się. Zwróć uwagę, że niższe wyniki wskazują na mniejszą pewność, ale dobrze, że zauważył Google Vision API.

… "SafeSearchAnnotation": {"adult": "VERY_UNLIKELY", "spoof": "POSSIBLE", "medical": "BARDZO_UNLIKELY", "przemoc": "UNLIKELY", "racy": "UNLIKELY"}…

Google nie wierzy, że to coś więcej niż platoniczny pocałunek i zdaje sobie sprawę, że słoń nie krzywdzi mnie.

Oprócz tego w odpowiedzi znajdziesz takie rzeczy, jak pasujące obrazy i podobne obrazy. Znajdziesz także skojarzenia tematyczne. Na przykład raz napisałem na Twitterze o artykule „Xennials”, a teraz jestem z nim związany!

Jak przydatny jest interfejs API Google Vision?

Niezależnie od tego, czy pracujesz w branży bezpieczeństwa, czy w handlu detalicznym, możliwość ustalenia, co jest na podstawie obrazu, może być zasadniczo pomocna. Niezależnie od tego, czy próbujesz dowiedzieć się, jaką masz rasę kotów, kim jest ten klient, czy też Google uważa, że ​​felietonista ma wpływ na dany temat, interfejs API Google Vision może pomóc. Należy pamiętać, że warunki Google zezwalają na używanie tego interfejsu API tylko w aplikacjach do komputerów osobistych. Niezależnie od tego, czy uwielbiasz dane w wyszukiwarce, czy też sprawdzasz, czy treści przesłane przez użytkowników są dla dorosłych, czy nie, Google Vision może być właśnie tym, czego potrzebujesz.

Chociaż korzystałem z wersji interfejsu API, która korzysta z publicznych identyfikatorów URI, możesz również publikować nieprzetworzone lokalizacje plików binarnych lub Google Cloud Storage przy użyciu różnych permutacji.

Uwaga autora: Dziękuję mojemu koledze z Lucidworks, Royowi Kieslerowi , którego badania przyczyniły się do powstania tego artykułu.