¿Recuerdan a Watson?. Watson es la computadora que venció a los campeones de Jeopardy hace unos años y el día de hoy haremos uso de una de sus API’s, son muchas las API’s a las que podemos acceder, pero el día de hoy solo veremos Visual Recognition.

Para obtener acceso a las API’s debemos de dar de alta una cuenta aquí:

https://console.ng.bluemix.net/registration/

Una vez que tengamos la cuenta debemos dar de alta cada una de las API’s y solo tendremos 30 días de uso gratuito, así que aprovechen esos días.

Para acceder a ellas usaremos Python aunque también puedes usar Java, Node o hacer peticiones directas con curl. Para Python solo se instala el paquete con pip:

pip install watson-developer-cloud

IBM Watson™ Visual Recognition

Visual Recognition, ya esta entrenada y tiene clasificadores por default pero también tienes la opción de crear tu propio clasificador con tu propias imágenes.

El score de los clasificadores va de 0 a 1.

Por ejemplo tenemos esta imagen de un oso:

brown-bear-cub-waving-Kevin-Dietrich-570x375
Y de esta manera clasificamos la imagen:

import json
from watson_developer_cloud import VisualRecognitionV3
from settings import VISUAL_API_KEY


api_version = '2016-05-20'
visual_recognition = VisualRecognitionV3(api_version, api_key=VISUAL_API_KEY)

image_url = 'http://www.nwf.org/~/media/Content/NWM/Animals/Mammals/brown-bear-cub-waving-Kevin-Dietrich-570x375.ashx'
result = visual_recognition.classify(images_url=image_url)

print(json.dumps(result, indent=2))

Nota: Todo el código estará en un repo en github, el link al final del post.

Nota 2: “from settings import VISUAL_API_KEY” es un archivo donde puse todas las keys que también estará de ejemplo en el repo.

Importamos VisualRecognitionV3 que es quien nos dará acceso a los diferentes métodos de Visual Recognition

from watson_developer_cloud import VisualRecognitionV3

Importamos la API key

from settings import VISUAL_API_KEY

En una variable seteamos la versión de la API que queremos usar (2016-05-20 es la ultima versión).

api_version = '2016-05-20'

Creamos un objeto de VisualRecognitionV3 pasando como parámetro nuestra key y la versión que queremos.

visual_recognition = VisualRecognitionV3(api_version, api_key=VISUAL_API_KEY)

En una variable ponemos la URL de la imagen que queremos clasificar.

image_url = 'http://www.nwf.org/~/media/Content/NWM/Animals/Mammals/brown-bear-cub-waving-Kevin-Dietrich-570x375.ashx'

Y en otra variable almacenamos el resultado.

result = visual_recognition.classify(images_url=image_url)

Por ultimo imprimimos el resultado.

print(json.dumps(result, indent=2))

El resultado es el siguiente:

{
  "custom_classes": 0,
  "images": [
    {
      "source_url": "http://www.nwf.org/~/media/Content/NWM/Animals/Mammals/brown-bear-cub-waving-Kevin-Dietrich-570x375.ashx",
      "resolved_url": "http://www.nwf.org/~/media/Content/NWM/Animals/Mammals/brown-bear-cub-waving-Kevin-Dietrich-570x375.ashx",
      "classifiers": [
        {
          "classifier_id": "default",
          "name": "default",
          "classes": [
            {
              "class": "animal",
              "type_hierarchy": "/animals",
              "score": 1.0
            },
            {
              "class": "mammal",
              "type_hierarchy": "/animals/mammal",
              "score": 0.999999
            },
            {
              "class": "bear",
              "type_hierarchy": "/animals/bear",
              "score": 0.937027
            },
            {
              "class": "grizzly",
              "type_hierarchy": "/animals/bears/grizzly",
              "score": 0.574443
            }
          ]
        }
      ]
    }
  ],
  "images_processed": 1
}

Como pueden ver nos da como resultado, el clasificador que fue usado (en este caso el default) y los scores de cada una de las clases en las que nuestra imagen entra las cuales son: animal, mammal, bear y grizzly y pues si nuestra imagen es de un animal, que es un mamífero y que es un oso grizzly.

También probé con otras imágenes en las cuales se encontraban mas de un elemento y en casi todas detecto todos los elementos de la imagen, también me dieron ganas de probar con imágenes porno para ver si las detectaba como tal y así poder hacer un chrome extension para cuando estas en el trabajo y te mandan un link tus amigos sin avisar que es NSFW y te la bloque automáticamente para que no te corran de tu jale, pero estaba en starbucks.

Esta API tambien ofrece deteccion facial la cual retorna las posiciones de las caras en la image, edad, genero y si eres famoso tu nombre, por ejemplo la siguiente foto de Elon Musk:

rtx1b282

Con el siguiente código, que es lo mismo que el anterior solo cambiamos el método classify por detect_faces.

import json
from watson_developer_cloud import VisualRecognitionV3
from settings import VISUAL_API_KEY


api_version = '2016-05-20'
visual_recognition = VisualRecognitionV3(api_version, api_key=VISUAL_API_KEY)

image_url = 'http://static3.techinsider.io/image/56046a50bd86ef17008bce4d-1689-1267/rtx1b282.jpg'
result = visual_recognition.detect_faces(images_url=image_url)

print(json.dumps(result, indent=2))

El resultado es el siguiente:

{
  "images_processed": 1,
  "images": [
    {
      "resolved_url": "http://static3.techinsider.io/image/56046a50bd86ef17008bce4d-1689-1267/rtx1b282.jpg",
      "source_url": "http://static3.techinsider.io/image/56046a50bd86ef17008bce4d-1689-1267/rtx1b282.jpg",
      "faces": [
        {
          "age": {
            "score": 0.447907,
            "max": 64,
            "min": 55
          },
          "identity": {
            "score": 0.993307,
            "type_hierarchy": "/people/investors/elon musk",
            "name": "Elon Musk"
          },
          "face_location": {
            "width": 517,
            "left": 451,
            "top": 231,
            "height": 596
          },
          "gender": {
            "score": 0.993307,
            "gender": "MALE"
          }
        }
      ]
    }
  ]
}

Como pueden ver no es muy exacta, la edad de Elon Musk es 45 y el resultado dice que entre 55 y 64, pero en lo demás acertó.

Tratare de hacer un por cada una de las API’s si es que no se me acaban los 30 dias de prueba.

 

It's only fair to share...Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn0Share on Reddit0Pin on Pinterest0Email this to someone

Leave a Reply

Your email address will not be published. Required fields are marked *

Comment moderation is enabled. Your comment may take some time to appear.