Cómo utilizar la API de Google Vision

Recientemente, cubrí cómo las computadoras pueden ver, oír, sentir, oler y saborear. Una de las formas en que su código puede "ver" es con la API de Google Vision. La API de Google Vision conecta su código con las capacidades de reconocimiento de imágenes de Google. Puedes pensar en Google Image Search como una especie de interfaz API / REST para images.google.com, pero hace mucho más que mostrarte imágenes similares.

Google Vision puede detectar si eres un gato o un humano, así como las partes de tu rostro. Intenta detectar si estás posado o estás haciendo algo que no estaría bien para Google Safe Search, o no. Incluso intenta detectar si estás feliz o triste.

Configuración de la API de Google Vision

Para utilizar la API de Google Vision, debe registrarse para obtener una cuenta de Google Compute Engine. GCE es gratis para probar, pero necesitará una tarjeta de crédito para registrarse. Desde allí, selecciona un proyecto (pero se selecciona Mi primer proyecto si acaba de registrarse). Luego, obtenga una clave API del menú de la izquierda.

Aquí, estoy usando una clave API simple que puedo usar con la herramienta de línea de comandos Curl (si lo prefiere, puede usar una herramienta diferente capaz de llamar a las API REST):

Guarde la clave que genera en un archivo de texto o búfer en algún lugar (me refiero a él como YOUR_KEYpor ahora) y habilite la API en su proyecto (vaya a esta URL y haga clic en Habilitar la API):

Seleccione su proyecto en la siguiente pantalla:

¡Ahora estás listo para empezar! Pegue este texto en un archivo llamado google_vision.json:

{"solicitudes": [{"imagen": {"fuente": {"imageUri": "//upload.wikimedia.org/wikipedia/commons/9/9b/Gustav_chocolate.jpg"}}, "características": [ {"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}]}]}

Esta solicitud JSON le dice a la API de Google Vision qué imagen analizar y cuáles de sus funciones de detección habilitar. Solo hice la mayoría de ellos hasta 50 resultados.

Ahora usa Curl:

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

Mirando la respuesta de la API de Google Vision

* Conectado a vision.googleapis.com (74.125.196.95) puerto 443 (# 0) * Conexión TLS 1.2 usando TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 * Certificado de servidor: * .googleapis.com * Certificado de servidor: Google Internet Authority G3 * Certificado de servidor: 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 > Esperar: 100-continuar> * Listo esperando 100-continuar} [2252 bytes de datos] * Estamos completamente cargados y bien <HTTP / 1.1 200 OK <Tipo de contenido: aplicación / json; charset = UTF-8 <Vary: X-Origin <Vary: Referer <Fecha: Mar, 24 de abril de 2018 18:26:10 GMT <Servidor: ESF <Cache-Control: privado <X-XSS-Protection: 1; modo = bloque <X-Frame-Opciones: SAMEORIGIN <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: fragmentado <{[905 bytes de datos] * Conexión n. ° 0 para alojar vision.googleapis. com dejó intacto

Debería ver algo como esto:

Si miras los resultados, verás esto:

{"answers": [{"labelAnnotations": [{"mid": "/ m / 01yrx", "description": "cat", "score": 0.99524164, "topicality": 0.99524164}, {"mid": "/ m / 035qhg", "description": "fauna", "score": 0.93651986, "topicality": 0.93651986}, {"mid": "/ m / 04rky", "description": "mamífero", "score ": 0.92701304," topicality ": 0.92701304}, {" mid ":" / m / 07k6w8 "," description ":" gatos pequeños a medianos "," score ": 0.92587274," topicality ": 0.92587274}, {" mid ":" / m / 0307l ","description ":" gato como mamífero "," puntuación ": 0.9215815," actualidad ": 0.9215815}, {" mid ":" / m / 09686 "," descripción ":" vertebrado "," puntuación ": 0.90370363," actualidad ": 0.90370363}, {" mid ":" / m / 01l7qd "," description ":" bigotes "," score ": 0.86890864," actualidad ": 0.86890864…descripción ":" bigotes "," puntuación ": 0.86890864," actualidad ": 0.86890864…descripción ":" bigotes "," puntuación ": 0.86890864," actualidad ": 0.86890864…

Google sabe que le ha proporcionado una imagen de gato. ¡Incluso encontró los bigotes!

Ahora probaré con un mamífero más grande. Reemplace la URL en la solicitud con mi foto de perfil de Twitter y ejecútela nuevamente. Tiene una foto de mí siendo besado por un elefante en mi viaje de 2014 a Tailandia.

Los resultados incluirán la ubicación de mis rasgos faciales.

… "Puntos de referencia": [{"type": "LEFT_EYE", "position": {"x": 114.420876, "y": 252.82072, "z": -0.00017215312}}, {"type": "RIGHT_EYE", "posición": {"x": 193.82027, "y": 259.787, "z": -4.495486}}, {"tipo": "LEFT_OF_LEFT_EYEBROW", "posición": {"x": 95.38249, "y": 234.60289, "z": 11.487803}},…

Google no es tan bueno juzgando las emociones como los rasgos faciales:

"rollAngle": 5.7688847, "panAngle": -3.3820703, "joyLikelihood": "UNLIKELY", "sorrowLikelihood": "MUY_UNLIKELY", "angryLikelihood": "UNLIKELY", "surpriseLikelihood": "MUY_ESPERO" VERY_UNLIKELY "," blurLikelihood ":" MUY_UNLIKELY "," headwearLikelihood ":" MUY_UNLIKELY "

Definitivamente me sorprendió, porque no esperaba el beso (solo estaba apuntando a una selfie con el elefante). La imagen puede mostrar un poco de alegría combinada con "puaj" porque los besos con el hocico de elefante son sucios y un poco viscosos.

Google Vision también notó algunas otras cosas sobre la imagen y sobre mí:

{"mid": "/ m / 0jyfg", "description": "lentes", "score": 0.7390568, "topicality": 0.7390568}, {"mid": "/ m / 08g_yr", "description": " temple "," score ": 0.7100323," topicality ": 0.7100323}, {" mid ":" / m / 05mqq3 "," description ":" hocico "," score ": 0.65698373," actualidad ": 0.65698373}, { "mid": "/ m / 07j7r", "description": "árbol", "puntuación": 0.6460454, "actualidad": 0.6460454}, {"mid": "/ m / 019nj4", "descripción": "sonrisa "," score ": 0.60378826," actualidad ": 0.60378826}, {" mid ":" / m / 01j3sz "," description ":" risa ","puntuación": 0.51390797, "actualidad": 0.51390797}]…

¡Google reconoció el hocico de elefante! También notó que estoy sonriendo y que me estoy riendo. Tenga en cuenta que las puntuaciones más bajas indican una menor confianza, pero es bueno que la API de Google Vision lo haya notado.

… "SafeSearchAnnotation": {"adult": "MUY_UNLIKELY", "spoof": "POSSIBLE", "medical": "MUY_UNLIKELY", "violencia": "UNLIKELY", "picante": "IMPROBABLE"}…

Google no cree que esto sea más que un beso platónico y se da cuenta de que el elefante no me hace daño.

Aparte de esto, encontrará cosas como imágenes coincidentes e imágenes similares en la respuesta. También encontrará asociaciones de temas. Por ejemplo, una vez tuiteé sobre un artículo de "Xennials", ¡y ahora estoy asociado con él!

¿Qué utilidad tiene la API de Google Vision?

Ya sea que trabaje en la seguridad o en el comercio minorista, poder averiguar qué es algo a partir de una imagen puede ser fundamentalmente útil. Ya sea que esté tratando de averiguar qué raza de gato tiene o quién es este cliente o si Google cree que un columnista es influyente en un tema, la API de Google Vision puede ayudar. Tenga en cuenta que los términos de Google solo permiten que esta API se utilice en aplicaciones informáticas personales. Aún así, ya sea que esté adorando los datos en una aplicación de búsqueda o verificando si el contenido enviado por el usuario es picante o no, Google Vision podría ser justo lo que necesita.

Si bien usé la versión de la API que usa URI públicos, también puede publicar ubicaciones de archivos binarios sin procesar o de Google Cloud Storage usando diferentes permutaciones.

Nota del autor: Gracias a mi colega de Lucidworks, Roy Kiesler , cuya investigación contribuyó a este artículo.