Come utilizzare l'API di Google Vision

Di recente ho spiegato come i computer possono vedere, sentire, sentire, annusare e gustare. Uno dei modi in cui il tuo codice può "vedere" è con l'API di Google Vision. L'API di Google Vision collega il tuo codice alle funzionalità di riconoscimento delle immagini di Google. Puoi pensare a Google Image Search come a una sorta di interfaccia API / REST per images.google.com, ma fa molto di più che mostrarti immagini simili.

Google Vision può rilevare se sei un gatto o un essere umano, nonché le parti del tuo viso. Cerca di rilevare se ti stai atteggiando o facendo qualcosa che non andrebbe bene per Google Safe Search, oppure no. Cerca persino di rilevare se sei felice o triste.

Configurazione dell'API di Google Vision

Per utilizzare l'API di Google Vision, devi registrarti per un account Google Compute Engine. GCE può essere provato gratuitamente, ma per registrarti avrai bisogno di una carta di credito. Da lì selezioni un progetto (ma My First Project è selezionato se ti sei appena registrato). Quindi procurati una chiave API dal menu a sinistra.

Qui sto usando una semplice chiave API che posso usare con lo strumento da riga di comando Curl (se preferisci, puoi usare uno strumento diverso in grado di chiamare API REST):

Salva la chiave che genera in un file di testo o buffer da qualche parte (mi riferisco ad essa come YOUR_KEYper ora in poi) e abilita l'API sul tuo progetto (vai a questo URL e fai clic su Abilita l'API):

Seleziona il tuo progetto dalla schermata successiva:

Ora sei pronto per partire! Incolla questo testo in un file chiamato google_vision.json:

{"request": [{"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}, {" digita ":" 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}]}]}

Questa richiesta JSON indica all'API di Google Vision quale immagine analizzare e quali funzioni di rilevamento abilitare. Ho fatto la maggior parte di loro fino a 50 risultati.

Ora usa Curl:

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

Guardando la risposta dell'API di Google Vision

* Connesso a vision.googleapis.com (74.125.196.95) porta 443 (# 0) * Connessione TLS 1.2 utilizzando TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 * Certificato server: * .googleapis.com * Certificato server: Google Internet Authority G3 * Certificato server: 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 > Expect: 100-continue> * Fatto in attesa di 100-continue} [2252 bytes data] * Siamo completamente caricati e benissimo <HTTP / 1.1 200 OK <Content-Type: application / json; charset = UTF-8 <Vary: X-Origin <Vary: Referer <Data: Tue, 24 Apr 2018 18:26:10 GMT <Server: ESF <Cache-Control: private <X-XSS-Protection: 1; mode = block <X-Frame-Opzioni: SAMEORIGIN <Opzioni tipo di contenuto X: 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: nessuno <Vary: Origin, Accept-Encoding <Transfer-Encoding: chunked <{[905 bytes data] * Connessione n. 0 all'host vision.googleapis. com lasciato intatto

Dovresti vedere qualcosa del genere:

Se guardi nei risultati, vedrai questo:

{"responses": [{"labelAnnotations": [{"mid": "/ m / 01yrx", "description": "cat", "score": 0.99524164, "topicality": 0.99524164}, {"mid": "/ m / 035qhg", "descrizione": "fauna", "punteggio": 0.93651986, "attualità": 0.93651986}, {"mid": "/ m / 04rky", "descrizione": "mammifero", "punteggio ": 0.92701304," attualità ": 0.92701304}, {" mid ":" / m / 07k6w8 "," description ":" gatti di taglia piccola e media "," punteggio ": 0.92587274," attualità ": 0.92587274}, {" metà ":" / m / 0307l ","descrizione ":" gatto come mammifero "," punteggio ": 0.9215815," attualità ": 0.9215815}, {" mid ":" / m / 09686 "," descrizione ":" vertebrate "," punteggio ": 0.90370363," attualità ": 0.90370363}, {" mid ":" / m / 01l7qd "," description ":" whiskers "," score ": 0.86890864," attualità ": 0.86890864…descrizione ":" baffi "," punteggio ": 0,86890864," attualità ": 0,86890864…descrizione ":" baffi "," punteggio ": 0,86890864," attualità ": 0,86890864…

Google sa che gli hai fornito una foto di un gatto. Ha anche trovato i baffi!

Ora proverò un mammifero più grande. Sostituisci l'URL nella richiesta con la mia immagine del profilo Twitter ed eseguilo di nuovo. Ha una foto di me che vengo baciato da un elefante durante il mio viaggio del 2014 in Thailandia.

I risultati includeranno le posizioni delle mie caratteristiche facciali.

... "punti di riferimento": [{"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 non è bravo a giudicare le emozioni quanto i tratti del viso:

"rollAngle": 5.7688847, "panAngle": -3.3820703, "joyLikelihood": "UNLIKELY", "sorrowLikelihood": "VERY_UNLIKELY", "angerLikelihood": "UNLIKELY", "surpriseLikelihood": "VERY_LikELExposed" VERY_UNLIKELY "," blurLikelihood ":" VERY_UNLIKELY "," headwearLikelihood ":" VERY_UNLIKELY "

Sono rimasto decisamente sorpreso, perché non mi aspettavo il bacio (stavo solo mirando a un selfie con l'elefante). L'immagine può mostrare un po 'di gioia combinata con "schifo" perché i baci del muso di elefante sono disordinati e un po' viscidi.

Google Vision ha anche notato alcune altre cose sulla foto e su di me:

{"mid": "/ m / 0jyfg", "description": "occhiali", "score": 0.7390568, "attualità": 0.7390568}, {"mid": "/ m / 08g_yr", "description": " temple "," score ": 0.7100323," attualità ": 0.7100323}, {" mid ":" / m / 05mqq3 "," description ":" snout "," score ": 0.65698373," attualità ": 0.65698373}, { "mid": "/ m / 07j7r", "description": "tree", "score": 0.6460454, "attualità": 0.6460454}, {"mid": "/ m / 019nj4", "description": "smile "," score ": 0.60378826," attualità ": 0.60378826}, {" mid ":" / m / 01j3sz "," description ":" risate ","score": 0.51390797, "attualità": 0.51390797}]…

Google ha riconosciuto il muso dell'elefante! Ha anche notato che sto sorridendo e che sto ridendo. Nota che i punteggi più bassi indicano una minore confidenza, ma è positivo che l'API di Google Vision lo abbia notato.

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

Google non crede che questo sia più di un bacio platonico e si rende conto che non sono stato danneggiato dall'elefante.

A parte questo, troverai cose come immagini corrispondenti e immagini simili nella risposta. Troverai anche associazioni di argomenti. Ad esempio, ho twittato una volta su un articolo "Xennials" e ora sono associato ad esso!

In che modo è utile l'API di Google Vision?

Che tu stia lavorando nella sicurezza o nella vendita al dettaglio, essere in grado di capire cosa sia qualcosa da un'immagine può essere di fondamentale aiuto. Sia che tu stia cercando di capire che razza di gatto hai o chi è questo cliente o se Google pensa che un editorialista sia influente in un argomento, l'API di Google Vision può aiutarti. Tieni presente che i termini di Google consentono l'utilizzo di questa API solo nelle applicazioni di personal computing. Sia che tu stia adorando i dati in un'applicazione di ricerca o controllando se i contenuti inviati dagli utenti sono audaci o meno, Google Vision potrebbe essere proprio ciò di cui hai bisogno.

Sebbene abbia utilizzato la versione dell'API che utilizza URI pubblici, puoi anche pubblicare file binari non elaborati o posizioni di file di Google Cloud Storage utilizzando diverse permutazioni.

Nota dell'autore: grazie al mio collega di Lucidworks, Roy Kiesler , la cui ricerca ha contribuito a questo articolo.